While loop - Learn Python 3 - Snakify

Lesson 6
Пока цикл


1. Пока цикл

while цикл повторяет последовательность действий много раз, пока какое-то условие не достигнет False . Условие задается перед телом цикла и проверяется перед каждым исполнением тела цикла. Как правило, в while используется цикл , когда невозможно определить точное число итераций цикла заранее.

Синтаксис в while цикл в простейшем случае выглядит следующим образом :

while some condition:
    a block of statements

Сначала Python проверяет условие. Если это значение False, то цикл завершается и управление передается следующему оператору после в while тело цикла. Если условие истинно, то тело цикла выполняется, а затем условие снова проверяется. Это продолжается, пока условие равно True. Когда условие становится False, цикл завершается и управление передается следующему оператору после цикла.

Например, следующий фрагмент программы печатает квадраты всех целых чисел от 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 является False в первый раз.

Вот другой пример использование в while цикла , чтобы определить количество цифр целого числа n :

n = int(input())
length = 0
while n > 0:
    n //= 10  # это эквивалентно n = n // 10
    length += 1
print(length)  # 4

На каждой итерации мы сокращаем последнюю цифру числа, используя целочисленное деление на 10 ( n //= 10 ). В переменной length мы подсчитываем, сколько раз мы это делали.

В Python есть еще один, более простой способ решить эту проблему: length = len(str(i)) .

Advertising by Google, may be based on your interests

2. Поток управления контуром: else

Можно написать оператор else: после тела цикла, который выполняется один раз после окончания цикла:

i = 1
while i <= 10:
    print(i)
    i += 1
else:
    print('Loop ended, i =', i)

На первый взгляд это утверждение, похоже, не имеет смысла, потому else: тело else: statement можно просто поместить после окончания цикла. «else» после цикла имеет смысл только при использовании в сочетании с break . Если во время выполнения цикла интерпретатор Python обнаруживает break , он немедленно останавливает выполнение цикла и выходит из него. В этом случае ветка else: не выполняется. Таким образом, break используется для прерывания выполнения цикла в середине любой итерации.

Вот пример, похожий на Black Jack: программа, которая считывает числа и суммирует их до тех пор, пока общая сумма не станет больше или равна 21. Входная последовательность заканчивается на 0, чтобы программа могла остановиться, даже если общая сумма всех чисел равна менее 21.

Посмотрим, как он ведет себя на разных входах.

Версия 1. После проверки условия цикл завершается нормально, поэтому выполняется ветка else.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Версия 2. Цикл прерывается break , поэтому ветвь «else» пропускается.

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Филиал «Else» также может использоваться с циклом «for». Давайте рассмотрим пример, когда программа считывает 5 целых чисел, но останавливается вправо, когда выполняется первое отрицательное целое число.

Версия 1. Цикл завершается нормально, поэтому выполняется ветка «else».

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Версия 2. Цикл прерван, поэтому ветка «else» не выполняется.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Advertising by Google, may be based on your interests

3. Поток управления контуром: продолжить

Другая инструкция, используемая для управления выполнением цикла, continue . Если интерпретатор Python встречает по- continue где - то в середине итерации цикла, он пропускает все оставшиеся инструкции и переходит к следующей итерации.

for num in range(2, 10):
    if num % 2 == 0:
        print("Found an even number", num)
        continue
    print("Found a number", num)

Если break и continue помещаются внутри нескольких вложенных циклов, они влияют только на выполнение самого внутреннего. Давайте посмотрим на довольно глупый пример, чтобы продемонстрировать это:

for i in range(3):
    for j in range(5):
        if j > i:
            # ломается только для строки 2
            break
        print(i, j)

Инструкции break и continue , если вы можете реализовать свою идею без их использования. Вот типичный пример плохого использования break : этот код подсчитывает количество цифр в целых числах.

n = int(input())
length = 0
while True:
    length += 1
    n //= 10
    if n == 0:
        break
print('Length is', length)

Это чище и легче читать, чтобы переписать этот цикл со значимым условием цикла:

n = int(input())
length = 0
while n != 0:
    length += 1
    n //= 10
print('Length is', length)
Advertising by Google, may be based on your interests

4. Множественное присвоение

В Python для одного оператора присваивания можно изменить значение нескольких переменных. Посмотрим:

a, b = 0, 1

Эффект, продемонстрированный выше, может быть записан как:

a = 0
b = 1

Разница между двумя версиями заключается в том, что несколько присваиваний одновременно меняют значения двух переменных.

Множественное назначение полезно, когда вам нужно обменивать значения двух переменных. На старых языках программирования без поддержки множественного назначения это можно сделать с помощью вспомогательной переменной:

a = 1
b = 2
tmp = a
a = b
b = tmp
print(a, b)
# 2 1

В Python один и тот же своп можно записать в одну строку:

a = 1
b = 2
a, b = b, a
print(a, b)
# 2 1

Левая часть «=» должна иметь список имен переменных, разделенных запятыми. Правой частью могут быть любые выражения, разделенные запятыми. Левая и правая части должны иметь одинаковую длину.

Advertising by Google, may be based on your interests