цикл while в Python. Як це працює, приклади використання

Цикли є одним з основних інструментів будь-якої мови. У Python є два основних цикли, один із яких — while. Розглянемо його, а також для кращого розуміння картини ще один. Дійсно, в порівнянні з чимось подібним зрозуміти будь-який матеріал набагато легше, чи не так?

Поняття циклу

Цикл потрібен, коли певну дію потрібно виконати кілька разів. Це дуже спрощено, тому що насправді спектр застосування циклів набагато ширше. У Python є два основних типи циклів: for і while. Найпопулярнішим є для.

Крім конкретних дій, ви можете зациклювати різні фрагменти коду до певного моменту. Це може бути певну кількість разів або доки виконується певна умова.

Перш ніж ми почнемо розуміти типи циклів і, зокрема, while, нам ще потрібно зрозуміти, що таке ітерація. Це одне повторення дії або послідовності дій протягом поточного циклу в рамках поточного виконання програми.

Цикл для

Наш цикл For не є лічильником, як у багатьох інших мовах. Його завдання — перерахувати певну послідовність значень. Що це значить? Скажімо, у нас є список елементів. Спочатку цикл займає перший, другий, третій і так далі.

Перевага цього циклу в Python полягає в тому, що вам не потрібно визначати індекс елемента, щоб знати, коли виходити з циклу. Все буде зроблено автоматично.

>>> список = [10, 40, 20, 30]

>>> для елемента в списку:

… print(element + 2)

...

12

42

22

32

У нашому прикладі ми використали змінну елемент після команди for. Загалом ім'я може бути будь-яким. Наприклад, популярне позначення i. І з кожною ітерацією цій змінній буде присвоюватися певний об’єкт зі списку, який ми назвали відповідним словом.

У нашому випадку список являє собою послідовність чисел 10,40,20,30. На кожній ітерації у змінній з’являється відповідне значення. Наприклад, як тільки запускається цикл, змінна елемент присвоюється значення 10. На наступній ітерації десятка перетворюється на число 40, на третій раз вона перетворюється на число 20 і, нарешті, на останній ітерації циклу, вона перетворюється на 30.

Сигналом закінчення циклу є кінець елементів у списку.

Якщо вам потрібен цикл для виконання класичного перерахування значень, як в інших мовах програмування, вам слід створити список із послідовністю натуральних чисел до потрібного нам значення.

>>> список = [1,2,3,4,5]

Або скористайтеся функцією len(), щоб визначити довжину списку. Але в цьому випадку краще використовувати петлю при цьому, оскільки немає необхідності використовувати змінну.

Якщо потрібно змінити послідовність значень у списку, зациклюйтеся та цінності і тут приходить на допомогу. Для цього на кожній ітерації кожному елементу списку має бути присвоєно відповідне значення.

Поки петля

На відміну від циклу та цінності, який просто перебирає значення послідовності, циклу в той час як має більше застосувань. Назва цього типу циклів перекладається як «ще». Тобто «до».

Це універсальний цикл, який є у всіх мовах програмування. І чимось нагадує умовний оператор тис, який виконує перевірку, чи виконується певна умова. Тільки на відміну від умовного оператора, в той час як виконує перевірку на кожній ітерації, а не лише один раз. І лише якщо умова хибна, цикл завершується і виконується наступна за ним команда. Простіше кажучи, якщо ситуація, в якій він працює, вже не діє.

Якщо ми малюємо цикл в той час як спрощено це робиться за такою схемою.цикл while в Python. Як це працює, приклади використання

Основна гілка програми (яка працює поза циклом) зображена на цьому малюнку синіми прямокутниками. Бірюза символізує тіло циклу. У свою чергу, ромб – це умова, яка перевіряється на кожній ітерації.

Цикл в той час як може призвести до двох винятків:

  1. Якщо на початку циклу логічний вираз не повертає істину, то він просто не починається, завершившись до виконання. Загалом така ситуація є нормальною, оскільки за певних обставин додаток може не передбачати наявність виразів у тілі циклу.
  2. Якщо вираз завжди істинний, це може призвести до циклу. Тобто до нескінченного прокручування циклу. Тому в таких програмах завжди має бути оператор виходу з циклу чи програми. Однак така ситуація виникне, якщо програмі вдалося визначити істинність чи хибність конкретної умови. Якщо їй це не вдалося зробити, то повертається помилка із завершенням роботи програми. Або ви можете обробити помилку, і тоді, якщо вона станеться, буде виконано певний код.

Варіантів усунення помилки може бути величезна кількість. Наприклад, програма може попросити користувача правильно ввести дані. Так, якщо людина вказала від'ємне число там, де воно може бути тільки додатним, або ввела літери там, де повинні бути тільки цифри, програма може про це розповісти.

Приклади циклу While

Ось приклад коду, який обробляє помилку в цьому випадку.

n = input(“Введіть ціле число: “) 

while type(n) != int:

    спробувати:

        n = int(n)

    крім ValueError:

        print(“Неправильний запис!”)

        n = input(“Введіть ціле число: “) 

якщо n % 2 == 0:

    print(“Even”)

ще:

    print(“Непарний”)

Майте на увазі, що Python використовує двокрапки для оголошення складних конструкцій коду.

У наведеному вище коді ми визначили як умову перевірку того, чи число є цілим. Якщо так, то повертається false. Якщо ні, то правда.

У другій частині коду, де використовується оператор if, ми використали оператор %, щоб знайти залишок після операції ділення. Наступний крок — перевірити, чи число парне. Якщо ні, то в цьому випадку залишок дорівнює одиниці. Відповідно число непарне. 

Простіше кажучи, наведений вище код спочатку перевіряє, чи рядок, введений користувачем, є числом. Якщо так, то виконується друга перевірка, щоб побачити, чи є залишок від ділення на два. Але другий блок не буде виконано, доки значення, введене користувачем, не буде числовим.

Тобто цикл виконуватиметься регулярно, доки не виконається умова. У цій ситуації це працює так. 

Тобто можна піти від навпаки: зациклювати певну дію, поки подія не стане хибною.

Розбір коду

Тепер розглянемо більш детально, як працює цей код. Для цього розберемо його крок за кроком.

  1. Спочатку користувач вводить рядок, який приймається змінною n. 
  2. Використання петлі в той час як перевіряється тип цієї змінної. При першому записі він не дорівнює Int. Отже, в результаті тесту встановлено, що ця умова відповідає дійсності. Тому вводиться тіло циклу.
  3. За допомогою оператора намагатися ми намагаємося перетворити рядок на число. Якщо це зроблено, помилки не виникає. Відповідно, обробляти її не потрібно. Тому інтерпретатор повертається на початок циклу, і за результатами перевірки виявляється, що він став цілим числом. Отже, переходимо до кроку 7
  4. Якщо перетворення було невдалим, видається ValueError. У цьому випадку програмний потік надсилається до обробника винятків.
  5. Користувач вводить нове значення, яке присвоюється змінній n.
  6. Інтерпретатор повертається до кроку 2 і знову перевіряє. Якщо це ціле значення, перейдіть до кроку 7. Якщо ні, спроба перетворення повторюється відповідно до кроку 3.
  7. За допомогою оператора if Визначає, чи є залишок після ділення числа на 2. 
  8. Якщо ні, повертається текст «навіть».
  9. Якщо ні, повертається текст «непарний».

Розглянемо тепер такий приклад. Спробуйте визначити, скільки разів буде проходити цей цикл?

всього = 100 

я = 0

поки я < 5:

    n = int(вхід())

    total = всього — n

    i = i + 1 

print(“Залишилося”, всього)

Правильна відповідь 5. Спочатку значення змінної i – нуль. Інтерпретатор перевіряє, чи дорівнює змінна i 4 або менше. Якщо так, то повертається значення. правда, і цикл виконується відповідно. Значення збільшується на одиницю.

Після першої ітерації значення змінної стає 1. Проводиться перевірка, і програма розуміє, що це число знову менше 5. Відповідно, тіло циклу виконується вдруге. Оскільки кроки подібні, значення також збільшується на одиницю, і тепер змінна дорівнює 2.

Це значення також менше п'яти. Потім цикл виконується втретє, додається до змінної i 1 і йому присвоюється значення 3. Це знову менше п’яти. І так справа доходить до шостої ітерації циклу, на якій визначається значення змінної i дорівнює 5 (зрештою, спочатку він був нулем, наскільки ми пам’ятаємо). Відповідно, ця умова не проходить перевірку, і цикл автоматично припиняється і здійснюється перехід до наступного кроку, який знаходиться поза ним (або завершення програми, якщо наступні кроки не передбачені).

Цикл може відбуватися і в зворотному напрямку. Ось приклад коду, де з кожною наступною ітерацією одиниця віднімається від поточного значення змінної. 

всього = 100 

тоді як загальна сума > 0:

    n = int(вхід())

    total = всього — n 

print(“Ресурс вичерпано”)

Спробуйте вгадати, що робить ця програма! Уявіть це у змінній загальний зберігається інформація про ресурс програми. Кожен раз інтерпретатор перевіряє, чи існує ресурс. Якщо ні, то відображається текст «Ресурс вичерпано» і програма закривається. І з кожною ітерацією циклу ресурс зменшується на число, яке вказує користувач.

А тепер домашнє завдання. Спробуйте змінити наведений вище код так, щоб змінна фізично не стала негативною. 

4 Коментарі

залишити коментар