Различия между версиями 1 и 2
Версия 1 от 2017-09-29 13:20:21
Размер: 3015
Редактор: FrBrGeorge
Комментарий:
Версия 2 от 2017-09-29 14:27:55
Размер: 5462
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 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

Решение домашних заданий

  • Использование редактора:
    • vim

    • Geany

    • IDLE

    • Настройка отступов (табуляции — зло)
    • Указание python3 вместо python

  • Как оформлять и посылать Д/З

Д/З

См. ../HomeworkRules

  1. Установить и настроить подходящий текстовый редактор или IDE (пример: настройка Geany)

  2. Разобраться с #WAT

  3. EJudge: HelloWorld 'Hello World'

    Написать программу, которая выводит строку Hello, world (в точности)

    Input:

    (ввод не нужен)
    Output:

    Hello, world
  4. EJudge: AndOr 'Условное выражение'

    Ввести два объекта Python и вывести первый непустой из них. Если оба пустые, вывести NO.

    Input:

    []
    123
    Output:

    123
  5. EJudge: DotsInCircle 'Точки в круге'

    В первой строке ввести координаты центра круга и его радиус (числа x, y, r через запятую). Во второй и последующих строках ввести пары чисел — координаты точек. Ввод заканчивается парой 0,0 (она не входит в проверку!). Вывести YES, если все точки принадлежат кругу и NO, если не все.

    Input:

    1,1,2
    1,2
    1,3
    2,2
    0,0
    Output:

    YES
  6. EJudge: IntPalindrome 'Число-палиндром'

    Ввести целое положительное число и проверить, является ли оно палиндромом, т. е. совпадает ли первая цифра с последней, вторая — с предпоследней и т. д. Представлять число в виде последовательности (строки, списка и т. п.) нельзя. Вывести YES или NO соответственно. Лидирующие нули не учитывать (числа, заканчивающиеся на 0 — автоматически не палиндромы).

    Input:

    1234321
    Output:

    YES

LecturesCMC/PythonIntro2017/02_Conditionals (последним исправлял пользователь FrBrGeorge 2017-09-29 14:37:26)