Интерактивный учебник языка Python
Занятие 6. Цикл while
1. Цикл while
Цикл while
(“пока”) позволяет выполнить
одну и ту же последовательность действий, пока проверяемое условие истинно.
Условие записывается до тела цикла и проверяется до выполнения тела цикла.
Как правило, цикл while
используется, когда невозможно
определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while
в простейшем случае выглядит так:
while условие: блок инструкций
При выполнении цикла while
сначала проверяется условие.
Если оно ложно, то выполнение цикла прекращается и управление
передается на следующую инструкцию после тела цикла while
.
Если условие истинно, то выполняется инструкция, после чего условие
проверяется снова и снова выполняется инструкция.
Так продолжается до тех пор, пока условие будет истинно.
Как только условие станет ложно, работа цикла завершится и
управление передастся следующей инструкции после цикла.
Например, следующий фрагмент программы напечатает на экран
квадраты всех целых чисел от 1 до 10. Видно, что цикл while
может заменять цикл for ... in range(...)
:
i = 1 while i <= 10: print(i ** 2) i += 1
В этом примере переменная i
внутри цикла изменяется от 1 до 10.
Такая переменная, значение которой меняется с каждым новым проходом цикла,
называется счетчиком. Заметим, что после выполнения этого фрагмента
значение переменной i
будет равно 11
,
поскольку именно при i == 11
условие i <= 10
впервые
перестанет выполняться.
Вот еще один пример использования цикла
для определения количества цифр натурального числа n
:
n = int(input()) length = 0 while n > 0: n //= 10 # это эквивалентно n = n // 10 length += 1 print(length)
В этом цикле мы отбрасываем по одной цифре числа, начиная с конца,
что эквивалентно целочисленному делению на 10 (n //= 10
),
при этом считаем в переменной length
, сколько раз это было сделано.
В языке Питон есть и другой способ решения этой задачи: length = len(str(i))
.
2. Инструкции управления циклом
После тела цикла можно написать слово
и после него блок операций, который будет
выполнен один раз после окончания цикла, когда проверяемое
условие станет неверно:
i = 1 while i <= 10: print(i) i += 1 else: print('Цикл окончен, i =', i)
Казалось бы, никакого смысла в этом нет, ведь эту же инструкцию можно
просто написать после окончания цикла. Смысл появляется только
вместе с инструкцией break
. Если во время выполнения Питон встречает
инструкцию break
внутри цикла, то он сразу же прекращает выполнение этого цикла и выходит из него.
При этом ветка else
исполняться не будет. Разумеется, инструкцию
осмыленно
вызывать только внутри инструкции if
, то есть она должна выполняться
только при выполнении какого-то особенного условия.
Приведем пример программы, которая считывает числа до тех пор, пока не встретит отрицательное число. При появлении отрицательного числа программа завершается. В первом варианте последовательность чисел завершается числом 0 (при считывании которого надо остановиться).
a = int(input()) while a != 0: if a < 0: print('Встретилось отрицательное число', a) break a = int(input()) else: print('Ни одного отрицательного числа не встретилось')
Во втором варианте программы сначала на вход подается количество элементов последовательности, а затем
и сами элементы. В таком случае удобно воспользоваться циклом for
. Цикл for
также может иметь ветку else
и содержать инструкции break
внутри себя.
n = int(input()) for i in range(n): a = int(input()) if a < 0: print('Встретилось отрицательное число', a) break else: print('Ни одного отрицательного числа не встретилось')
Другая инструкция управления циклом — continue
(продолжение цикла).
Если инструкции break
и continue
содержатся внутри нескольких вложенных
циклов, то они влияют лишь на исполнение самого внутреннего цикла. Вот не самый интеллектуальный пример,
который это демонстрирует:
for i in range(3): for j in range(5): if j > i: break print(i, j)
Увлечение инструкциями break
и continue
не поощряется, если можно обойтись без их использования. Вот типичный пример
break
(данный код считает количество знаков в числе).n = int(input()) length = 0 while True: length += 1 n //= 10 if n == 0: break print('Длина числа равна', length)
Гораздо лучше переписать этот цикл так:
n = int(input()) length = 0 while n != 0: length += 1 n //= 10 print('Длина числа равна', length)
Впрочем, на Питоне можно предложить и более изящное решение:
n = int(input()) print('Длина числа равна', len(str(n)))
3.
a, b = 0, 1Этот код можно записать и так:
a = 0 b = 1Отличие двух способов состоит в том, что множественное присваивание в первом способе меняет значение двух переменных одновременно.
Если слева от знака «=» в множественном присваивании должны стоять через запятую имена переменных, то справа могут стоять произвольные выражения, разделённые запятыми. Главное, чтобы слева и справа от знака присваивания было одинаковое число элементов.
Множественное присваивание удобно использовать, когда нужно обменять значения двух переменных. В обычных языках программирования без использования специальных функций это делается так:
a = 1 b = 2 tmp = a a = b b = tmp print(a, b) # 2 1
В Питоне то же действие записывается в одну строчку:
a = 1 b = 2 a, b = b, a print(a, b) # 2 1
Ссылки на задачи доступны в меню слева. Эталонные решения теперь доступны на странице самой задачи.
Телеграм-канал создателя Питонтьютора 🌈
Интерактивный учебник языка Python
Занятие 6. Цикл while
Задача «Числа Фибоначчи»
Условие
Последовательность Фибоначчи определяется так:
φ0 = 0, φ1 = 1, φn = φn−1 + φn−2.
По данному числу n определите n-е число Фибоначчи φn.
Эту задачу можно решать и циклом for
.
Во всех задачах считывайте входные данные через input()
и выводите ответ через print()
.
Войти или зарегистрироваться, чтобы отправлять решения на проверку
ТестыВходные данные | Правильный ответ | Что вывела программа | Результат | |
---|---|---|---|---|
6 | 8 | |||
0 | 0 | |||
2 | 1 | |||
3 | 2 | |||
4 | 3 | |||
1 | 1 | |||
5 | 5 | |||
7 | 13 | |||
8 | 21 | |||
9 | 34 | |||
10 | 55 | |||
11 | 89 | |||
12 | 144 | |||
13 | 233 | |||
14 | 377 | |||
15 | 610 | |||
16 | 987 | |||
17 | 1597 | |||
18 | 2584 | |||
19 | 4181 | |||
20 | 6765 |
Телеграм-канал создателя Питонтьютора 🌈
Кейси Масгрейвс клянется разорвать порочный круг «отвратительных» событий, вызванных расизмом
Кейси Масгрейвс поделилась, что она «возмущена» и «грустна» после смерти Джорджа Флойда.
Прочтите ее заявление о расизме и системных привилегиях.Автор Джесс Коэн
В понедельник суперзвезда кантри-музыки в Твиттере высказался после смерти 9 человек.0011 Джордж Флойд . В своем обращении к фанатам 31-летняя девушка пообещала разорвать порочный круг, вызванный расизмом и «системными привилегиями».
«Было трудно подобрать слова, чтобы адекватно передать, насколько я возмущен и опечален. БЕЛЫЕ ЛЮДИ С НАЧАЛА БЫЛИ ЭТО ТАК НЕПРАВИЛЬНО, и я сделаю все, что в моих силах, я помогу сломать ОТВРАТИТЕЛЬНЫЙ, разрушительный циклический расизм и системные привилегии», — написала Масгрейвс в своем сообщении в понедельник. «Я не буду сторонним наблюдателем».
Масгрейвс также поделилась списком того, как ее поклонники могут помочь в борьбе, включая подписание петиций и пожертвования.
Делясь этим заявлением, Масгрейвс присоединяется к растущему списку звезд, говорящих о смерти Флойда. Его убийство от рук полиции Миннесоты вызвало призывы к правосудию и спровоцировало серию протестов по всему миру.
фото
Знаменитости высказались в ответ на смерть Джорджа Флойда
В понедельник утром брат Джорджа Терренс Флойд рассказал о смерти своего брата и сестры и поделился своим призывом к переменам.
«Это было просто опустошительно, я чувствую, что все еще немного оцепенел от этого», — сказал Терренс о смерти своего брата в интервью ABC News с Робин Робертс .
«Когда вы разговаривали с ним, он всегда хотел мотивировать вас, независимо от того, через что вы проходили», — сказал Терренс Робертсу, добавив, что его брат всегда видел «светлую сторону» вещей.
Трудно подобрать слова, чтобы адекватно передать, насколько я возмущен и опечален. У БЕЛЫХ ЛЮДЕЙ ЭТО ТАК НЕПРАВИЛЬНО С НАЧАЛА, и я сделаю все, что в моих силах, чтобы помочь сломать ОТВРАТИТЕЛЬНЫЙ, разрушительный циклический расизм и причины системных привилегий. Я не буду сторонним наблюдателем.
— K A C E Y (@KaceyMusgraves) 1 июня 2020 г.
Райан Дорси рассказывает, что сын Джози знает о покойной маме Найе Ривере
Самые большие изменения У него и Коко Остин будет еще один ребенок
Терренс продолжал обсуждать «деструктивное единство», которое имеет место в некоторых протестах, призывая к «позитивным» изменениям.
«Я чувствую, что это затмевает то, что происходит, потому что, как я уже сказал, [Джордж] был за мир, он был за единство… то, что происходит сейчас, они могут называть это единством, но это разрушительное единство», — сказал Терренс. . «Это не то, чем он занимался. Это не то, чем занимался мой брат».
«Злиться — это нормально, но направьте свой гнев на что-то позитивное или на изменение другого пути, потому что мы уже прошли этот путь», — добавил Терренс. «Гнев… нанесение ущерба твоему родному городу — это не то, чего он хотел бы».
«E! солидарна с чернокожим сообществом против системного расизма и угнетения, с которыми каждый день сталкивается Америка», — говорится в заявлении сети от 31 мая. «Мы в долгу перед нашим чернокожим персоналом, талантами, производственными партнерами и зрителями. требовать перемен и ответственности. Молчать — значит быть соучастником. #BlackLivesMatter».
Райан Дорси рассказывает, что сын Джози знает о покойной маме Найе Ривере
Самые большие перемены
Дейзи Джонс и шестеро Ice-T рассказывает, будет ли у него и Коко Остин еще один ребенокВот что произошло во время
Правила Вандерпамп Воссоединение 10-го сезонаМерзкое проявление · Hour of Devastation (HOU) #80 · Scryfall Magic: The Gathering Search
Существо — Ужас
Мерзкое воплощение получает +1/+0 за каждую карту с циклом на вашем кладбище.
Велоспорт {2} ( {2} , сбросьте эту карту: возьмите карту.)
Символы корчились и искривлялись, извергая темную, мстительную магию.
0/4
Проиллюстрировано Джейсон Феликс
- Стандарт
- Незаконно
- Алхимия
- Незаконно
- Пионер
- Юрисконсульт
- Проводник
- Юридический
- Современный
- Юридический
- Драка
- Незаконно
- Наследие
- Юридический
- Исторический
- Юридический
- Винтаж
- Юридический
- Нищий
- Незаконно
- Командир
- Юридический
- Пенни
- Незаконно
- Клятвопреступник
- Юридический
ru эс фр де это пт да ко RU 汉语 漢語 ⋮
Отпечатки | долларов США | евро | ТИКС |
---|---|---|---|
Амонхет обновленный | |||
Час Разрушения | 0,11 доллара США | 0,05 € | 0,03 |
Посмотреть все принты → |
Набор инструментов
Купить эту карту
Изображения и данные
Примечания и правила Информация для Мерзкое проявление:
- Первая способность Vile Manifestation учитывает только карты с циклическими способностями на вашем кладбище.