У каждой коробки на складе есть тип — что именно в ней лежит. От типа зависит, что с значением можно делать: числа складывают, строки склеивают, а сложить число со строкой, как мы видели в главе 1, нельзя. Узнать тип помогает функция type, а превратить значение одного типа в другой — функции с именами типов. Всё это в листинге 2.3.
Листинг 2.3 — Основные типы и превращения между ними
Строки 6 и 7 показывают пять типов, которые встречаются постоянно. Строка 8 — превращения: int(«42») делает из строки число, к которому можно прибавить единицу; float(«2.5») — дробное; str(7) — строку, которую можно склеить с другой строкой. В строке 9 — правило, которое пригодится в главе 3: ноль и пустая строка считаются ложью, всё остальное — правдой. Сводка — в таблице 2.1.
Таблица 2.1 — Основные типы Python
Длинные числа можно разделять подчёркиваниями: 1_000_000 — то же, что 1000000, но читается без подсчёта нулей.
В большинстве языков у целого числа есть предел. Например, в C++ обычный int заканчивается на 2 147 483 647, и если к нему прибавить единицу, число перескакивает в огромный минус — это называется переполнение. Из-за таких историй в старых играх счётчики очков внезапно становились отрицательными. В Python у int предела нет, смотри листинг 2.4.
Листинг 2.4 — Целые числа Python растут без предела
Число 2**100 — это 2 в сотой степени, две звёздочки означают возведение в степень. А 2 в десятитысячной степени содержит 3011 цифр, и Python посчитал его честно. Платим мы за это скоростью и памятью: чем больше число, тем дольше с ним работать. Для игры это не проблема, у нас числа скромные.
Со сложением, вычитанием и умножением всё как в школе: +, — и *. А вот делений в Python три, и путать их — верный способ получить баг. Листинг 2.5.
Листинг 2.5 — Обычное деление, целая часть и остаток
— / — обычное деление. Результат всегда float, даже если делится нацело: 6 / 2 даёт 3.0, а не 3.
— // — целая часть от деления: 7 // 2 даёт 3. Сколько полных обойм помещается в рюкзак.
— % — остаток от деления: 7 % 2 даёт 1. Сколько патронов останется россыпью.
— divmod(a, b) — частное и остаток одним махом: 200 секунд — это 3 минуты и 20 секунд.
Посчитаем процент убитых монстров для экрана конца уровня, как в настоящем Doom. Код — в листинге 2.6.
Листинг 2.6 — Проценты, отрезание дроби и округление
Строка 4. kills / total — обычное деление, получаем дробь, умножаем на 100 — проценты. В C++ тут ждала бы ловушка: деление целых там отбрасывает дробь, и вышло бы 0. В Python оператор / всегда честный.
О проекте
О подписке
Другие проекты