Введение в Python. Лекция 7: Инструкции цикла в Python

Содержание

Слайд 2

Циклы

Практически каждый язык программирования содержит какую-нибудь конструкцию цикла. В большей части языков

Циклы Практически каждый язык программирования содержит какую-нибудь конструкцию цикла. В большей части
есть больше одной такой конструкции. В мире Python есть два типа циклов:
Цикл for
Цикл while
Циклы (loops) предназначены для повторения команд и блоков кода

Слайд 3

Инструкция цикла for

Имеется список num. Вывести на экран каждый из его элементов

Инструкция цикла for Имеется список num. Вывести на экран каждый из его
отдельно:
>>> num=[0.8, 7.0, 6.8, -6]
>>> num
[0.8, 7.0, 6.8, -6]
>>> print(num[0],'- number')
0.8 - number
>>> print(num[1],'- number')
7.0 - number

Слайд 4

Используем цикл for:

>>> num=[0.8, 7.0, 6.8, -6]
>>> for i in num:

Используем цикл for: >>> num=[0.8, 7.0, 6.8, -6] >>> for i in

print(i, '- number')
0.8 - number
7.0 - number
6.8 - number
-6 - number
>>>

Слайд 5

В общем виде цикл for для перебора всех элементов указанного списка выглядит

В общем виде цикл for для перебора всех элементов указанного списка выглядит следующим образом:
следующим образом:

Слайд 6

Пример:

>>> for i in [1, 2, 'hi']:
print(i)
1
2
hi
>>>

Пример: >>> for i in [1, 2, 'hi']: print(i) 1 2 hi >>>

Слайд 7

Цикл for работает и для строк:
>>> for i in 'hello':
print(i)
h

Цикл for работает и для строк: >>> for i in 'hello': print(i)

e
l
l
o
>>>

Слайд 8

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

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

Слайд 9

Цикл for также позволяет производить определенные операции:
>>> num=[0.8, 7.0, 6.8, -6]

Цикл for также позволяет производить определенные операции: >>> num=[0.8, 7.0, 6.8, -6]

>>> for i in num:
if i == 7.0:
print (i, '- число 7.0')
7.0 - число 7.0
>>>

Слайд 10

Похожим образом в цикле производится поиск необходимого символа в строке с помощью

Похожим образом в цикле производится поиск необходимого символа в строке с помощью
вызова строкового метода:
>>> country=“Kyrgyzstan"
>>> for ch in country:
if ch.isupper():
print(ch)
K
>>>

Слайд 11

Функция range

Достаточно часто при разработке программ необходимо получить последовательность (диапазон) целых чисел.

Функция range Достаточно часто при разработке программ необходимо получить последовательность (диапазон) целых

Для решения этой задачи в Python предусмотрена функция range(), создающая последовательность (диапазон) чисел. В качестве аргументов функция принимает: начальное значение диапазона (по умолчанию 0), конечное значение (не включительно) и шаг (по умолчанию 1).

Слайд 12

Функция range

Функция range

Слайд 13

Функция range() служит для создания списка чисел, который начинается с того числа,

Функция range() служит для создания списка чисел, который начинается с того числа,
который мы указали первым внутри ее скобок, и заканчивается числом на единицу меньше второго числа. То есть функция выглядит так: range(начало_списка, конец_списка, шаг), где аргументы “начало_списка” и “шаг” являются необязательными. Мы можем обойтись только числом, обозначающим “конец_списка”. В этом случае в качестве начального числа подставится 0, а в качестве шага по умолчанию будет 1:

Слайд 14

>>> range(0,10,1)
range(0, 10)
>>> range(10)
range(0, 10)
>>>

>>> range(0,10,1) range(0, 10) >>> range(10) range(0, 10) >>>

Слайд 15

Примеры вызовов функции range

Примеры вызовов функции range

Слайд 16

Для создания диапазона чисел необходимо использовать цикл for:

>>> for i in

Для создания диапазона чисел необходимо использовать цикл for: >>> for i in
range(0, 10, 1):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
>>> for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
>>> for i in range(2, 20, 2):
print(i, end=' ')
2 4 6 8 10 12 14 16 18
>>>

Слайд 17

При желании можно получить диапазон в обратном порядке следования (обратите внимание на

При желании можно получить диапазон в обратном порядке следования (обратите внимание на
аргументы функции range()):
>>> for i in range(20, 2, -2):
print(i, end=' ')
20 18 16 14 12 10 8 6 4
>>>

Слайд 18

Теперь с помощью диапазона найдем сумму чисел на интервале от 1 до

Теперь с помощью диапазона найдем сумму чисел на интервале от 1 до
100:
>>> total=0
>>> for i in range(1, 101):
total=total+i
>>> total
5050
>>>

Слайд 19

Переменной i на каждом шаге цикла будет присваиваться значение из диапазона от

Переменной i на каждом шаге цикла будет присваиваться значение из диапазона от
1 до 100 (крайнее значение не включаем). В цикле мы накапливаем счетчик.

Слайд 20

В Python есть более красивое решение данной задачи:
>>> sum(list(range(1, 101)))
5050

В Python есть более красивое решение данной задачи: >>> sum(list(range(1, 101))) 5050 >>>

>>>

Слайд 21

Диапазоны можно использовать при создании списков:

>>> list(range(10))
[0, 1, 2, 3,

Диапазоны можно использовать при создании списков: >>> list(range(10)) [0, 1, 2, 3,
4, 5, 6, 7, 8, 9]
>>> list(range(2, 10, 2))
[2, 4, 6, 8]
>>>
Вызов функции sum() для списка в качестве аргумента приводит к подсчету суммы всех элементов списка.

Слайд 22

Упражнение:

Найдите все значения функции y (x) = x2 + 3 на интервале

Упражнение: Найдите все значения функции y (x) = x2 + 3 на
от 10 до 30 с шагом 2.

Слайд 23

Диапазон, создаваемый функцией range(), часто используется для задания индексов. Например, если необходимо

Диапазон, создаваемый функцией range(), часто используется для задания индексов. Например, если необходимо
изменить существующий список, умножив каждый его элемент на 2:
lst = [4, 10, 5, -1.9]
print (lst)
for i in range(len(lst)):
lst [i]=lst [i] * 2
print (lst)

Слайд 24

В результате выполнения программы:
>>>
======== RESTART: C:/Python35-32/myprog.py ======
[4, 10, 5,

В результате выполнения программы: >>> ======== RESTART: C:/Python35-32/myprog.py ====== [4, 10, 5,
-1.9]
[8, 20, 10, -3.8]
>>>

Слайд 25

Необходимо пройти в цикле по всем элементам списка lst, для этого перебираются

Необходимо пройти в цикле по всем элементам списка lst, для этого перебираются
и изменяются последовательно элементы списка через указание их индекса. В качестве аргумента range() задается длина списка. В этом случае создаваемый диапазон будет от 0 до len(lst)-1. Python не включает крайний элемент диапазона, т.к. длина списка всегда на 1 больше, чем индекс последнего его элемента, т.к. индексация начинается с нуля.

Слайд 26

Подходы к созданию списка

Рассмотрим различные способы создания списков. Самый очевидный способ:
>>>

Подходы к созданию списка Рассмотрим различные способы создания списков. Самый очевидный способ:
a = []
>>> for i in range(1,15):
a.append(i)
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>>

Слайд 27

С созданием списка из диапазона мы уже встречались:
>>> a = list(range(1,

С созданием списка из диапазона мы уже встречались: >>> a = list(range(1,
15))
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>>

Слайд 28

Можно также использовать «списковое включение» (или «генератор списка»):
>>> a = [i

Можно также использовать «списковое включение» (или «генератор списка»): >>> a = [i
for i in range(1,15)]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>>

Слайд 29

Правила работы для спискового включения:

Правила работы для спискового включения:

Слайд 30

В следующем примере выбираем из диапазона все числа от 1 до 14,

В следующем примере выбираем из диапазона все числа от 1 до 14,
возводим их в квадрат и сразу формируем из них новый список:
>>> a = [i**2 for i in range(1,15)]
>>> a
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]
>>>

Слайд 31

Списковое включение позволяет задавать условие для выбора значения из диапазона (в примере

Списковое включение позволяет задавать условие для выбора значения из диапазона (в примере
исключили значение 4):
>>> a = [i**2 for i in range(1,15) if i!=4]
>>> a
[1, 4, 9, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]
>>>

Слайд 32

Вместо диапазонов списковое включение позволяет указывать существующий список:
>>> a = [2,

Вместо диапазонов списковое включение позволяет указывать существующий список: >>> a = [2,
-2, 4, -4, 7, 5]
>>> b = [i**2 for i in a]
>>> b
[4, 4, 16, 16, 49, 25]
>>>

Слайд 33

В примере мы выбираем последовательно значения из списка a, возводим в квадрат

В примере мы выбираем последовательно значения из списка a, возводим в квадрат
каждый из его элементов и сразу добавляем полученные значения в новый список.
По аналогии можно перебирать символы из строки и формировать из них список:
>>> c = [c*3 for c in 'list' if c != 'i']
>>> c
['lll', 'sss', 'ttt']
>>>

Слайд 34

В Python есть интересная функция map(), которая позволяет создавать новый список на

В Python есть интересная функция map(), которая позволяет создавать новый список на
основе существующего списка:
>>> def f(x):
return x+5
>>> list(map(f,[1,3,4]))
[6, 8, 9]
>>>

Слайд 35

Функция map() принимает в качестве аргументов имя функции и список (или строку).

Функция map() принимает в качестве аргументов имя функции и список (или строку).
Каждый элемент списка (или строки) подается на вход функции, и результат работы функции добавляется как элемент нового списка. Получить результат вызова функции map() можно через цикл for или функцию list().
Функции, которые принимают на вход другие функции, называются функциями высшего порядка.

Слайд 36

Пример вызова map() для строки:
>>> def f(s):
return s*2
>>> list(map(f,

Пример вызова map() для строки: >>> def f(s): return s*2 >>> list(map(f,
"hello"))
['hh', 'ee', 'll', 'll', 'oo']
>>>

Слайд 37

Рассмотрим, как получить список, состоящий из случайных целых чисел:
>>> from random

Рассмотрим, как получить список, состоящий из случайных целых чисел: >>> from random
import randint
>>> A = [randint(1, 9) for i in range(5)]
>>> A
[2, 1, 1, 7, 8]
>>>

Слайд 38

В данном примере функция range() выступает как счетчик числа повторений (цикл for

В данном примере функция range() выступает как счетчик числа повторений (цикл for
сработает ровно 5 раз). Обратите внимание, что при формировании нового списка переменная i не используется. В результате пять раз будет произведен вызов функции randint(), которая сгенерирует целое случайное число из интервала, и уже это число добавится в новый список.

Слайд 39

Перейдем к ручному вводу значений для списка. Зададим длину списка и введем

Перейдем к ручному вводу значений для списка. Зададим длину списка и введем
с клавиатуры все его значения:

a = [] # объявляем пустой список
n = int (input()) # считываем количество элементов в списке
for i in range(n):
new_element = int(input()) # считываем очередной элемент
a.append(new_element) # добавляем его в список
# последние две строки можно было заменить одной:
# a.append(int(input()))
print(a)

Слайд 40

В результате запуска программы:
>>>
======== RESTART: C:\Python35-32\myprog.py ========
3
4
2

В результате запуска программы: >>> ======== RESTART: C:\Python35-32\myprog.py ======== 3 4 2

1
[4, 2, 1]
>>>

Слайд 41

Теперь запишем решение этой задачи через списковое включение в одну строку:
>>>

Теперь запишем решение этой задачи через списковое включение в одну строку: >>>
A = [int(input()) for i in range(int(input()))]
3
4
2
1
>>> A
[4, 2, 1]
>>>

Слайд 42

Инструкция цикла while

Цикл for используется, если заранее известно, сколько повторений необходимо

Инструкция цикла while Цикл for используется, если заранее известно, сколько повторений необходимо
выполнить (указывается через аргумент функции range() или пока не закончится список/строка).
Если заранее количество повторений цикла неизвестно, то применяется другая конструкция, которая называется циклом while:

Слайд 43

Цикл while:

Цикл while:

Слайд 44

Определим количество кроликов:

rabbits = 3
while rabbits > 0:
print(rabbits)
rabbits =

Определим количество кроликов: rabbits = 3 while rabbits > 0: print(rabbits) rabbits
rabbits – 1
В результате выполнения программы:
>>>
========= RESTART: C:\Python35-32\myprog.py ==========
3
2
1
>>>

Слайд 45

В примере цикл while выполняется до тех пор, ПОКА число кроликов в

В примере цикл while выполняется до тех пор, ПОКА число кроликов в
условии положительное. На каждом шаге цикла мы переменную rabbits уменьшаем на 1, чтобы не уйти в бесконечный цикл, когда условие всегда будет являться истинным.
Рассмотрим подробнее ход выполнения программы. В начале работы программы переменная rabbits равна 3, затем попадаем в цикл while, т.к. условие rabbits > 0 будет являться истинным (вернет значение True). В теле цикла вызывается функция print(), которая отобразит на экране текущее значение переменной rabbits. Далее переменная уменьшится на 1 и снова произойдет проверка условия while, т.е. 2 > 0 (вернет True). Попадаем в цикл и действия повторяются до тех пор, пока не дойдем до условия 0 > 0. В этом случае вернется логическое значение False и цикл while не сработает.

Слайд 46

Рассмотрим следующий пример:

while True:
text = input("Введите число или стоп для выхода:

Рассмотрим следующий пример: while True: text = input("Введите число или стоп для
")
if text == "стоп":
print("Выход из программы! До встречи!")
break # инструкция выхода из цикла
elif text == '1':
print("Число 1")
else:
print("Что это?!")

Слайд 47

В результате работы программы получим:

>>>
============ RESTART: C:\Python35-32\myprog.py ===========
Введите число или

В результате работы программы получим: >>> ============ RESTART: C:\Python35-32\myprog.py =========== Введите число
стоп для выхода: 4
Что это?!
Введите число или стоп для выхода: 1
Число 1
Введите число или стоп для выхода: стоп
Выход из программы! До встречи!
>>>

Слайд 48

Программа выполняется в бесконечном цикле, т.к. True всегда является истиной. Внутри цикла

Программа выполняется в бесконечном цикле, т.к. True всегда является истиной. Внутри цикла
происходит ввод значения с клавиатуры и проверка введенного значения. Инструкция break осуществляет выход из цикла.
В подобных программах необходимо внимательно следить за преобразованием типов данных.

Слайд 49

В следующей программе реализован один из вариантов подсчета суммы чисел в строке:

В следующей программе реализован один из вариантов подсчета суммы чисел в строке:

s='aa3aBbb6ccc'
total=0
for i in range(len(s)):
if s[i].isalpha(): # посимвольно проверяем наличие буквы
continue # инструкция перехода к следующему шагу цикла
total=total+int(s[i]) #накапливаем сумму, если встретилась цифра
print ("сумма чисел:", total)

Слайд 50

Результат выполнения:

>>>
======== RESTART: C:\Python35-32\myprog.py =======
сумма чисел: 9
>>>
В примере

Результат выполнения: >>> ======== RESTART: C:\Python35-32\myprog.py ======= сумма чисел: 9 >>> В
демонстрируется использование инструкции continue. Выполнение данной инструкции приводит к переходу к следующему шагу цикла, т.е. все команды, которые находятся после continue, будут проигнорированы.

Слайд 51

Вложенные циклы

Циклы можно вкладывать друг в друга.
outer = [1, 2, 3,

Вложенные циклы Циклы можно вкладывать друг в друга. outer = [1, 2,
4] # внешний цикл
inner = [5, 6, 7, 8] # вложенный (внутренний) цикл
for i in outer:
for j in inner:
print ('i=', i, 'j=', j)

Слайд 52

Результат работы программы:

i= 1 j= 5
i= 1 j= 6
i= 1

Результат работы программы: i= 1 j= 5 i= 1 j= 6 i=
j= 7
i= 1 j= 8
i= 2 j= 5
i= 2 j= 6
i= 2 j= 7
i= 2 j= 8
i= 3 j= 5
i= 3 j= 6
i= 3 j= 7
i= 3 j= 8
i= 4 j= 5
i= 4 j= 6
i= 4 j= 7
i= 4 j= 8

Слайд 54

Пример с одним циклом for:

lst = [[1, 2, 3],
[4, 5, 6]]

Пример с одним циклом for: lst = [[1, 2, 3], [4, 5,

for i in lst:
print (i)
Результат выполнения программы:
>>>
====== RESTART: C:\Python35-32\myprog.py =======
[1, 2, 3]
[4, 5, 6]
>>>

Слайд 55

Если мы хотим добраться до элементов вложенных списков, то придется использовать вложенный

Если мы хотим добраться до элементов вложенных списков, то придется использовать вложенный
цикл for:
lst = [[1, 2, 3],
[4, 5, 6]]
for i in lst: # цикл по элементам внешнего списка
print()
for j in i: # цикл по элементам элементов внешнего списка
print (j, end="")