⇤ ← Версия 1 от 2017-09-29 13:20:21
3015
Комментарий:
|
5462
|
Удаления помечены так. | Добавления помечены так. |
Строка 1: | Строка 1: |
= Логические операции, операторы ветвления и цикла = Неявная динамическая типизация в Python 1. Любые функции (методы) применимы к любым объектам * Если в процессе выполнения происходит обращение к несуществующему объекту (полю), активизируется исключение 1. Проверка существования объекта (поля) происходит в момент обращения к енму 1. (''дополнительно'') Все операции над объектами (типа `+`, `[` , `()` и т. п.) — спецметоды объектов |
= Пространства имён и простейшие операторы = Интерпретируемые и компилируемые языки: что является формальным исполнителем? |
Строка 8: | Строка 4: |
Интерпретатор: * Только лексический анализ кода при вводе (почти :) ) * Динамическое представление о семантике кода: * наличие объектов * наличие идентификаторов и тип связанных ими объектов * ⇒ операции над объектами * ⇒ выполнимость кода вообщеё * Много ошибок периода выполнения * (на самом деле — ещё больше :) ) == Строгая типизация объектов == * `id()` * `type(объект)` * `int`, `float`, `bool`, `str`, `list`, `tuple`, `!NoneType`, `… * в частности, `function` и вообще `callable(объект)` Вызов callable-объекта == Пространства имён (введение) == * `dir()` — ''текущее'' ПИ * глобальное и локальные ПИ, `__builtins__` * Любой объект — ПИ * `dir(объект)` * Поля объекта — «просто» поля и методы * отличие метода от функции * `__что-то__` — т. н. «спецполя» * ⇒ связывание ''идентификатоом'' — добавление имени в ПИ * ⇒ поиск идентификатора в пространствах имён происходит ''в процессе выполнения'', когда после синтаксического разбора некоторая подстрока распозналась как «имя» ё == Неявная динамическая типизация (введение) == * тип каждого объекта ''строго однозначен'' * при связывании объекта (именем или включением в составной элемент данных) тип ''не проверяется'' * ⇒ (с точки зрения синтаксиса) * любые функции (методы) применимы к любым объектам * любые составные структуры данных могут содержать любые объекты * действия над объектами — это вызов их методов ⇒ если соответствующие методы есть, действия в принципе корректны; если же их нет, это ошибка вида «отсутствуем идентификатор» '''Duck typing''' == Программа на Python == * Сценарии в Linux — явный и неявный запуск, `#!` * Отличие интерактивной интерпретации от обработки сценария * Цикл редактирование — отладка — тестирование |
|
Строка 9: | Строка 47: |
* Сравнение, в т. ч. сравнение любого объекта с любым, операция `is` * Тип `bool` и операции `and`, `or` и `not`, условные вычисления * Понятие о нулевом элементе (класса) и методе `__nonzero__` * Операции `and` и `or` для произвольных объектов * блеск и нищета конструкции вида a = b and c or d == Множественное присваивание == Конструкции типа `a,b,c=d,e,f=1,2,""`. Атомарность множественного присваивания и `a,b=b,a` |
* тип `bool` * операции сравнения и `is` * «математические сравнения» вида `A < B < C < D` * условная операция «`выражение_true if условие else выражение_false`» * Понятие о «нулевом элементе» класса * операции `and`, `or` и `not`: * частичное вычисление * таблица истинности * Операция принадлежности `элемент in последовательность` * «Нормальный» пример * '''WAT'''<<Anchor(WAT)>>: {{{ >>> False is False True >>> True in [False] False >>> False is False in [False] True }}} |
Строка 19: | Строка 70: |
* Оператор `while`/`break`/`continue`. Клауза `else`. * Оператор `for` по итерируемому объекту (`__iter__`). Клауза `else` на примере задачи поиска. == Решние домашних заданий == |
* Вложенный `if` * Оператор `while` * `break`/`continue` * Клауза `else` для `while` == Решение домашних заданий == |
Строка 23: | Строка 77: |
* [[http://vim.org|vim]], [[http://www.geany.org/|Geany]], различные IDE | * [[http://vim.org|vim]] * [[http://www.geany.org/|Geany]] * [[py3doc:idle.html|IDLE]] * … |
Строка 25: | Строка 82: |
* Указание `python3` вместо `python` | |
Строка 31: | Строка 89: |
1.#0 Установить и настроить подходящий текстовый редактор или IDE (пример: [[LecturesVMSH/Python/WindowsGeany|настройка Geany]]) | 1.#0 Установить и настроить подходящий текстовый редактор или IDE (пример: [[LecturesVMSH/Python/Windows8Geany|настройка Geany]]) 1. Разобраться с [[#WAT]] |
Строка 34: | Строка 93: |
1. <<EJCMC(86, Methods, Вывести в столбик поля объекта)>> 1. <<EJCMC(86, SecondMax, Найти второй максимум)>> 1. <<EJCMC(86, Else, Точки в круге)>> |
1. <<EJCMC(86, DotsInCircle, Точки в круге)>> 1. <<EJCMC(86, IntPalindrome, Число-палиндром)>> |
Пространства имён и простейшие операторы
Интерпретируемые и компилируемые языки: что является формальным исполнителем?
Интерпретатор:
Только лексический анализ кода при вводе (почти )
- Динамическое представление о семантике кода:
- наличие объектов
- наличие идентификаторов и тип связанных ими объектов
- ⇒ операции над объектами
- ⇒ выполнимость кода вообщеё
- Много ошибок периода выполнения
(на самом деле — ещё больше )
Строгая типизация объектов
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