Командный интерпретатор; простые типы данных; управление ходом выполнения
История 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) Найти второй максимум
Input:Ввести список и вывести второй максимум этого списка, т. е. элемент a∈S : ∃ b∈S : b>a и a⩾c ∀c∈S, c≠b. Если второго максимума нет, вывести NO.
Output:3,4,5,6,7
6
- Input:
В первой строке ввести координаты центра круга и его радиус (три числа через запятую). Во второй строке ввести координаты точек (чётное количество чисел через запятую). Вывести YES, если все точки принадлежат кругу и NO, если не все.
Output:0,0,10 1,2,3,4,5,6,5,4,3,2
YES
(domari: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
(domari: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)
(domari:Labyrinth) Обход лабиринта
Input:Ввести заданный построчно лабиринт размером N×N. Каждая из N строк ввода содержит N символов: «.» — проходимый участок и «#» — непроходимый. Левый верхний и правый нижний участки лабиринта проходимы. С одного проходимого участка можно попасть на соседний либо по вертикали, либо по горизонтали. Проверить, можно ли попасть из левого верхнего участка в правый нижний, и вывести YES, если можно, и NO, если нельзя.
Output:........... .#.###.###. .#...#...#. .#.#####.#. .#.....#.#. ##.###.###. .....#.#.#. .#.###.#.## .#...#.#... ##.#.###.## ...#.......
YES
