Стандартные типы данных и выражения-конструкторы
Дополнения к предыдущей лекции
- О неэстетичности цикла с пост-условием
Условное выражение A if C else B как адекватная замена C and A or B
Волшебные сравнения вида A < B < C
Конструкции вида +=, &= и т. п.
raw_input() vs. input(), eval() и `-выражение
- Пару слов о модулях: it's all about namespace
Скалярные типы данных
- Целые и длинные целые
- Вещественные и комплексные числа
о несуществовании вещественных чисел в цифровых ЭВМ (2.2 + 3.3)
⇒ модули decimal, fractions
модуль random
Булевский и типы-объекты (None, NotImplemented, Ellipsis и т. п.)
Последовательности
- Кортежи (константные списки)
- со скобками и без, с запятой в конце и без неё
кортеж в левой части присваивания и цикла for
- секционирование последовательностей на примере кортежей
- отрицательные значения и умолчания
методы: count и index; функция len(), операция in
- перечисления и многоточие (Ellipsis) — для пользовательских объектов
- Списки
принципиальное отличие изменяемых структур от неизменяемых: non-hashable, скорость?
- секция в левой части присваивания
методы append/pop/extend; insert/remove; reverse/sort
- выражение-генератор списка
вложенное выражение-генератор (например, [x*y for x in xrange(5) for y in xrange(x)])
- Строки
- двойственная сущность строки как константной последовательности однобуквенных строк же
- четыре способа закавычить строку
много методов
модификатор r"
- Проблема UTF и Unicode-строки
bytearray, список однобайтовых целых, он же изменяемая строка
xrange
Множества
set() и frozenset()
- Выражение-генератор множества
Д/З
- Прочитать:
Неформальное введение в Python (introduction.html) в учебнике
Числовые типы Python в справочнике
Структуры данных (datastructures.html) в учебнике
Последовательности в справочнике
Передать input() что-нибудь действительно нехорошее
(ParallelSegments) Параллельные отрезки
Ввести восемь чисел через запятую — целочисленные координаты 4-х попарно несовпадающих точек A1, A2, A3 и A4: X1, Y1, X2, Y2, X3, Y3, X4, Y4. Вывести YES, если прямая A1A2 параллельна прямой A3A4 (или совпадает с ней), и NO — если не параллельна.
1,2,7,14,8,8,18,28
YES
(SectionShuffle) Перетасовать кортеж
Ввести последовательность A объектов Python через запятую и вывести кортеж, состоящий из элементов последовательности, стоящих на чётных местах — в обратном порядке (включая A[0]), после которых идут элементы последовательности, стоящие на нечётных местах.
'0', 1, 2, '3', 4, 5, '6', 7, 8, '9', 10, 11
(10, 8, '6', 4, 2, '0', 1, '3', 5, 7, '9', 11)
(RepeatedString) Строка — повторение подстроки
Ввести непустую строку s. Найти такое наибольшее число k и такую строку t, что s совпадает со строкой t, выписанной k раз подряд. Вывести k.
abcabcabcabc
4
Ввести заданный построчно лабиринт размером N×N. Каждая из N строк ввода содержит N символов: «.» — проходимый участок и «#» — непроходимый. Левый верхний и правый нижний участки лабиринта проходимы. С одного проходимого участка можно попасть на соседний либо по вертикали, либо по горизонтали. Проверить, можно ли попасть из левого верхнего участка в правый нижний, и вывести YES, если можно, и NO, если нельзя.
........... .#.###.###. .#...#...#. .#.#####.#. .#.....#.#. ##.###.###. .....#.#.#. .#.###.#.## .#...#.#... ##.#.###.## ...#.......
YES
ввести W, H — размеры лабиринта и вывести представление достаточно случайного проходимого лабиринта для предыдущей задачи (обратите внимание на нескучные обои красивые неслучайные стены )