Занятие 4: Условия и циклы.
Содержание
Цикл for
Цикл – команда питону исполнить набор каких-либо действий определённое количество раз. Каждое такое исполнение называется итерацией цикла.
В основном в питоне используется цикл for.
Рассмотрим форму его записи на элементарном примере:
ВАЖНО: не забываем ставить двоеточие и делать отступы всякий раз, когда пишем тело цикла!
Перед каждой итерацией переменной цикла присваивается очередное значение из списка, по которому проходит цикл.
Теперь изучим несколько новых функций, которые нам потребуются в циклах.
И рассмотрим сразу их действие на примерах:
range
1 >>> range (5)
2 [0, 1, 2, 3, 4]
Заметим, что указывав в скобках одно число N, на выходе мы получим последовательность от "0" до "N-1".
Однако мы можем и задать интервал, начиная не с нуля, а с необходимого нам числа следующим образом:
1 >>> range (3, 10)
2 [3, 4, 5, 6, 7, 8, 9]
Разберём более интересный пример и назовём его "Английским алфавитом":
1 >>> codes=range (ord('A'), ord('Z')+1)
2 >>> letters=[]
3 >>> for code in codes:
4 ... letters.append(chr(code))
5 ...
6 >>> print letters
7 ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
Но не забудьте выйти из цикла... Если команду print оставить в теле цикла, то получим на экране результат каждой итерации:
1 >>> codes=range (ord('A'), ord('Z')+1)
2 >>> letters=[]
3 >>> for code in codes:
4 ... letters.append(chr(code))
5 ... print letters
6 ...
7 ['A']
8 ['A', 'B']
9 ['A', 'B', 'C']
10 ['A', 'B', 'C', 'D']
11 ['A', 'B', 'C', 'D', 'E']
12 ['A', 'B', 'C', 'D', 'E', 'F']
13 ['A', 'B', 'C', 'D', 'E', 'F', 'G']
14 ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
15 ...
Функция ord возвращает код буквы (в кодировке ASCII или в уникоде):
1 >>> codes=range (ord('A'), ord('Z')+1)
2 >>> print codes
3 [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90]
Команда chr обратно переводит код в букву, что мы и увидели в примере.
Индексы и слайсы
Рассмотрим пример:
Как видим, командой letter[10] мы вытаскиваем элемент с номером 10. Это называется индексированием, получением элемента списка по индексу.
В алфавите номеру 10 соответствует буква К, одиннадцатая по счёту. (Не забываем о том, что нумерация начинается с 0)
Пример:
Такой командой letters[1:3] мы получаем список, элементов в указанном диапозоне. Такой список называется слайсом.
ВАЖНО: слайс letters[N:M] начинается с элемента, стоящего под номером N (который мы указываем первым), и заканчивается элементом с номером M-1.
Пример это как раз демонстрирует.
Можем делать слайс от начала и до необходимого элемента: командой letters[:3] например:
Командой letters[:] мы получим в слайсе весь наш список, но
ВАЖНО помнить, что при этом будет создан новый объект, а не ссылка!
Пример:
Соответственно, если мы хотим последний элемент, то нужно использовать команду letters[-1], а два последних элемента – letters[-2:].
Ну и конечно если мы зададим несуществующий промежуток, то ничего на выходе не получим!
Таким примером может являться отрезок [13:-13] для анлгийского алфавита.=)
Удалить слайс:
1 >>> a=[1, 2, 3]
2 >>> del a[0:2]
3 >>> print a
4 [3]
Видим, что удаление заканчивается N-1 элементом! Но мы это помним.=)
Мы можем не только удалять, но и заменять слайс
1 >>> a=range(10)
2 >>> a[1:-1]=[4, 5]
3 >>> print a
4 [0, 4, 5, 9]
Думаю, что если вы внимательно читали предыдущие замечания, то результат для вас не был неожиданным.
(Действительно, командой range(10) мы получили : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Берём промежуток, начиная с первого элемента, то есть с единицы(ведь нулевой элемент и есть ноль в данном случае) и заканчивая элементом N-1, то есть 8.
- А затем заменяем этот отрезок на отрезок [4, 5]. Результат очевиден, если внимательно разобраться.)
Пример на сочетание букв и цифр:
Кортежи и распаковка кортежей
Чем кортежи отличаются от списков?
Ответ:
- его нельзя менять!!!
- записываем его в круглых скобках!!!
Рассмотрим на примерах:
Пример №1.
Пример №2
Во втором примере достаточно подозрительна запись:
1 x, y = B
Пояснение: эта запись определяет операцию, что и в предыдущем примере ПЛЮС проводится проверка, что в кортеже только 2 элемента, а не три и более.
Эта операция называется распаковкой кортежа.
Почти синонимом (кроме проверки длины B) для неё было бы:
1 x = B[0]
2 y = B[1]
Пример №3
Более того, возможен и такой вариант записи:
Теперь научимся делать списки пар.
Функция zip получает на вход два списка и склеивает их попарно:
1 >>> zip([1, 2, 3], [4, 5, 6])
2 [(1, 4), (2, 5), (3, 6)]
Запуск функции enumerate - позволяет создавать следующие кортежи:
Таким образом, enumerate сопоставляет значение элемента его индексу.
Очень полезная функция , позволяет, например, провести соединение в пары соседних элементов.
Условия
Запись проста и удобна:
В питоне есть операции сравнения и работы с логическими выражениями, смысл которых достаточно понятен из их записи:
>, <, <=, >= (как слышится, так и пишется: мы говорим "больше равно", так и пишем),
== (двойное равно – сравнение, одинарное равно – присваивание),
!= (не равно),
in (является дли что-то элементом списка), not in,
not (отрицание логического выражения).