Различия между версиями 2 и 3
Версия 2 от 2017-09-29 14:27:55
Размер: 5462
Редактор: FrBrGeorge
Комментарий:
Версия 3 от 2017-09-29 14:37:26
Размер: 5639
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 30: Строка 30:
ё
Строка 74: Строка 73:
  * пример: цикл по вводу
Строка 85: Строка 85:
   * В частности, ввод пар, троек и т. п.
Строка 95: Строка 96:
 1. <<EJCMC(86, AnyPower, Какая-нибудь степень)>>

Пространства имён и простейшие операторы

Интерпретируемые и компилируемые языки: что является формальным исполнителем?

Интерпретатор:

  • Только лексический анализ кода при вводе (почти :) )

  • Динамическое представление о семантике кода:
    • наличие объектов
    • наличие идентификаторов и тип связанных ими объектов
    • ⇒ операции над объектами
    • ⇒ выполнимость кода вообщеё
  • Много ошибок периода выполнения
    • (на самом деле — ещё больше :) )

Строгая типизация объектов

  • 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

  • Как оформлять и посылать Д/З
    • Ввод/вывод (input() и eval(input()), print())

      • В частности, ввод пар, троек и т. п.
    • правила оформления и принципы выполнения Д/З

Д/З

См. ../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
  7. EJudge: AnyPower 'Какая-нибудь степень'

    Ввести небольшое натуральное число 2⩽N⩽1000000 и проверить, является ли оно степенью натурального числа (>1). Вывести YES или NO соответственно.

    Input:

    1024
    Output:

    YES

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