Интерактивный учебник языка 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 впервые перестанет выполняться.

Вот еще один пример использования цикла

while для определения количества цифр натурального числа 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. Инструкции управления циклом

После тела цикла можно написать слово

else: и после него блок операций, который будет выполнен один раз после окончания цикла, когда проверяемое условие станет неверно:

i = 1
while i <= 10:
    print(i)
    i += 1
else:
    print('Цикл окончен, i =', i)

Казалось бы, никакого смысла в этом нет, ведь эту же инструкцию можно просто написать после окончания цикла. Смысл появляется только вместе с инструкцией break. Если во время выполнения Питон встречает инструкцию break внутри цикла, то он сразу же прекращает выполнение этого цикла и выходит из него. При этом ветка else исполняться не будет. Разумеется, инструкцию

break осмыленно вызывать только внутри инструкции 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 учитывает только карты с циклическими способностями на вашем кладбище.