Командный интерпретатор; простые типы данных; управление ходом выполнения
История Python. Командная строка
- Влияние ЯП 80-х годов на концепцию Python (ABC, Modula, ...)
Мощность сообщества и кодовой базы, стандартный модули и Python Package Index
- Свободное лицензирование
Работа в командной строке
- Командная строка - калькулятор
- Подсистема помощи
Просто help()
Команда help(объект) и что она делает
- Интерактивная HTML-документация
- Объекты Python
- Создание объектов при интерпретации команд
Имена объектов и счётчик ссылок (sys.getrefcount)
Операция = как операция именования a == b vs. a is b
- Изменение объекта по любому из имён
Области видимости, функция dir() и dir(объект)
- Различные удобства ЯП, возникающие уже в командной строке
- «Продвинутые» командные надстройки:
Настройка командной строки
- История, поиск по истории (^R)
- Достраивание имён
- Файлы:
.bashrc / .pythonstartup
Логические операции, операторы ветвления и цикла
Неявная динамическая типизация в Python
- Любые функции (методы) применимы к любым объектам
- Если в процессе выполнения происходит обращение к несуществующему объекту (полю), активизируется исключение
- Проверка существования объекта (поля) происходит в момент обращения к енму
(дополнительно) Все операции над объектами (типа +, [ , () и т. п.) — спецметоды объектов
Логические выражения
Сравнение, в т. ч. сравнение любого объекта с любым, операция is
Цепочки сравнений вида A < B < C
Тип bool и операции and, or и not, условные вычисления
Понятие о нулевом элементе (класса) и методе __nonzero__
Операции and и or для произвольных объектов
- блеск и нищета конструкции вида a = b and c or d
Тернарная операция выражение-1 if условие else выражение-2
Множественное присваивание
Конструкции типа a,b,c=d,e,f=1,2,"". Атомарность множественного присваивания и a,b=b,a
Условный оператор и операторы цикла
- Понятие «блок с отступом» (indented block)
Оператор if/elif/else, неструктурная сущность elif
Оператор while/break/continue. Клауза else.
Оператор for по итерируемому объекту (__iter__). Клауза else на примере задачи поиска.
Д/З
Настроить какой-нибудь IDE (например, Geany), добиться работоспособности
- Прочитать и прощёлкать
Первые четыре главы учебника (на русском)
Задачи и упражнения:
(domari:SecondMax) Найти второй максимум
Ввести список и вывести второй максимум этого списка, т. е. элемент a∈S : ∃ b∈S : b>a и a⩾c ∀c∈S, c≠b. Если второго максимума нет, вывести NO.
3,4,5,6,7
6
В первой строке ввести координаты центра круга и его радиус (три числа через запятую). Во второй строке ввести координаты точек (чётное количество чисел через запятую). Вывести YES, если все точки принадлежат кругу и NO, если не все.
0,0,10 1,2,3,4,5,6,5,4,3,2
YES
(domari: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
(domari: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)
(domari:Labyrinth) Обход лабиринта
Ввести заданный построчно лабиринт размером N×N. Каждая из N строк ввода содержит N символов: «.» — проходимый участок и «#» — непроходимый. Левый верхний и правый нижний участки лабиринта проходимы. С одного проходимого участка можно попасть на соседний либо по вертикали, либо по горизонтали. Проверить, можно ли попасть из левого верхнего участка в правый нижний, и вывести YES, если можно, и NO, если нельзя.
........... .#.###.###. .#...#...#. .#.#####.#. .#.....#.#. ##.###.###. .....#.#.#. .#.###.#.## .#...#.#... ##.#.###.## ...#.......
YES