Читать книгу «MINI DOOM Современный Python через игру Том 1 Учимся держать оружие» онлайн полностью📖 — Алексей Примак — MyBook.

Какие бывают типы

У каждой коробки на складе есть тип — что именно в ней лежит. От типа зависит, что с значением можно делать: числа складывают, строки склеивают, а сложить число со строкой, как мы видели в главе 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 оператор / всегда честный.

Конец ознакомительного фрагмента.

1
...