Пространства имён и простейшие операторы
Интерпретируемые и компилируемые языки: что является формальным исполнителем?
Интерпретатор:
Только лексический анализ кода при вводе (почти )
- Динамическое представление о семантике кода:
- наличие объектов
- наличие идентификаторов и тип связанных ими объектов
- ⇒ операции над объектами
- ⇒ выполнимость кода вообщеё
- Много ошибок периода выполнения
(на самом деле — ещё больше )
Строгая типизация объектов
id()
type(объект)
int, float, bool, str, list, tuple, !NoneType, `…
в частности, function и вообще callable(объект)
Вызов callable-объекта
Пространства имён (введение)
dir() — текущее ПИ
глобальное и локальные ПИ, __builtins__
- Любой объект — ПИ
dir(объект)
- Поля объекта — «просто» поля и методы
- отличие метода от функции
__что-то__ — т. н. «спецполя»
⇒ связывание идентификатоом — добавление имени в ПИ
⇒ поиск идентификатора в пространствах имён происходит в процессе выполнения, когда после синтаксического разбора некоторая подстрока распозналась как «имя»
Неявная динамическая типизация (введение)
тип каждого объекта строго однозначен
при связывании объекта (именем или включением в составной элемент данных) тип не проверяется
- ⇒ (с точки зрения синтаксиса)
- любые функции (методы) применимы к любым объектам
- любые составные структуры данных могут содержать любые объекты
- действия над объектами — это вызов их методов ⇒ если соответствующие методы есть, действия в принципе корректны; если же их нет, это ошибка вида «отсутствуем идентификатор»
Duck typing
Программа на Python
Сценарии в Linux — явный и неявный запуск, #!
- Отличие интерактивной интерпретации от обработки сценария
- Цикл редактирование — отладка — тестирование
Логические выражения
тип bool
операции сравнения и is
«математические сравнения» вида A < B < C < D
условная операция «выражение_true if условие else выражение_false»
- Понятие о «нулевом элементе» класса
операции and, or и not:
- частичное вычисление
- таблица истинности
Операция принадлежности элемент in последовательность
- «Нормальный» пример
WAT:
>>> False is False True >>> True in [False] False >>> False is False in [False] True
Условный оператор и операторы цикла
- Понятие «блок с отступом» (indented block)
Оператор if/elif/else, неструктурная сущность elif
Вложенный if
Оператор while
break/continue
Клауза else для while
- пример: цикл по вводу
Решение домашних заданий
- Использование редактора:
- Как оформлять и посылать Д/З
Ввод/вывод (input() и eval(input()), print())
- В частности, ввод пар, троек и т. п.
правила оформления и принципы выполнения Д/З
Д/З
См. ../HomeworkRules
Установить и настроить подходящий текстовый редактор или IDE (пример: настройка Geany)
Разобраться с #WAT
EJudge: HelloWorld 'Hello World'
Написать программу, которая выводит строку Hello, world (в точности)
(ввод не нужен)
Hello, world
EJudge: AndOr 'Условное выражение'
Ввести два объекта Python и вывести первый непустой из них. Если оба пустые, вывести NO.
[] 123
123
EJudge: DotsInCircle 'Точки в круге'
В первой строке ввести координаты центра круга и его радиус (числа x, y, r через запятую). Во второй и последующих строках ввести пары чисел — координаты точек. Ввод заканчивается парой 0,0 (она не входит в проверку!). Вывести YES, если все точки принадлежат кругу и NO, если не все.
1,1,2 1,2 1,3 2,2 0,0
YES
EJudge: IntPalindrome 'Число-палиндром'
Ввести целое положительное число и проверить, является ли оно палиндромом, т. е. совпадает ли первая цифра с последней, вторая — с предпоследней и т. д. Представлять число в виде последовательности (строки, списка и т. п.) нельзя. Вывести YES или NO соответственно. Лидирующие нули не учитывать (числа, заканчивающиеся на 0 — автоматически не палиндромы).
1234321
YES
EJudge: AnyPower 'Какая-нибудь степень'
Ввести небольшое натуральное число 2⩽N⩽1000000 и проверить, является ли оно степенью натурального числа (>1). Вывести YES или NO соответственно.
1024
YES