Learning Platform
Урок 02.03 · 16 мин
Начальный
Scriptspython3Filesinputf-strings

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

NOTE

Если при запуске вы видите 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 — сверхбыстрый линтер и форматтер, который ловит ошибки и приводит код в порядок. Это инструменты, с которыми работают настоящие команды. Но фундамент — умение писать и запускать код — у вас теперь есть, и это главное.

Проверка знанийKnowledge check
В чём ключевая разница между запуском кода в REPL (`python3`) и запуском скрипта (`python3 tips.py`) с точки зрения вывода результатов?
ОтветAnswer
В REPL каждое выражение печатает свой результат само, без print — это режим «вопрос-ответ». В скрипте Python выполняет строки молча, сверху вниз, и показывает только то, что вы явно вывели через print(). Поэтому в файле-программе без print() вы не увидите промежуточные значения. Плюс скрипт сохраняется в файл и его можно запускать повторно, а код в REPL пропадает при выходе.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 3. Файл tips.py лежит в папке my-python. Какой командой его запустить, находясь в этой папке?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3