Глава 5 · Давайте поиграем с числами!

Мини-проекты и итоги

Собираем всю главу в пяти небольших, но настоящих проектах — и подводим итоги.

Пять небольших, но настоящих проектов — каждый использует только то, что мы уже прошли в этой главе.

Проект 1: умный калькулятор

Считаем результат в зависимости от того, какой оператор выбран — +, -, * или /:

Забегаем вперёд
Здесь использована конструкция if / elif — мы разберём её подробно в главе 8. Пока достаточно прочитать её как обычный текст: «если оператор такой-то — сделай так, а если другой — иначе».
umnyj_kalkulyator.py
a, b = 12, 4
operator = "+"

if operator == "+":
    rezultat = a + b
elif operator == "-":
    rezultat = a - b
elif operator == "*":
    rezultat = a * b
elif operator == "/":
    rezultat = a / b

print(rezultat)   # 16
★ Базовая практика
Добавьте //, % и **

Расширьте калькулятор так, чтобы он умел также целочисленное деление, остаток и возведение в степень.

Проект 2: конвертер времени — версия короче

Мы уже решали эту задачу в главе 4 — через // и % по отдельности. Теперь, когда мы знаем divmod() (раздел «Деление с остатком»), можно решить её вдвое короче:

konverter_vremeni_divmod.py
total_seconds = 3725

hours, ostatok = divmod(total_seconds, 3600)
minutes, seconds = divmod(ostatok, 60)

print(f"{hours}ч {minutes}м {seconds}с")   # 1ч 2м 5с
★★ Самостоятельная задача
Challenge

Проверьте свой конвертер на 0 секунд и на 90000 секунд (больше суток).

Проект 3: лаборатория кубика

Бросаем два кубика и считаем сумму и среднее — используем random.randint() и уже знакомые операторы:

laboratoriya_kubika.py
import random

kub1 = random.randint(1, 6)
kub2 = random.randint(1, 6)
summa = kub1 + kub2
srednee = summa / 2

print(f"Кубик 1: {kub1}, кубик 2: {kub2}")
print(f"Сумма: {summa}, среднее: {srednee}")
★★ Самостоятельная задача
Дубль!

Добавьте проверку: если оба кубика выпали одинаковыми — выведите «Дубль!» (используйте == из главы 3).

Проект 4: случайный челлендж — кратные числа

Программа, которая находит все числа, кратные случайно выбранному — используем random и % вместе:

kratnye_chisla.py
import random

# случайное число, кратности которого мы ищем
kratnoe_chemu = random.randint(2, 9)
print(f"Ищем числа, кратные {kratnoe_chemu}, от 1 до 50")

chislo = 1
while chislo <= 50:
    if chislo % kratnoe_chemu == 0:
        print(chislo)
    chislo += 1
Забегаем вперёд ещё раз
Цикл while мы разберём подробно в главе 10. Здесь важно увидеть, как оператор % из этой главы находит все числа, кратные заданному: остаток от деления равен нулю именно тогда, когда число делится нацело.
★★★ Задача повышенной сложности
Свой диапазон

Измените границы поиска на 1–100 вместо 1–50.

Проект 5: геометрическая лаборатория

Собираем сразу несколько формул этой главы: расстояние между двумя точками и площадь круга такого радиуса:

geometricheskaya_laboratoriya.py
import math

tochka_a = (0, 0)
tochka_b = (3, 4)

radius = math.dist(tochka_a, tochka_b)
ploshad_kruga = math.pi * radius ** 2

print(f"Расстояние между точками: {radius}")
print(f"Площадь круга такого радиуса: {round(ploshad_kruga, 2)}")
★★★ Задача повышенной сложности
Периметр треугольника

Добавьте третью точку и посчитайте периметр треугольника, образованного всеми тремя точками, используя math.dist() трижды.

Практика: мини-проекты главы 5
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →

Финальная карта главы

Какой инструмент главы 5 мне нужен?
Нужен остаток или проверка кратности?
// и %
Нужна степень или корень?
** или math.sqrt()
Формула не помещается в одну понятную строку?
именованные промежуточные шаги
Нужна геометрия — расстояние, площадь, угол?
math.hypot() / math.dist() / math.pi
Нужна случайность для игры?
random
Нужно повторить один и тот же случайный результат?
random.seed()
Возвращайтесь к этой карте в будущих проектах — она собирает всю главу в шесть вопросов

Итоги главы

Что мы теперь умеем

  • Выражение — операнды плюс оператор; отличаем выражение от инструкции (statement).
  • Основные операторы + - * / и их геометрические модели: числовая прямая для +/-, прямоугольник для умножения.
  • //, % и divmod() — включая то, как они работают с отрицательными числами (округление к минус бесконечности).
  • **, pow() и math.pow() — и классическая ловушка -2 ** 2.
  • Сокращённые операторы присваивания, полная карта приоритета и ассоциативность (включая правоассоциативность **).
  • Перевод формул из математической записи в Python — и типичные ошибки перевода.
  • Глубокий модуль math: корни и расстояния, gcd/lcm/factorial/comb/perm, геометрия, тригонометрия, логарифмы.
  • Глубокий модуль random: псевдослучайность, randint/randrange/uniform, choice/choices/sample/shuffle, seed и random vs secrets.
  • Отладка вычислений: три типа ошибок и приём трассировки формулы через именованные шаги.

Что дальше

В главе 6 мы возьмём числа, которые теперь умеем считать, и начнём их рисовать — познакомимся с модулем turtle и нарисуем первые фигуры на экране. Координаты, углы и расстояния из этой главы там сразу пригодятся.