Глава 1. Переменные и ввод данных
Задача главы: научиться собирать данные ученика с клавиатуры, приводить их к нужному типу и собирать из них готовую текстовую карточку результата.
1.1 Переменные и четыре базовых типа
Зачем это нужно. Переменная — поименованная ячейка, в которой аналитик держит один факт об ученике: ФИО, первичный балл, средний балл, отметку о сдаче. Python определяет тип сам, в момент присваивания, но от типа зависит, что с данными можно делать: числа складывать, строки — склеивать.
Что запомнить про типы в работе с отчётами:
| Тип | Что хранит | Типичная колонка выгрузки |
|---|---|---|
str | текст | ФИО, класс, предмет, комментарий |
int | целое число | первичный балл, число сдавших |
float | дробное число | средний балл, процент выполнения |
bool | да/нет | «допущен», «сдал», «есть пересдача» |
Правило стиля. Имена переменных — строго
snake_case:test_score, а неTestScoreилиtestScore. Имя должно называть данные (score_project), а не их тип (number_1).
1.2 Вывод данных: print() и f-строки
Зачем это нужно. Итог работы аналитика — читаемая строка отчёта. Функция print() выводит её в консоль, а f-строка подставляет значения переменных прямо в текст: перед кавычкой ставится f, переменные пишутся в фигурных скобках {}.
Внутри {} можно считать прямо на месте — это удобно для процентов:
⚠️ Подводный камень
Соблазн собрать строку через + заканчивается ошибкой: Python не складывает текст с числом.
Traceback (most recent call last): File "report.py", line 2, in <module> print('Балл: ' + score)TypeError: can only concatenate str (not "int") to str| Ошибка | Что значит для Python | Человеческий перевод |
|---|---|---|
TypeError | «Операция + для str и int не определена» | Пытаетесь склеить текст с числом. Не превращайте число в строку вручную — используйте f-строку. |
Правильный паттерн
Пояснение логики: f-строка сама вызывает преобразование значения в текст на этапе подстановки, поэтому тип переменной значения не имеет. Это же правило действует для всей книги: конкатенация через + — почти всегда признак, что нужна f-строка.
1.3 Ввод данных: input() и приведение типов
Зачем это нужно. Функция input() останавливает программу и ждёт, пока оператор введёт значение с клавиатуры. Так собирают данные, которых ещё нет в выгрузке: результаты пересдачи, ручные корректировки, параметры отчёта.
⚠️ Подводный камень
input() всегда возвращает str, даже если оператор ввёл цифры. Самое опасное здесь то, что ошибки не будет: Python молча склеит строки вместо сложения, и в отчёт уйдёт неверное число.
| Ошибка | Что значит для Python | Человеческий перевод |
|---|---|---|
| — (тихая ошибка) | «Обе переменные — str, значит + это конкатенация» | Забыли обернуть input() в int(). Traceback не появится, но данные в отчёте будут неверными. |
Правильный паттерн
Пояснение логики: int() и float() создают из текста новое числовое значение, и дальше + работает как арифметическое сложение. Правило простое: приводите тип в момент ввода, а не перед расчётом — тогда по коду сразу видно, где число, а где текст.
Что выбрать:
int()— первичные баллы, количество, годы: значения без дробной части;float()— средний балл, проценты, часы;- ничего не делать — ФИО, класс, предмет: они и должны остаться
str.
1.4 Мини-словарик ошибок первой главы
Traceback читается снизу вверх: последняя строка — тип и суть ошибки, строки выше — где именно она произошла.
| Ошибка | Что значит для Python | Человеческий перевод |
|---|---|---|
SyntaxError | «Я не понимаю структуру этой строки» | Забыли двоеточие, не закрыли скобку или кавычку. Смотрите на строку выше указанной. |
NameError | «Я не знаю такого имени» | Опечатка в имени переменной (test_scor вместо test_score) или переменная ещё не создана выше по коду. |
TypeError | «Эти типы не умеют так взаимодействовать» | Складываете строку с числом. Замените + на f-строку. |
ValueError | «Тип правильный, но значение не подходит» | int('восемь') или int('8.5'): внутри строки не целое число. Для дробей берите float('8.5'). |
IndentationError | «Нарушена логика отступов» | Лишний или пропущенный пробел в начале строки. Пригодится с главы про условия и циклы. |
Два самых частых случая целиком:
Traceback (most recent call last): File "report.py", line 1, in <module> part_a = int(input('Баллы за часть А: '))ValueError: invalid literal for int() with base 10: '8.5'Traceback (most recent call last): File "report.py", line 2, in <module> print(test_scor)NameError: name 'test_scor' is not definedМини-кейс: бланк первичной проверки
Задача: собрать скрипт для оператора, который принимает ФИО ученика и баллы за две части работы, считает сумму и печатает готовую карточку.
Пример работы при вводе Петров Игорь, 45, 40:
--- КАРТОЧКА УЧЕНИКА ---Ученик: Петров ИгорьТест: 45 | Проект: 40Суммарный балл: 85 из 100Процент выполнения: 85.0%Что получилось: три блока, которые повторятся во всех следующих главах — сбор данных, расчёты, вывод. ФИО осталось строкой, баллы приведены к int прямо на вводе, поэтому сложение сработало как арифметика. Итоговый текст собран f-строками — ни одного + для склейки.
Чек-лист главы
- Называю четыре базовых типа и понимаю, какой подходит для балла, ФИО, среднего и флага сдачи
- Пишу имена переменных в
snake_caseи по смыслу данных - Собираю строки отчёта f-строками, а не сложением через
+ - Помню, что
input()всегда возвращаетstr, и привожу тип в момент ввода - Отличаю
int()отfloat()по характеру показателя - Читаю traceback снизу вверх и узнаю
TypeError,ValueError,NameError - Могу написать скрипт по схеме «сбор данных → расчёты → вывод отчёта»
Дальше: Числа и вычисления