Стандартные типы данных и выражения-конструкторы
Дополнения к предыдущей лекции
- О неэстетичности цикла с пост-условием
Условное выражение 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) Параллельные отрезки
Input:Ввести восемь чисел через запятую — целочисленные координаты 4-х попарно несовпадающих точек A1, A2, A3 и A4: X1, Y1, X2, Y2, X3, Y3, X4, Y4. Вывести YES, если прямая A1A2 параллельна прямой A3A4 (или совпадает с ней), и NO — если не параллельна.
Output:1,2,7,14,8,8,18,28
YES
(SectionShuffle) Перетасовать кортеж
Input:Ввести последовательность A объектов Python через запятую и вывести кортеж, состоящий из элементов последовательности, стоящих на чётных местах — в обратном порядке (включая A[0]), после которых идут элементы последовательности, стоящие на нечётных местах.
Output:'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) Строка — повторение подстроки
Input:Ввести непустую строку s. Найти такое наибольшее число k и такую строку t, что s совпадает со строкой t, выписанной k раз подряд. Вывести k.
Output:abcabcabcabc
4
- Input:
Ввести заданный построчно лабиринт размером N×N. Каждая из N строк ввода содержит N символов: «.» — проходимый участок и «#» — непроходимый. Левый верхний и правый нижний участки лабиринта проходимы. С одного проходимого участка можно попасть на соседний либо по вертикали, либо по горизонтали. Проверить, можно ли попасть из левого верхнего участка в правый нижний, и вывести YES, если можно, и NO, если нельзя.
Output:........... .#.###.###. .#...#...#. .#.#####.#. .#.....#.#. ##.###.###. .....#.#.#. .#.###.#.## .#...#.#... ##.#.###.## ...#.......
YES
ввести W, H — размеры лабиринта и вывести представление достаточно случайного проходимого лабиринта для предыдущей задачи (обратите внимание на нескучные обои красивые неслучайные стены
)
