Цикл While | Документация AnyLogic
- Свойства
Визуальное задание алгоритмов с помощью диаграмм действийРедактирование блоков диаграммы действийЦикл Do WhileСоздание диаграммы действий. Учебное пособие.
Элемент диаграммы действий.
Цикл While является одним из трех блоков диаграммы действий, предназначенных для реализации циклов итераций. Циклы необходимы для того, чтобы повторить некоторые действия несколько раз. Другие два доступных цикла — это Цикл For и Цикл Do While.
Цикл While выполняется до тех пор, пока заданное для этого цикла условие будет истинно (принимает значение true). Как только условие принимает значение «ложно», цикл завершается и идёт переход к следующему блоку диаграммы действий. Вы можете задать действия, которые вы хотите выполнить на каждой итерации цикла, путем добавления соответствующих блоков диаграммы действий внутрь блока Цикл While.
Полную информацию об операторе Java Цикл While вы можете получить здесь.
Цикл While очень похож на Цикл Do While. Единственным отличием является то, что истинность выражения проверяется не в конце каждой итерации, а в начале. Следовательно, Цикл While может не выполниться ни разу (истинность выражения проверяется в начале каждой итерации, и если с самого начала значением выражения будет ложно, то выполнение цикла будет сразу же прекращено). Первая же итерация цикла Do While выполнится обязательно (истинность выражения проверяется только в конце итерации).
Чтобы получить доступ к элементам, которые потребуются вам для создания диаграммы действий, активируйте палитру Диаграмма действий.
Чтобы вставить блок «цикл while» в диаграмму действий
- Перетащите элемент Цикл While из палитры Диаграмма действий на диаграмму типа агентов. Перетаскивая блок, отпустите кнопку мыши тогда, когда курсор мыши будет находиться над точкой, которая находится в той ветви диаграммы действий, куда вы хотите поместить данный блок (при наведении курсора эта точка должна подсветиться зеленым цветом).
- В выбранной вами ветви диаграммы действий должен появиться новый блок.
- Перейдите в панель Свойства.
- В поле Условие введите условие — логическое выражение, которое будет вычисляться для проверки того, должны ли действия этого цикла выполниться еще раз.
- Вставьте другие блоки диаграммы действий, задающие те действия, которые вы хотите выполнить на каждой итерации цикла, в соответствующие точки вставки, находящиеся на диаграмме внутри блока цикла While.
- Основные
Условие — Логическое условие, которое будет вычисляться для проверки того, должны ли действия этого цикла выполниться еще раз.
- Специфические
Имя — Здесь вы можете указать имя объекта.
Метка — Здесь вы можете ввести комментарий к этому блоку, объясняющий смысл этого цикла. Комментарий будет отображен внутри блока вместо Java кода, соответствующего этому циклу.
Цвет заливки — Задает цвет заливки блока. Щелкните мышью внутри элемента управления и выберите нужный цвет из списка наиболее часто используемых цветов или же выберите любой другой цвет с помощью диалога Цвета.
Как мы можем улучшить эту статью?
что это такое, как работает, примеры
Цикл while в Python
В прошлой статье мы изучали цикл for – он
используется в тех случаях, когда заранее известно количество итераций,
совершаемых в цикле. Число исполнений цикла for определяется функцией range()
или размером коллекции. Если диапазон значений не
известен заранее, необходимо использовать другой цикл – while: он выполняется, пока не наступит
определенное событие (или не выполнится необходимое условие). По этой причине
цикл while называют условным. Вот пример простейшего цикла while – он выполняется, пока пользователь
не введет 0
:
n = int(input()) while n != 0: print(n + 5) n = int(input())
Цикл while также часто называют бесконечным, поскольку он может
выполняться до тех пор, пока пользователь не остановит его нажатием
определенной клавиши. Бесконечные циклы можно создавать намеренно – для
выполнения фонового скрипта, игры, прикладной программы. Но иногда цикл while может
стать бесконечным из-за ошибки. Например, если в приведенном выше коде не
указать ввод новой переменной
в теле цикла, 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
1. В цикле while можно использовать опциональный параметр else
. В этом примере процедура pop()
Список пуст
:import random lst = [i for i in range(random.randint(5, 500))] while len(lst) > 1: print(lst.pop()) else: print('Список пуст')
2. В цикле while можно использовать любое количество условий и условных
операторов 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())
3. Цикл while может быть вложенным. Этот код выводит простые числа из диапазона от 2 до 100:
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
4. В качестве вложенных циклов while могут включать в себя циклы for. Этот код, к примеру, будет бесконечно печатать цифры в диапазоне от 0 до 5:
while True: for i in range(5): print(i)
5. Любой цикл for можно заменить циклом while, но обратное возможно только в том случае, когда количество итераций можно определить до начала цикла. К примеру, эти циклы while и for равнозначны – оба печатают цифры от 0 до 9:
i = 0 while i < 10: print(i) i += 1 for i in range(10): print(i)
А этот цикл while заменить циклом for невозможно – программа будет бесконечно
возводить в квадрат все введенные пользователем числа, пока не получит 0
:
n = int(input()) while True: if n == 0: break print(n ** 2) n = int(input())
Практика
Задание 1
Напишите программу, которая принимает на вход целые числа и вычисляет их сумму, пока пользователь не введет 0.
Пример ввода:
4 5 6 0
Вывод:
15
Решение:
summa = 0 while True: n = int(input()) summa += n if n == 0: break print(summa)
Задание 2
Напишите программу, которая получает от пользователя число n > 100, и вычисляет (без использования методов строк) произведение цифр, из которых n состоит.
335
Вывод:
45
Решение:
n = int(input()) prod = 1 while n: prod *= n % 10 n //= 10 print(prod)
Задание 3
Напишите программу, которая получает на вход два числа a и b, и находит наименьшее число c, которое без остатка делится на a и b.
Пример ввода:
7 12
Вывод:
84
Решение:
a, b = int(input()), int(input()) c = a while c % b: c += a print(c)
Задание 4
Напишите программу, которая составляет строку из полученных от пользователя слов, пока длина строки не достигнет 50 символов. Слова, начинающиеся с гласных, в строку не включаются.
Пример ввода:
о бойся Бармаглота сын он так свиреп и дик а в глуще рымит
Вывод:
бойся Бармаглота сын так свиреп дик в глуще рымит
Решение:
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
Напишите программу для вычисления факториала числа n без использования функции math. factorial()
.
Пример ввода:
7
Вывод:
5040
Решение:
n = int(input()) fact = 1 while n > 1: fact *= n n -= 1 print(fact)
Задание 8
Напишите программу, которая получает от пользователя число n и определяет, является ли оно простым, или у него есть делители, кроме 1 и самого себя.
Пример ввода:
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
Напишите программу, использующую вложенный цикл while для вывода треугольника
размером n x n х n, состоящего из символов*
.
Пример ввода:
6
Вывод:
* ** *** **** ***** ******
Решение:
n = int(input()) i, j = 0, 0 while i < n: while j <= i: print('*', end='') j += 1 j = 0 i += 1 print('')
Задание 10
Напишите программу для запоминания английских названий месяцев:
1. Русские названия месяцев выводятся в случайном порядке с
помощью метода random.shuffle()
.
2. Пользователь получает три попытки для написания правильного названия на английском.
3. После трех неверных попыток программа переходит к другому слову.
Пример ввода:
Месяц март по-английски называется: 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}')
Подведем итоги
Цикл while используют в случаях, когда число итераций невозможно оценить заранее. Во всех остальных случаях лучше применять цикл for. Чтобы цикл while случайно не превратился в бесконечный, стоит продумать все события и условия, которые должны приводить к своевременному прерыванию программы.
В следующей статье приступим к изучению функций.
***
Содержание самоучителя
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
Как использовать циклы while в Python
Цикл while Python можно использовать для выполнения блока кода до тех пор, пока выполняется определенное условие . В то время как циклы в основном используются в Python, когда количество итераций не может быть определено во время написания кода. Продолжайте читать, чтобы узнать, как работает цикл while в Python.
Contents
- Что такое цикл while в Python?
- Как работает цикл while в Python?
- В чем разница между циклами for и while в Python?
- Будьте осторожны с бесконечными циклами while в Python
- Прерывание и пропуск циклов while в Python
- Как использовать циклы while в Python
- Использование коллекции с циклами while в Python
- Реализация собственной функции range() с циклы while в Python
- Оптимизация модели с использованием цикла while Python
- Установление соединений с циклом while и реализация try-except
- Перебор рекурсивных структур с помощью цикла while Python
- Запуск цикла while Python на игровой доске
Что такое цикл while в Python?
Цикл Python Python — это управляющая структура. Управляющие структуры определяют, какой путь кода будет выполняться во время выполнения. Как правило, циклы используются для многократного выполнения блока кода . Вот обзор наиболее важных структур управления в Python:
Начинающие программисты часто пытаются имитировать функциональность циклов, не зная, как они работают . Вместо того, чтобы определять структуру данных с несколькими элементами и обрабатывать ее в цикле, они определяют отдельную переменную для каждого набора данных. Они также дублируют код обработки наборов данных. Результат — неоптимальный код. Это показано в коде ниже:
person1 = («Энн», 17 лет) person2 = («Мария», 42 года) person3 = («Кейт», 63 года) print(f"{person1[0]}, {person1[1]} лет") print(f"{person2[0]}, {person2[1]} лет") print(f"{person3[0]}, {person3[1]} лет")
В дополнение к дублирующемуся коду у этого подхода также есть логистическая проблема: если количество наборов данных не может быть определено до времени выполнения , отдельные переменные не могут быть определены заранее. Здесь на помощь приходят циклы и наборы элементов.
Если известно, сколько повторений потребуется во время выполнения, цикл for в Python будет лучшим вариантом. Например, мы можем переформулировать приведенный выше код, используя цикл for. Тогда он будет работать без дублирующего кода и будет использовать только две переменные, независимо от количества задействованных наборов данных.
человек = ("Джим", "Джек", "Джон") возраст = (17, 42, 63) для человека, возраст в почтовом индексе (люди, возраст): print(f"{person}, {age} years")
С другой стороны, вы захотите использовать цикл while в Python, если вы не знаете заранее, сколько раз коду потребуется повторить . Например, вы хотите написать код для обмена сообщениями по открытому соединению. Пока соединение установлено, сообщения будут обрабатываться. Оператор Python if в теле цикла будет оценивать сигналы и потенциально разрывать соединение, если оно требуется:
в то время как connection_open(): print('Готов к приему') process_messages() если should_close_connection(): close_connection() # после завершения цикла print('Соединение было закрыто')
Циклы while Python также используются для неограниченных итераций . Некоторыми хорошо известными примерами являются банкоматы, командная строка Linux и цикл Python Read-Eval-Print (REPL). Ниже мы показываем набросок реализации REPL с использованием бесконечного цикла while.
# Петля пока верно: # Чтение пользовательского ввода user_input = read_input() # Оценить ввод и получить результат результат = оценка (user_input) # Распечатать результат печать(результат)
Как работает цикл while в Python?
Цикл while в Python работает так же, как операторы if в Python. Обе эти управляющие структуры состоят из двух частей:
- Состояние, которое будет оцениваться
- Тело с инструкциями
Разница между ними сколько раз выполняется тело . Тело оператора if выполняется один раз, максимум:
if условие: run_once()
Напротив, тело цикла while может выполняться несколько раз :
условие while: run_again()
Цикл while Python будет выполняться следующим образом:
- Условие оценивается.
- Если условие истинно, выполняется тело цикла.
- Условие оценивается снова.
- Если условие по-прежнему верно, процесс повторяется.
- Если условие ложно, цикл завершается.
Подобно операторам if, цикл while в Python также может включать блок else. Блок else является необязательным и будет выполняться один раз, если условие ложно (или становится ложным).
при Ложном: # этот код не зацикливается never_runs() еще: # вместо этого этот код запускается один раз run_once()
В чем разница между циклами for и while в Python?
Цикл while Python связан с циклом for. Оба они используются для многократного выполнения блока кода . (Это также называется «итерацией».) Разница в том, сколько раз выполняется код.
В Python циклы for в основном используются для перебора элементов в коллекции . Максимальное количество итераций ограничено длиной коллекции. Ниже мы перебираем буквы в слове «Python» и выводим каждую букву:
для буквы в «Python»: print(letter)
Цикл while Python основан не только на переборе коллекций. Он имеет ряд гибких применений. Цикл while является более простой конструкцией цикла . В то время как цикл for может быть построен с использованием цикла while, цикл while не может быть построен с использованием цикла for.
Давайте рассмотрим несколько примеров. Ниже мы будем использовать цикл while для воссоздания функциональности типичного цикла for с числовой переменной цикла . Для этого мы определим переменную-счетчик вне цикла и увеличим ее значение внутри цикла.
счетчик = 0 предел = 10 в то время как счетчик < предел: печать (счетчик) counter += 1
Эквивалент цикла for короче и точнее:
для счетчика в диапазоне (10): print(counter)
Теперь используйте цикл while для перебора букв в слове . Результаты будут аналогичны приведенному выше примеру. Мы будем использовать итератор и функцию next() . Если итератор исчерпан, вместо буквы будет возвращено None , и цикл будет прерван. Полученный код намного сложнее, чем аналогичный цикл for. Цикл while явно не лучшее решение этой проблемы:
word = 'Python' буквы = итер (слово) буква = '' пока буква не None: буква = следующая (буквы, нет) если письмо: печать(письмо)
Будьте осторожны с бесконечными циклами while в Python
Циклы while в Python особенно интересны, поскольку их можно использовать для реализации бесконечных циклов . На первый взгляд это может показаться нелогичным, поскольку программисты боятся случайных бесконечных циклов. Это потому, что условие никогда не становится ложным, поэтому программа застревает:
, в то время как True: print("Forever...")
Случайные бесконечные циклы обычно являются результатом выражения, которое всегда оценивается как True. Например:
пока 1 == 1 + 1 - 1: print("И когда-нибудь...")
Однако существует способов использования намеренно созданных бесконечных циклов .
Прерывание и пропуск циклов while в Python
Цикл while обычно повторяется до тех пор, пока условие цикла не станет ложным . Обычный, но проблематичный прием — использование флаговой переменной в качестве условия. Это включает в себя определение логической переменной вне цикла и ее оценку в условии цикла. Когда в теле цикла достигнуто определенное условие, мы меняем флаговую переменную. Когда условие оценивается на следующей итерации, новое значение приведет к завершению цикла.
прервано = Ложь пока не прервано: print("Все еще идет...") если некое_условие: # предотвратит следующую итерацию aborted = True
Это решение часто используется , но не особенно элегантно . Что происходит, когда в теле цикла появляется больше кода после изменения переменной флага? Код нужно пропустить. К счастью, в Python есть инструкция break для циклов while.
Если оператор break выполняется внутри цикла, цикл будет немедленно прерван. Возможно, вы видите сходство между операторами break в циклах и операторами return в функциях . Однако одно отличие состоит в том, что операторы break не возвращают значения. Обычной практикой является использование оператора break для завершения бесконечного цикла.
пока верно: print("Все еще идет...") если некое_условие: сломать # мы никогда не доберемся сюда print("Нас здесь быть не должно") # мы оказываемся здесь после разрыва print("Done.")
Близким родственником операторов break являются операторы continue . Если в теле цикла выполняется оператор continue, код , следующий за ним, будет пропущен . Выполнение продолжится со следующей итерации. Операторы break и continue можно использовать для реализации простых текстовых меню, как в ранних компьютерных играх:
# «continue» приводит нас сюда. пока верно: print("Нажмите G, чтобы начать новую игру") print("Нажмите S, чтобы увидеть статистику") print("Нажмите M для входа в главное меню") print("Нажмите Q, чтобы выйти") key_press = input("На ваш выбор\n")[0].upper() print(f"Вы нажали {key_press}") если key_press == "G": # запускаем игровые процедуры print("Начало игры...") Элиф key_press == "С": # показать статистику print("Показ статистики...") Элиф key_press == "М": # вернуться в главное меню print("Возвращение в меню") Продолжить Элиф key_press == "Q": # выйти из цикла печать("Выход") сломать еще: print("Неизвестная команда. Попробуйте еще раз") # «перерыв» приводит нас сюда ...
Как использовать циклы while в Python
Существует различных вариантов использования циклов while в Python . Циклы while обычно используются для алгоритмов, в которых количество итераций не может быть определено заранее или где это число изменяется во время выполнения. Циклы While часто используются в сочетании с другими структурами управления, такими как операторы принятия решений и операторы try-else. Давайте рассмотрим несколько примеров.
Использование коллекции с циклами while в Python
Циклы for — хороший вариант для перебора элементов в коллекции в Python. По крайней мере, так происходит до тех пор, пока коллекция не изменяется в теле цикла. Но что произойдет, если мы будем вносить изменения по мере прохождения элементов? Представьте, что мы хотим удалить элементы из коллекции во время итерации. Это называется «потреблением» коллекции.
Странные ошибки могут возникать, когда базовая коллекция в цикле for изменяется во время итерации. Если мы хотим использовать коллекцию, цикл while — лучший выбор в Python. мы будем сделать сбор условием цикла while . Пока коллекция все еще содержит элементы, она будет оцениваться как True в логическом контексте. Если коллекция пуста, она оценивается как False, и цикл завершается.
штук = ['х', 'о', 'о', 'о', 'х', 'о', 'х', 'х'] пока куски: кусок = штук.поп() print(f"Удалено {кусок}") # контрольная работа assert piece == []
Реализация собственной функции range() с помощью циклов while в Python
Циклы While также можно использовать для реализации генераторов в Python. Генератор — это функция, которая использует оператор yield и генерирует значения по команде. Ниже мы создадим наш собственная реализация функции range() . Мы будем использовать оператор yield в цикле while для генерации непрерывных чисел. Когда мы достигнем оператора yield, будет возвращено значение, и цикл приостановится.
по определению мой_диапазон (старт, стоп): # реализованы только положительные диапазоны если стоп <= старт: возврат Нет текущий = начало в то время как текущий < стоп: выходной ток # следующий вызов next() продолжается здесь текущий += 1 # контрольная работа утвердить список (мой_диапазон (7, 9)) == list(range(7, 9))
Оптимизация модели с помощью цикла while Python
Оптимизация моделей является частью стандартной практики в академических дисциплинах. Он включает в себя расчет модели на основе набора параметров. После этого параметры корректируются, и модель рассчитывается снова. Целевая функция используется для оценки того, привело ли изменение параметров к лучшей модели. Если это так, процесс повторяется. Вот как можно использовать итерацию для поиска оптимальных параметров модели.
Обычно модель выравнивается после нескольких итераций, что означает, что улучшение между моделями будет становиться все меньше и меньше. Если улучшение упадет ниже определенного значения, мы прекратим оптимизацию. Чтобы гарантировать завершение цикла, мы установим ограничение на максимальное количество итераций. Ниже показан этот подход к оптимизации моделей с использованием цикла while в Python.
предел = 5 раунд = 0 прогресс = Истина в то время как прогресс и раунд < предел: # попытка следующей оптимизации раунд += 1 # вычислить оптимизированные параметры параметры = оптимизировать (параметры) # делаем копию старой модели старая_модель = модель # вычислить новую модель, используя оптимизированные параметры модель = запустить (модель, параметры) # стоит продолжать оптимизацию? прогресс = has_improved (модель, старая_модель)
Установление соединений с помощью цикла while и реализация try-except
Установление соединения не всегда работает с первой попытки, поэтому часто используются множественные попытки. Поскольку мы не можем знать заранее, сколько попыток потребуется , мы будем использовать цикл while. Мы установим ограничение на максимальное количество попыток и прервемся с сообщением об ошибке, если ни одна из попыток не увенчалась успехом.
Вот подход, который мы будем использовать в Python. Мы используем Оператор try-except для обнаружения ошибок при установлении соединения . Использование оператора break в блоке try и оператора continue в блоке exclude гарантирует правильность итерации. Если соединение не установлено, мы попробуем еще раз с continue. Если соединение установлено, завершаем цикл с помощью break .
макс_попыток = 10 попытка = 0 соединение = Нет # «продолжить» приводит нас сюда в то время как попытка < max_tries: попытка += 1 print("Попытка установить соединение") пытаться: # может вызвать 'ConnectionException' конн = get_connection () # получили наше соединение сломать # "get_connection()" вызвало 'ConnectionException' кроме ConnectionException: print("Что-то пошло не так. Повторяем попытку") Продолжить # прошли неудачные попытки подключения 'max_tries' еще: утверждать, что соединение отсутствует print("Не удалось подключиться") # 'break' приводит нас сюда утверждать, что соединение не None print("Соединение установлено")
Перебор рекурсивных структур с помощью цикла while Python
Цикл while в Python хорошо подходит для решения рекурсивных задач . Это означает, что это хороший вариант для перебора:
- Вложенные списки
- Древовидные структуры
- Графики
Давайте посмотрим, как это работает, на примере русских матрешек . Игрушка состоит из деревянных кукол, которые вкладываются друг в друга. Со стороны невозможно узнать, сколько кукол внутри, поэтому мы будем использовать итеративный подход. Откроем первую куклу и посмотрим, что мы найдем внутри. Если есть другая кукла, мы повторяем процесс. Это типичный пример использования циклов while.
Мы можем смоделировать кукол как встроенные списки, каждый из которых содержит один элемент . Списки будут либо содержать другой список, либо объект, который не является списком. Мы будем писать о кукле, пока это список. В теле цикла мы будем использовать присваивание, чтобы перейти на один уровень глубже. В какой-то момент мы найдем элемент, который не является списком. В этот момент итерация завершится.
деф open_doll(кукла): """ * Куклы-куклы, сложенные на пять уровней в глубину, с надписью «Нет» внутри: 'кукла = [[[[[Нет]]]]]' """ в то время как тип (кукла) список: print("Открываем следующую куклу") # перейти на один уровень глубже кукла = кукла.поп() еще: print(f"Достиг дна и нашел {куклу}") вернуть куклу # контрольная работа кукла = [[[[[Нет]]]]] утверждать, что open_doll (кукла) - None
Этот простой подход работает независимо от того, насколько глубоко кукла засела. Наш алгоритм докопается до дна и обнаружит встроенный объект. В этом заключается магия Python-циклов while в действии.
Запуск цикла Python while на игровой доске
Еще одно частое использование циклов while Python — движущихся фигурки в настольных играх . Если вы хотите покрыть все поля, вам понадобятся две петли, встроенные друг в друга. Но обязательно обратите внимание на время выполнения. При определенных обстоятельствах программа может работать очень долго.
Мы реализуем простое «случайное блуждание», при котором персонаж перемещается случайным образом, пока не достигнет пункта назначения. Этот тип движения подобен движению частицы в жидкости или мухе, летающей по комнате. Поскольку заранее неизвестно, сколько потребуется итераций , это работа для цикла while.
Сначала мы определим функцию random_walk() , которая будет содержать цикл while. С оператором Python для «равно» мы проверим, является ли текущее местоположение персонажа его пунктом назначения. Если нет, то повторяем снова.
def random_walk (доска = (10, 10), цель = (4, 4), начало = (0, 0)): # убедиться, что аргументы допустимы если нет (цель[0] в диапазоне(доска[0]) и цель[1] в диапазоне(доска[1]) и начало[0] в диапазоне(доска[0]) и начало[1] в диапазоне(доска [1])): print(f"Цель {цель} и/или начальная позиция {начало} за пределами доски с размерами {доска}") возврат Нет, 0 шаги = 0 поз = начало # пока мы не достигли цели пока не pos == цель: # перейти на соседнюю позицию pos = get_neighbor(pos, доска) шаги += 1 print(f"Перемещено на позицию {pos}") print(f"Достигнута цель в {pos} после {steps} шагов") возврат поз. , шаги
Мы также определим вспомогательную функцию get_neighbor() , которая будет возвращать поле в определенном месте.
по определению get_neighbor (позиция, границы): из случайного выбора импорта """ х = 0 . . . м - - - - - - - - у = 0 | | . | (х, у-1) . | (х-1, у) (х, у) (х+1, у) . | (х, у+1) | н | """ х, у = поз. # компьютерные соседи соседи = [(x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)] # отфильтровать соседей, которые находятся за пределами границ соседи = [ pos для pos в соседях, если 0 <= pos[0]Учебники2 и Until LoopНаконец, мы проверим нашу реализацию случайного блуждания.
random_walk(доска = (10, 10), цель = (4, 4), начало = (5, 7))
- Веб-разработка
- Loop
FutureLearn использует куки-файлы для повышения удобства использования веб-сайта. Все файлы cookie, кроме строго необходимых, в настоящее время отключены для этого браузера. Включите JavaScript, чтобы применить настройки файлов cookie для всех необязательных файлов cookie. Вы можете ознакомиться с политикой FutureLearn в отношении файлов cookie здесь.
Пока цикл; До цикла
© Wellcome Genome Campus Advanced Courses and Scientific Conferences
Циклы for и while очень похожи. Как правило, мы используем циклы for, когда точно знаем, сколько итераций нам нужно, т. е. у них есть определенная начальная и конечная точка. С другой стороны, циклы while используются там, где мы не знаем ограничений на такие задачи, как чтение файла или запрос ввода данных пользователем. Они просто продолжают повторяться до тех пор, пока выполняется заданное условие.
Базовый синтаксис цикла while выглядит следующим образом:
while [условие]
do
# Команды для выполнения
done
Во-первых, давайте посмотрим, как не делать цикл while:
i=1
while [[ $i -eq 1 ]]
do
echo "hi"
done
Это то, что известно как бесконечный цикл , потому что условие всегда будет возвращать true - т. е. ничего не меняется . В этом примере «привет» будет просто выводиться на терминал до тех пор, пока мы не остановим его с помощью Ctrl+C на клавиатуре.
Итак, вот как неправильно использовать циклы while. Но как они выглядят при правильном использовании:
i=1
while [[ $i -le 3 ]]
do
echo "$i"
(( i++ ))
done
Здесь мы устанавливаем для нашей переменной начальное значение из 1. Когда цикл начинается, наша переменная равна 1 (т.е. меньше 3), поэтому условие возвращает true. Это означает, что мы собираемся выполнить тело кода, возвращая значение нашей переменной 1 на терминал. Затем мы увеличиваем значение нашей переменной с 1 до 2, используя нотацию ++. Это продолжается, пока наша переменная имеет значение меньше или равное 3.
Результат:
Другое распространенное использование циклов while — чтение содержимого файла. Вот пример:
while read data
do
echo "${data}"
done < infile. txt
Это так называемый цикл while . Что мы подразумеваем под этим? В этом примере цикл while будет выполнять итерацию только до тех пор, пока есть строки, которые нужно прочитать из заданного входного файла. Здесь infile.txt — это имя файла, который мы собираемся перебирать. Команда чтения будет обрабатывать файл, строка за строкой, в переменную данных. Как только он достигнет конца файла, цикл while будет завершен.
До цикла
Мы только что рассмотрели пример цикла while . Теперь мы рассмотрим цикла выполнения до циклов. Основное отличие заключается в том, что циклы while предназначены для работы, пока выполняется условие, а затем завершаются, когда это условие возвращает false. С другой стороны, циклы с по предназначены для работы, пока условие возвращает false, и завершаются только тогда, когда условие возвращает true.
Структура цикла until почти идентична циклу while:
until [условие]
do
# Команды для выполнения
done
Например, этот цикл будет выполняться до тех пор, пока переменная не станет больше 3:
i=1
до [[ $i -gt 3 ]]
do
echo $i
((i++))
done
Это выведет:
© Продвинутые курсы и научные конференции Wellcome Genome Campus
Эта статья взята из бесплатного онлайн-ресурса