Цикл 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]
>>> 

Что такое end ? как оно

Что такое end ? как оно работает, не понимаю

End - это необязательный

End - это необязательный параметр функции print(). Его значение (то, что после знака равно) указывает, чем заканчивается вывод значения.

По умолчанию функция print() после того как выведет значение, осуществляет переход на новую строку. Если написать так:

print(j,end='.') 

, то перехода на новую строку не произойдет. В конце вывода будет поставлена точка.

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

А если мне нужно сделать бесконечный цикл?
А если мне нужно сделать цикл сто раз?
Что я буду сто раз вбивать (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 по причине того, что она должна быть связана с каким-нибудь значением, чтобы затем в ней можно было сохранить сумму. Она не обозначает индекс и не обязательно изначально должна быть равна нулю.

x = [4, 6, 23, 534, 23,

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

В этом примере я вообще запутался. Почему мы получаем сумму чисел списка если складываем sum и num? В них же ничего нет? Ничего не присваивали!
Как так?

Цикл for позволяет перебирать

Цикл for позволяет перебирать элементы структуры данных, которая указана после слова in. В данном случае это последовательность x.
На каждой итерации цикла в num хранится очередной элемент списка. Имя переменной после слова for может быть абсолютно любым, например:

for i in x:
    sum = sum + i

Важно только то, что в этой переменной хранится очередной элемент списка.

При первом проходе (итерации) через тело цикла: sum равно 0, а num равно 4, следовательно, выражение sum + num возвращает 4, которое присваивается sum.
На второй итерации цикла sum равно 4, num равно 6, сумма равна 10, она присваивается sum.
Третья итерация - sum равно 10, num равно 23, сумма 33 присваивается sum.
И т.д.

Всем привет! Спасибо за

Всем привет! Спасибо за отличный ресурс! Я уже далеко не школьник) но более вменяемого начала в питон не встречал!
Вопрос по данному уроку. Ни как не могу понять зачем вводится переменная "element" и как с не можно выполнять какие-то действия если в этой переменной ничего не записано?

spisok[i] = element + 2 - к пустому месту/нулю прибавляем 2?

Чувствую, что в вопросе глупость написал) но эта глупость не дает идти дальше.
Спасибо.

Всё нормально. "Element" —

Всё нормально. "Element" — можно сказать что является не такой переменной, которую задаёт пользователь (var = "nyan"), а вымышленной, или программной.
Двойка прибавляется к "элементу" хранящемуся в переменной, которая была задана, например приведу код:
!!!my_var = "abcd"; — Я создаю строчную переменную (тип данных) со значением abcd
!!!my_slovar = {}; — Я создаю "словарную" переменную со значением ноль ( тип данных).
!!!my_i = 0; — Я создаю строчную переменную для нижнего цикла.
!!!for element in my_var: — Я создаю цикл, в котором создаю "вымышленную" переменную, к которой будет присваиваться "определенное" значение моей переменной my_var, так как for это цикл, то значение будет такое, сначала a, потом b, потом c, потом d, но никак не "сразу", то есть значение не будет таким же как и у my_var.
!!!my_slovar[i] = element + "ня"; — это операция будет добавлять в словарную переменную с номером (у каждого элемента есть свой индекс, или номер, например: my_slovar = {1:a,2:b,3:c,4:d}, у элемента a индекс равен одному, у элемента d равен 4) 0 букву "a", которая находится в моей строчной переменной (my_var) и добавлять в конце "ня".

Если я не добавлю счётчик: i = i + 1;, то в мою словарную переменную добавится только один элемент.