Цикл while в Python: что это такое, как работает, примеры
Разберем особенности условного цикла: в каких случаях необходимо использовать while, как управлять работой бесконечного цикла, и когда while лучше заменить циклом for. В конце статьи – практические задания и пример простейшей игры. ← Часть 9 Особенности цикла for В прошлой статье мы изучали цикл for – он используется в тех случаях, когда заранее известно количество итераций, совершаемых в цикле. Число исполнений цикла for определяется функцией Цикл while также часто называют бесконечным, поскольку он может выполняться до тех пор, пока пользователь не остановит его нажатием определенной клавиши. Бесконечные циклы можно создавать намеренно – для выполнения фонового скрипта, игры, прикладной программы. Но иногда цикл while может стать бесконечным из-за ошибки. Например, если в приведенном выше коде не указать ввод новой переменной Самый простой способ управления бесконечным циклом – использование оператора Если выполнение цикла не остановить сразу же, как только список опустеет, появится ошибка: Оператор Помимо Оператор Если пользователь введет набор цифр 1. В цикле while можно использовать опциональный параметр 2. В цикле while можно использовать любое количество условий и условных операторов 3. Цикл while может быть вложенным. Этот код выводит простые числа из диапазона от 2 до 100: 4. В качестве вложенных циклов while могут включать в себя циклы for. Этот код, к примеру, будет бесконечно печатать цифры в диапазоне от 0 до 5: 5. Любой цикл for можно заменить циклом while, но обратное возможно только в том случае, когда количество итераций можно определить до начала цикла. К примеру, эти циклы while и for равнозначны – оба печатают цифры от 0 до 9: А этот цикл while заменить циклом for невозможно – программа будет бесконечно возводить в квадрат все введенные пользователем числа, пока не получит Напишите программу, которая принимает на вход целые числа и вычисляет их сумму, пока пользователь не введет 0. Пример ввода: Вывод: Решение: Напишите программу, которая получает от пользователя число n > 100, и вычисляет (без использования методов строк) произведение цифр, из которых n состоит. Пример ввода: Вывод: Решение: Напишите программу, которая получает на вход два числа a и b, и находит наименьшее число c, которое без остатка делится на a и b. Пример ввода: Вывод: Решение: Напишите программу, которая составляет строку из полученных от пользователя слов, пока длина строки не достигнет 50 символов. Слова, начинающиеся с гласных, в строку не включаются. Пример ввода: Вывод: Решение: Напишите программу для конвертации числа из десятичного системы в двоичную без использования функции Пример ввода: Вывод: Решение: Напишите программу, которая получает на вход число и без использования строковых методов переставляет цифры в обратном порядке. Пример ввода: Вывод: Решение: Напишите программу для вычисления факториала числа n без использования функции Пример ввода: Вывод: Решение: Напишите программу, которая получает от пользователя число n и определяет, является ли оно простым, или у него есть делители, кроме 1 и самого себя. Пример ввода: Вывод: Решение: Напишите программу, использующую вложенный цикл while для вывода треугольника размером n x n х n, состоящего из символов Пример ввода: Вывод: Решение: Напишите программу для запоминания английских названий месяцев: 1. Русские названия месяцев выводятся в случайном порядке с помощью метода 2. Пользователь получает три попытки для написания правильного названия на английском. 3. После трех неверных попыток программа переходит к другому слову. Пример ввода: Вывод: Решение: Цикл while используют в случаях, когда число итераций невозможно оценить заранее. Во всех остальных случаях лучше применять цикл for. Чтобы цикл while случайно не превратился в бесконечный, стоит продумать все события и условия, которые должны приводить к своевременному прерыванию программы. В следующей статье приступим к изучению функций. *** Цикл while в Python
range()
или размером коллекции. Если диапазон значений не известен заранее, необходимо использовать другой цикл – while: он выполняется, пока не наступит определенное событие (или не выполнится необходимое условие). По этой причине цикл while называют условным. Вот пример простейшего цикла while – он выполняется, пока пользователь не введет 0
:
n = int(input()) while n != 0: print(n + 5) n = int(input())
n = int(input())
в теле цикла, while будет бесконечно выводить одно и то же значение, пока пользователь не остановит выполнение программы нажатием Ctrl + C. Управление бесконечным циклом while в Питоне
break
. В приведенном ниже коде список lst
генерируется случайным образом, и до начала цикла его длина неизвестна. Однако выполнение цикла можно оставить, как только список опустеет в результате многократного выполнения операции pop()
:
import random lst = [i for i in range(random.randint(5, 500))] while True: if not lst: break print(lst.pop())
IndexError: pop from empty list
break
также помогает сократить количество итераций и прекратить выполнение программы, как только нужное решение найдено. Например, таким образом можно найти наименьший делитель числа n, отличный от 1:
n = int(input()) i = 2 while True: if n % i == 0: break i += 1 print(i)
break
, управлять бесконечным циклом можно с помощью флагов (сигнальных меток). В приведенном ниже примере программа бесконечно запрашивает у пользователя ввод любого слова, пока пользователь не введет exit
. Это событие меняет статус цикла на False
, и работа программы завершается:
text = 'Введите любое слово: ' text += 'nИли введите exit для выхода: ' active = True while active: message = input(text) if message == 'exit': active = False else: print(message)
Пропуск итераций в цикле while
continue
можно использовать для пропуска операций, если элементы не соответствуют заданным критериям. Этот код работает, пока не будет сформирован список из 5 элементов – при этом в список не включаются числа в диапазоне между 90 и 120, а также число 50:
sp = [] while len(sp) < 5: num = int(input()) if num == 50 or 90 <= num <= 120: continue sp.append(num) print(sp)
45 50 121 119 95 105 3 4 7
, в список будут добавлены только числа, соответствующие критериям:
[45, 121, 3, 4, 7]
Особенности цикла while
else
. В этом примере процедура pop()
выполняется, пока список не опустеет, после чего выводится сообщение Список пуст
:
import random lst = [i for i in range(random.randint(5, 500))] while len(lst) > 1: print(lst.pop()) else: print('Список пуст')
and
, or,
иnot
:
n = int(input()) while True: if n == 0: break elif n > 50 or n <= -50: break elif n % 2 == 0: break print(n / 5) n = int(input())
i = 2 while(i < 100): j = 2 while j <= i / j: if not i % j: break j = j + 1 if j > i / j: print(f'{i} - простое число') i = i + 1
while True: for i in range(5): print(i)
i = 0 while i < 10: print(i) i += 1 for i in range(10): print(i)
0
:
n = int(input()) while True: if n == 0: break print(n ** 2) n = int(input())
Практика
Задание 1
4 5 6 0
15
summa = 0 while True: n = int(input()) summa += n if n == 0: break print(summa)
Задание 2
335
45
n = int(input()) prod = 1 while n: prod *= n % 10 n //= 10 print(prod)
Задание 3
7 12
84
a, b = int(input()), int(input()) c = a while c % b: c += a print(c)
Задание 4
о бойся Бармаглота сын он так свиреп и дик а в глуще рымит
бойся Бармаглота сын так свиреп дик в глуще рымит
st = '' while len(st) < 50: word = input() if word[0] in 'аиеёоуыэюя': continue st += ' ' + word print(st)
Задание 5
bin()
.
25
11001
n = int(input()) result = '' while n > 0: result = str(n % 2) + result n = n // 2 print(result)
Задание 6
176435
534671
n = int(input()) rev = 0 while n!= 0: r = n % 10 rev = rev * 10 + r n = n // 10 print(rev)
Задание 7
math.factorial()
.
7
5040
n = int(input()) fact = 1 while n > 1: fact *= n n -= 1 print(fact)
Задание 8
60
60 делится на 2 60 делится на 3 60 делится на 4 60 делится на 5 60 делится на 6 60 делится на 10 60 делится на 12 60 делится на 15 60 делится на 20 60 делится на 30 Таким образом, 60 не является простым числом
n = int(input()) flag = False i = 2 while i < n: if n % i ==0: flag = True print(f'{n} делится на {i}') i += 1 if flag: print(f'Таким образом, {n} не является простым числом') else: print(f'{n} - простое число')
Задание 9
*
.
6
* ** *** **** ***** ******
n = int(input()) i, j = 0, 0 while i < n: while j <= i: print('*', end='') j += 1 j = 0 i += 1 print('')
Задание 10
random.shuffle()
.
Месяц март по-английски называется: march Месяц январь по-английски называется: January Месяц август по-английски называется: august Месяц май по-английски называется: may Месяц апрель по-английски называется: aprile Неверно! Осталось попыток: 2 Месяц апрель по-английски называется: aprill Неверно! Осталось попыток: 1 Месяц апрель по-английски называется: appril Неверно! Осталось попыток: 0 Попытки исчерпаны! Месяц июль по-английски называется: july Месяц сентябрь по-английски называется: september Месяц июнь по-английски называется: june Месяц октябрь по-английски называется: october Месяц ноябрь по-английски называется: november Месяц декабрь по-английски называется: december Месяц февраль по-английски называется: february
Конец игры Количество правильных ответов: 11 Число ошибок: 3
import random correct, wrong, attempts = 0, 0, 3 months = {'январь': 'January', 'февраль': 'February', 'март': 'March', 'апрель': 'April', 'май': 'May', 'июнь': 'June', 'июль': 'July', 'август': 'August', 'сентябрь': 'September', 'октябрь': 'October', 'ноябрь': 'November', 'декабрь': 'December'} rand_keys = list(months.keys()) random.shuffle(rand_keys) for key in rand_keys: counter = 0 while counter < attempts: spelling = input(f'Месяц {key} по-английски называется: ') if spelling.title() == months[key]: correct += 1 break else: counter += 1 wrong += 1 print(f'Неверно! Осталось попыток: {attempts - counter}') else: print(f'Попытки исчерпаны!') print('Конец игры') print(f'Количество правильных ответов: {correct}') print(f'Число ошибок: {wrong}')
Подведем итоги
Содержание самоучителя
- 0 views
- 0 Comment