REPL — это черновик, а скрипт — это программа
В прошлых уроках мы всё делали в REPL: набрал строку, увидел ответ. Это отлично для проверки идей, но у REPL есть проблема — как только вы его закрыли, весь код пропал. Нельзя сохранить, нельзя дать другу, нельзя запустить завтра ещё раз. Настоящие программы живут в файлах.
Файл с кодом Python — это обычный текстовый файл с расширением .py. Вы пишете в него весь код сверху вниз, сохраняете, а потом запускаете командой python3 имя_файла.py. Python прочитает файл и выполнит строки по порядку, сверху вниз — без приглашений >>>, без вывода промежуточных результатов. Покажете что-то через print() — увидите; не покажете — программа сделает всё молча.
В этом уроке мы напишем маленький, но настоящий скрипт: калькулятор чаевых. Он спросит сумму счёта, спросит процент чаевых и посчитает, сколько добавить и сколько заплатить итого.
Создаём файл
Создайте папку для экспериментов и в ней файл tips.py. Сделать это можно в любом редакторе кода, или прямо из терминала:
mkdir my-python
cd my-python
touch tips.py
Откройте tips.py в редакторе и напишите первую версию — просто чтобы убедиться, что файл запускается:
print("Калькулятор чаевых")
Сохраните файл и запустите его из терминала (вы должны находиться в той же папке):
python3 tips.py
Калькулятор чаевых
Если вы видите эту строку — поздравляю, вы запустили свою первую программу из файла. Дальше только наполняем её содержимым.
Собираем калькулятор
Теперь добавим логику. Нам нужно: спросить сумму счёта, спросить процент чаевых, посчитать сумму чаевых и итог. Всё это мы уже умеем по прошлым урокам — input(), int()/float(), арифметика и f-строки. Напишите в tips.py целиком:
print("Калькулятор чаевых")
bill = float(input("Сумма счёта: "))
percent = float(input("Процент чаевых: "))
tip = bill * percent / 100
total = bill + tip
print(f"Чаевые: {tip} руб.")
print(f"Итого к оплате: {total} руб.")
Разберём построчно, тут нет ничего нового — только сборка из знакомых деталей:
float(input(...))— спрашиваем число и сразу превращаем текст в дробное число (сумма счёта может быть350.50, поэтомуfloat, а неint).tip = bill * percent / 100— обычная арифметика: процент от суммы.total = bill + tip— итог.- две
print(f"...")— выводим результат с подстановкой через f-строки.
Запускаем:
python3 tips.py
Калькулятор чаевых
Сумма счёта: 1000
Процент чаевых: 15
Чаевые: 150.0 руб.
Итого к оплате: 1150.0 руб.
Работает! Числа 1000 и 15 ввёл пользователь, остальное посчитала программа. Обратите внимание: строки выполнились ровно в том порядке, как написаны — сначала заголовок, потом два вопроса, потом два ответа.
Если при запуске вы видите python3: can't open file 'tips.py' — значит терминал находится не в той папке. Командой cd my-python перейдите туда, где лежит файл, и запустите снова. Имя файла после python3 — это путь к файлу относительно текущей папки.
Чуть-чуть красоты
Сейчас выводится 150.0 — с лишним нулём. Округлить до двух знаков после запятой можно прямо в f-строке, добавив :.2f после выражения. Это «формат: дробное число с двумя знаками». Поменяйте две последние строки:
print(f"Чаевые: {tip:.2f} руб.")
print(f"Итого к оплате: {total:.2f} руб.")
Чаевые: 150.00 руб.
Итого к оплате: 1150.00 руб.
Не запоминайте все варианты форматирования наизусть — просто знайте, что внутри f-строки после двоеточия можно управлять видом числа. Подробно к форматированию вернёмся в модуле про ядро Python.
Попробуй сам
Расширьте скрипт: пусть он ещё спрашивает, на сколько человек делить счёт, и считает долю каждого. Добавьте в tips.py после расчёта total:
people = int(input("Сколько человек: "))
per_person = total / people
print(f"С каждого: {per_person:.2f} руб.")
Запустите и проверьте на счёте 1200, чаевых 10%, на 4 человек — должно выйти 330.00 с каждого. Если получилось — вы написали скрипт из десятка строк, который реально считает то, что в жизни считают на салфетке.
Подумайте: почему для числа людей мы взяли int(), а не float()? (Люди — целые, дробного человека не бывает.)
Комментарии — заметки для людей
В скрипте полезно оставлять пояснения для себя и других — что делает та или иная строка. Для этого есть комментарии: всё, что идёт после знака #, Python игнорирует и не выполняет. Это текст только для людей:
# калькулятор чаевых
bill = float(input("Сумма счёта: ")) # сумма счёта может быть дробной
percent = float(input("Процент чаевых: "))
tip = bill * percent / 100 # процент от суммы
Комментарий можно поставить на отдельной строке или в конце строки с кодом. Не нужно комментировать очевидное (x = 5 # присваиваем 5) — это шум. Хороший комментарий объясняет почему, а не дословно повторяет код. По мере роста программ комментарии и понятные имена переменных — то, что отличает читаемый код от каши.
Что дальше: мостик к модулю 2
Вы только что прошли важный рубеж: умеете писать переменные, арифметику, строки, спрашивать ввод и запускать всё это файлом. Этого уже хватает, чтобы автоматизировать мелкие расчёты. Но как только программы станут больше, появятся вопросы: какая версия Python запускается? как не захламить систему пакетами? как автоматически находить опечатки и плохой стиль в коде?
Именно об этом — следующий модуль 2 «Окружение и инструменты». Во вводном модуле мы уже один раз настроили uv и собрали первый проект — этого хватило, чтобы было на чём писать код. В модуле 2 мы разберём этот инструментарий глубоко: uv для управления версиями Python и зависимостями (вместо ручного python3) и ruff — сверхбыстрый линтер и форматтер, который ловит ошибки и приводит код в порядок. Это инструменты, с которыми работают настоящие команды. Но фундамент — умение писать и запускать код — у вас теперь есть, и это главное.