Циклы while и for
Инструкция while, обеспечивает способ организации универсальных циклов;
Инструкция for, предназначена для обхода элементов в последовательностях и выполнения
блока программного кода для каждого из них.
В языке Python существуют и другие способы организации циклов, но инструкции while и for, которые описываются здесь, являются основными синтаксическими элементами, предоставляющими возможность программирования повторяющихся действий.
Циклы while:
Инструкция while является самой универсальной конструкцией организации итераций в языке Python. Проще говоря, она продолжает выполнять блок инструкций (обычно с отступами) до тех пор, пока условное выражение продолжает возвращать истину.
Общий формат:
while <test>: # Условное выражение test
<statements1> # Тело цикла
else: # Необязательная часть else
<statements2> # Выполняется, если выход из цикла
# производится не
# инструкцией break
Пример:
>>> while True:
... print(‘Type Ctrl-C to stop me!’)
Пока условие возвращает истину на экран будет выводится "Type Ctrl-C to stop me!", если нажать Ctrl-C тогда мы прекратим выполнение цикла, тем самым задав ему ложное значение False.
-----------------------------------------------------------------
>>> x = ‘spam’
>>> while x: # Пока x не пустая строка
... print(x, end=’ ‘)
... x = x[1:] # Вырезать первый символ из x
...
spam pam am m
Aргумент end=’ ‘ , который обеспечивает вывод значений в одну строку через пробел.
-----------------------------------------------------------------
>>> a=0; b=10
>>> while a < b: # Один из способов организации циклов
# перечисления
... print(a, end=’ ‘)
... a += 1 # Или, a = a + 1
0 1 2 3 4 5 6 7 8 9
-----------------------------------------------------------------
В языке Python отсутствует цикл «do until», его можно имитировать, добавив в конец тела цикла условную инструкцию и инструкцию break:
while True:
...тело цикла...
if exitTest(): break
-----------------------------------------------------------------
break, continue, pass и else
break - Производит переход за пределы объемлющего цикла (всей инструкции цикла).
continue - Производит переход в начало цикла (в строку заголовка).
pass - Ничего не делает: это пустая инструкция, используемая как заполнитель.
Блок else - Выполняется, только если цикл завершился обычным образом (без
использования инструкции break).
С учетом инструкций break и continue цикл while:
while <test1>:
<statements1>
if <test2>: break # Выйти из цикла, пропустив часть else
if <test3>: continue # Перейти в начало цикла, к выражению
# test1
else:
<statements2> # Выполняется, если не была использована
# инструкция ‘break’
-----------------------------------------------------------------
pass:
Инструкция pass не выполняет никаких действий и используется в случаях, когда синтаксис языка требует наличия инструкции, но никаких полезных действий в этой точке программы выполнить нельзя.
Бесконечный цикл, который ничего не делает:
while 1: pass
-----------------------------------------------------------------
continue:
Инструкция continue вызывает немедленный переход в начало цикла. Она иногда позволяет избежать использования вложенных инструкций.
Пример, обход нечетных чисел:
x = 10
while x:
x = x-1 # Или, x -= 1
if x % 2 != 0: continue # Нечетное? – пропустить вывод
print(x, end=’ ‘)
-----------------------------------------------------------------
break:
Инструкция break вызывает немедленный выход из цикла.
Ввод данных с помощью функции input (raw_input в Python 2.6) и производится
выход из цикла, если в ответ на запрос имени будет введена строка «stop»:
>>> while 1:
... name = input(‘Enter name:’)
... if name == ‘stop’: break
... age = input(‘Enter age: ‘)
... print(‘Hello’, name, ‘=>’, int(age) ** 2)
...
Enter name:mel
Enter age: 40
Hello mel => 1600
Enter name:bob
Enter age: 30
Hello bob => 900
Enter name:stop
-----------------------------------------------------------------
else:
При объединении с частью else инструкция break часто позволяет избавиться от необходимости сохранять флаг состояния поиска, как это делается в других языках программирования.
Следующий пример выявляет является ли положительное целое число y простым числом, выполняя поиск делителей больше 1:
x = y // 2 # Для значений y > 1
while x > 1:
if y % x == 0: # Остаток
print(y, ‘has factor’, x)
break # Перешагнуть блок else
x -= 1
else: # Нормальное завершение цикла
print(y, ‘is prime’)
-----------------------------------------------------------------
else в цикле:
Блок else в циклах обеспечивает явный синтаксис представления распространенной ситуации.
Поиск значения в цикле, если найден - выводим
found = False
while x and not found:
if match(x[0]): # Искомое значение является первым?
Print(‘Ni’)
found = True
else:
x = x[1:] # Вырезать первое значение и повторить
if not found:
print(‘not found’)
-----------------------------------------------------------------
Циклы for:
Цикл for является универсальным итератором последовательностей в языке Python: он может выполнять обход элементов в любых упорядоченных объектах последовательностей. Инструкция for способна работать со строками, списками, кортежами, с другими встроенными объектами, поддерживающими возможность выполнения итераций, и с новыми объектами, которые создаются с помощью классов, как будет показано позже.
Общий формат:
for <target> in <object>: # Связывает элементы объекта с
# переменной цикла
<statements> # Повторяющееся тело цикла: использует
# переменную цикла
else:
<statements> # Если не попали на инструкцию ‘break’
Интерпретатор выполняет цикл for, он поочередно, один за другим, присваивает элементы объекта последовательности переменной цикла и выполняет тело цикла для каждого из них.
Для обращения к текущему элементу последовательности в теле цикла обычно используется переменная цикла, как если бы это был курсор, шагающий от элемента к элементу.
Полная форма цикла for имеет следующий вид:
for <target> in <object>: # Присваивает элементы объекта с
# переменной цикла
<statements>
if <test>: break # Выход из цикла, минуя блок else
if <test>: continue # Переход в начало цикла
else:
<statements> # Если не была вызвана инструкция ‘break’
-----------------------------------------------------------------
>>> for x in [“spam”, “eggs”, “ham”]:
... print(x, end=’ ‘)
...
spam eggs ham
-----------------------------------------------------------------
В следующих двух примерах вычисляется сумма и произведение всех элементов в списке.
1й -пример
>>> sum = 0
>>> for x in [1, 2, 3, 4]:
... sum = sum + x
...
>>> sum
10
2й -пример
>>> prod = 1
>>> for item in [1, 2, 3, 4]: prod *= item
...
>>> prod
24
-----------------------------------------------------------------
Цикл for может применяться к строкам и кортежам:
>>> S = “lumberjack”
>>> T = (“and”, “I’m”, “okay”)
>>> for x in S: print(x, end=’ ‘) # Обход строки
...
l u m b e r j a c k
>>> for x in T: print(x, end=’ ‘) # Обход элементов кортежа
...
and I’m okay
-----------------------------------------------------------------
Присваивание кортежа в цикле for:
>>> T = [(1, 2), (3, 4), (5, 6)]
>>> for (a, b) in T: # Операция присваивания кортежа в
# действии
... print(a, b)
...
1 2
3 4
5 6
Здесь первый проход цикла действует подобно инструкции (a, b) = (1, 2), второй
проход – инструкции (a, b) = (3, 4) и так далее.
-----------------------------------------------------------------
Кортежи в циклах for можно использовать для обхода ключей и значений словарей, применяя метод items, что гораздо удобнее, чем выполнять обход ключей и затем с помощью операции индексирования извлекать значения:
>>> D = {‘a’: 1, ‘b’: 2, ‘c’: 3}
>>> for key in D:
... print(key, ‘=>’, D[key]) # Используется итератор
# словаря
... # и операция индексирования
a => 1
c => 3
b => 2
>>> list(D.items())
[(‘a’, 1), (‘c’, 3), (‘b’, 2)]
>>> for (key, value) in D.items():
... print(key, ‘=>’, value) # Обход ключей и значений
# одновременно
...
a => 1
c => 3
b => 2
-----------------------------------------------------------------
Расширенная операция присваивания последовательностей в циклах for в версии
Python 3.0:
>>> a, b, c = (1, 2, 3) # Присваивание кортежа
>>> a, b, c
(1, 2, 3)
>>> for (a, b, c) in [(1, 2, 3), (4, 5, 6)]: # Используется в
# цикле for
... print(a, b, c)
...
1 2 3
4 5 6
-----------------------------------------------------------------
Вложенные циклы for:
Теперь рассмотрим более сложный вариант цикла for.
Пример иллюстрирует использование блока else и вложенный цикл for.
>>> items = [“aaa”, 111, (4, 5), 2.01] # Множество объектов
>>> tests = [(4, 5), 3.14] # Ключи, которые требуется отыскать
>>>
>>> for key in tests: # Для всех ключей
... for item in items: # Для всех элементов
... if item == key: # Проверить совпадение
... print(key, “was found”)
... break
... else:
... print(key, “not found!”)
...
(4, 5) was found
3.14 not found!
Блок else будет выполняться только в случае, когда поиск завершится неудачей.
Далее пример аналог примера выше (использование in - упрощает конструкцию) :
>>> for key in tests: # Для всех ключей
... if key in items: # Позволить интерпретатору отыскать
# совпадение
... print(key, “was found”)
... else:
... print(key, “not found!”)
...
(4, 5) was found
3.14 not found!
Далее будет пост в котором углубимся в изучении циклов...
Комментариев нет:
Отправить комментарий