Цикл for в языке программирования Python. Урок 12

Основы программирования на Python

В седьмом уроке был рассмотрен цикл while. Однако это не единственный способ организации в языке Python повторения группы выражений. В программах, написанных на Питоне, широко применяется цикл for, который представляет собой цикл обхода заданного множества элементов (символов строки, объектов списка или словаря) и выполнения в своем теле различных операций над ними. Например, если имеется список чисел, и необходимо увеличить значение каждого элемента на две единицы, то можно перебрать список с помощью цикла for, выполнив над каждым его элементом соответствующее действие.

>>> spisok = [0,10,20,30,40,50,60,70,80,90]
>>> i = 0
>>> for element in spisok:
	spisok[i] = element + 2
	i = i + 1
 
>>> spisok
[2, 12, 22, 32, 42, 52, 62, 72, 82, 92]
>>>

В примере переменная i нужна для того, чтобы записать изменившееся значение элемента в список. В ней хранится значение индекса очередного элемента списка. В то время, как переменная element связывается со значением очередного элемента данных. В заголовке цикла for происходит обращение очередному элементу списка. В теле цикла элементу с индексом i присваивается сумма значения текущего (обрабатываемого) элемента и двойки. Далее индекс увеличивается на единицу, а поток выполнения программы переходит снова в заголовок цикла for, где происходит обращение к следующему элементу списка. Когда все элементы обработаны цикл for заканчивает свою работу. Отсутствие очередного элемента является условием завершения работы цикла for (для сравнения: в цикле while условием завершения служит результат false логического выражения в заголовке). Еще один момент: если счетчик не увеличивать на единицу (выражение i = i + 1), то не смотря на то, что все элементы списка будут обработаны, результат все время будет присваиваться первому элементу списка (с индексом 0).

С таким же успехом перебирать можно и строки, если не пытаться их при этом изменять:

>>> stroka = "привет"
>>> for bukva in stroka:
	print(bukva, end=' * ')
 
 
п * р * и * в * е * т * 
>>>

Цикл for используется и для работы со словарями:

>>> d = {1:'one',2:'two',3:'three',4:'four'}
>>> for key in d:
	d[key] = d[key] + '!'
 
>>> d
{1: 'one!', 2: 'two!', 3: 'three!', 4: 'four!'}
>>> 

Цикл for широко используется в языке программирования Python, т.к. является важным инструментом при обработки структур данных. Также следует запомнить, что цикл for в Питоне особенный. Он не является аналогом циклов for во многих других языках программирования, где представляет собой, так называемый, цикл со счетчиком.

Практическая работа

  1. Создайте список, состоящий из четырех строк. Затем, с помощью цикла for, выведите строки поочередно на экран.
  2. Измените предыдущую программу так, чтобы в конце каждой буквы строки добавлялось тире. (Подсказка: цикл for может быть вложен в другой цикл.)
  3. Создайте список, содержащий элементы целочисленного типа, затем с помощью цикла перебора измените тип данных элементов на числа с плавающей точкой. (Подсказка: используйте встроенную функцию float().)

Пример выполнения практической работы

>>> # задание 1
>>> list1 = ['hi','hello','good morning','how do you do']
>>> for i in list1:
	print(i)
 
hi
hello
good morning
how do you do
>>> # задание 2
>>> for i in list1:
	for j in i:
		print(j,end='.')
	print()
 
 
h.i.
h.e.l.l.o.
g.o.o.d. .m.o.r.n.i.n.g.
h.o.w. .d.o. .y.o.u. .d.o.
>>> # задание 3
>>> list2 = [56,78,45,23]
>>> i = 0
>>> for a in list2:
	list2[i] = float(a)
	i = i + 1
 
>>> list2
[56.0, 78.0, 45.0, 23.0]
>>> 

Указание дополнительных примеров

А если мне нужно сделать бесконечный цикл?
А если мне нужно сделать цикл сто раз?
Что я буду сто раз вбивать (0,1,2,3)?

Почему эти примеры не указаны?

)

Для бесконечного цикла обычно используется цикл while, а не for. Например, вот программа с ошибкой (не изменяется значение переменной a), приводящая к зацикливанию:

a = 1
while a != 0:
    print('hi')

Можно еще проще. Любое константное значение, не равное нулю, интерпретируется как true. Поскольку изменить константу нельзя, то цикл не может прервать своего выполнения:

while 1:
    print('hi')

А вот цикл "вечный бездельник":

while 1:
    pass

Инструкция pass ничего не делает, но цикл постоянно работает.

Если нужно прокрутить цикл определенное количество раз, можно использовать функцию range. Например:

for i in range(100):
	print(str(i) + '!',end=' ')

проблема с end=' * '

Не получается вывод в строку

for bukva in stroka:
	print(bukva, end=' * ')

Я так понимаю это от того, что у меня установлен версия 2.7, а не 3.0. Что делать то?

for bukva in stroka: print

for bukva in stroka:
	print bukva + ' * ',

Обратите внимание на запятую в конце инструкции print. Именно она запрещает переход на новую строку в python2.x

Обратите внимание на запятую в конце инструкции print. PS."Влад"

А что необходимо добавить вместо запятой в версии Python 3.2.2?

version 2.7

for bukva in stroka:
	print bukva + ' * ',

version 3.2

for bukva in stroka:
	print (bukva + ' * '), #а вот запятая ничего не делает что внутри что снаружи

Чтобы функция print() не

Чтобы функция print() не создавала новую строку, надо использовать параметр end с любым строковым значением, например пробелом:

for i in range(10):
   print(i, end=' ')

Результат:

0 1 2 3 4 5 6 7 8 9 

А в последнем задании...

А в последнем задании... зачем
 list2[i] = float (a) ?
Можно ведь

 
for a in list2:
  print float(a)

У меня такой же результат получился...
Ведь цикл начинает обход с [s]первого[/s] нулевого элемента. и кому-нибудь помочь
А при необходимости указания начала обхода можно задать срез в заголовке цикла. (for a in list2[1:] - со второго элемента списка)
З.ы. столько вопросов было.. пока писал, все решил)
извините, что умничаю) Пытаюсь закрепить знания )

Между этим кодом list =

Между этим кодом

list = [34,11,78,52,12]
i = 0
for a in list:
    list[i] = float(a)
    i = i + 1

и вот этим

list = [34,11,78,52,12]
i = 0
for a in list:
    print (float(a)) # скобки, т.к. у меня 3-я версия python

разница есть.

В первом случае список list меняется, т.е. там уже будет содержаться [34.0, 11.0, 78.0, 52.0, 12.0]. Во втором случае list не изменяется, измененные значения просто выводятся на экран и не сохраняются в программе. Бывает, что это как раз и требуется. Все зависит от ситуации.

Вопрос к уроку 12

1.    x = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
2.    i = 0
3.    for y in x:
4.        x[i] = y + 2
5.        i = i + 1

Помогите, пожалуйста, разобраться:
1. Создаем список и связываем его с x
2. Определяем переменную i как числовую и равную 0
3. Для каждого y в списке x сделать:
4. Элемент i списка x равен y + 2
5. Увеличиваем i = i +1

Переменная y нигде не задается, как так? Момент с этой переменной больше всего и непонятен, если честно.

Переменная i это положение члена списка, поэтому заранее и задали 0, чтобы начать с первого?

После for ставится переменная

После for ставится переменная (любая), которая при каждой итерации (обороте цикла) ссылается на очередной элемент последовательности (списка, в данном случае). Переменные в Python не объявляются в принципе. Они только обязательно должны связаны с каким-нибудь значением (ссылаться на него). В цикле for переменная y как раз связывается с очередным элементом последовательности. Она не "пустая" как может показаться.
Другой пример:

for letter in 'abcd':
    print(letter)

При первой итерации letter = 'a', при второй letter = 'b' и т.д.

"Переменная i это положение члена списка, поэтому заранее и задали 0, чтобы начать с первого?"
Да. Индексация в Питоне начинается с нуля.
В данном случае переменная-индекс необходима, т.к происходит изменение списка. Если этого не требуется, то она не нужна. Например, надо посчитать сумму элементов и сохранить ее в другой переменной, а список не менять:

x = [4, 6, 23, 534, 23, 98]
sum = 0
for num in x:
    sum = sum + num
 
print(x)
print(sum)

Здесь переменная sum равна 0 по причине того, что она должна быть связана с каким-нибудь значением, чтобы затем в ней можно было сохранить сумму. Она не обозначает индекс и не обязательно изначально должна быть равна нулю.