Стандартные типы данных
Долги за прошлый раз
Особенности Python3
Деление / и целочисленное деление //
Цепочка сравнений вида A < B < C < D (эквивалентна (A < B) and (B < C) and (C < D)
Любой объект — это логическое выражение, False, если оно «пустое», True, если непустое
Пустые объекты — 0, 0.0, "". [], (), None и некоторые другие
⇒ можно писать что-то вроде A and B
A and B == A, если A пустое, иначе B
A or B == A, если A непустое, иначе B
⇒ B вычисляется не всегда
см. Д/З
Помимо break и continue в цикле while есть
клауза else, операторы в которой выполняются только если выход из цикла произошёл «естественным путём», а не по break:
- Пример: алгоритм «поиска первого» }
Использование eval() и распаковки последовательностей (потом расскажу) для удобного ввода произвольных данных через запятую:
Ввод: 1,"afdsdf",2.45645, вывод 1 / afdsdf / 2.45645
Ввод: int,23+56,abs(-1), вывод <class 'int'> / 79 / 1
Решение домашних заданий
- Использование редактора:
- Как оформлять и посылать Д/З
Ввод/вывод (input() и eval(input()), print())
- В частности, ввод пар, троек и т. п.
правила оформления и принципы выполнения Д/З
Немножко о модулях
- Модули — это программы, они «просто» выполняются
- Пример
__name__
- Модули — это пространства имён
import модуль VS from модуль import символ vs from модуль import *
Есть ещё иерархические модули — т. н. «пакеты» (например, os)
Полезные модули — random, re, sys, …
Типы данных
Скалярные, функция type() (уже было)
type, function
None, NotImplemented, Ellipsis и т. д.
- О вещественных числах
модули decimal и fractions
Последовательности
Кортежи
- со скобками и без, с запятой в конце и без неё
- индексирование (в т. ч. отрицательное)
- секционирование последовательностей на примере кортежей
- отрицательные значения и умолчания
методы: count() и index() и др.; функция len(), операция in
(к слову о сечениях) Ellipsis (он же ...):
Итераторы
iter(объект): сделать из составного объекта итератор (если получится, конечно)
Протокол итерации: next() и StopIteration
- Из чего можно сделать итератор?
индексируемый объект (метод .__getitem__)
объект, сам предоставляющий итератор (метод .__iter__)
- … (?)
Цикл for
⇒ цикл вида for имя in последовательность
continue, break, else
Вычислимые последовательности
range()
- индексируемая!
for i in range(10): …
enumerate()
- …
Д/З
- Прочитать:
введение в Python в учебнике
Числовые типы Python в справочнике
Структуры данных в учебнике
Последовательности в справочнике
Как передать eval(input()) что-нибудь действительно нехорошее, чтобы Python что-нибудь выполнил или завёл очень большой объект?
EJudge: ParallelSegments 'Параллельные отрезки'
Ввести восемь чисел через запятую — целочисленные координаты 4-х несовпадающих точек A1, A2, A3 и A4: X1, Y1, X2, Y2, X3, Y3, X4, Y4. Вывести YES, если прямая A1A2 параллельна прямой A3A4 (или совпадает с ней), и NO — если не параллельна.
1,2,7,14,8,8,18,28
YES
EJudge: SectionShuffle 'Перетасовать кортеж'
Ввести последовательность A объектов Python через запятую, и вывести кортеж, состоящий из элементов последовательности, стоящих на чётных местах — в обратном порядке (включая A[0]), после которых идут в исходном порядке элементы последовательности, стоящие на нечётных местах.
'0', 1, 2, '3', 4, 5, '6', 7, 8, '9', 10, 11
(10, 8, '6', 4, 2, '0', 1, '3', 5, 7, '9', 11)
EJudge: SecondMax 'Второй максимум'
Ввести последовательность S и вывести второй максимум этой последовательности, т. е. элемент a∈S : ∃ b∈S : b>a и a⩾c ∀c∈S, c≠b. Если второго максимума нет, вывести NO. Пользоваться функциями наподобие max() или sorted() нельзя.
3,4,5,6,7
6
EJudge: PaidStairs 'Платная лестница'
(MCCME) Мальчик подошел к платной лестнице. Чтобы наступить на любую ступеньку, нужно заплатить указанную на ней сумму (положительное целое число). Мальчик умеет перешагивать на следующую ступеньку, либо перепрыгивать через ступеньку. Требуется узнать, какая наименьшая сумма понадобится мальчику, чтобы добраться до верхней ступеньки. На последнюю ступеньку наступать обязательно
9,5,3,5,2,4,5,3,7,8,3,7,1,9,10,1,1,10,10,7,10,3,2,6,7,2,2,10,3,8
77