Skip to content

Глава 1. Переменные и ввод данных

Задача главы: научиться собирать данные ученика с клавиатуры, приводить их к нужному типу и собирать из них готовую текстовую карточку результата.


1.1 Переменные и четыре базовых типа

Зачем это нужно. Переменная — поименованная ячейка, в которой аналитик держит один факт об ученике: ФИО, первичный балл, средний балл, отметку о сдаче. Python определяет тип сам, в момент присваивания, но от типа зависит, что с данными можно делать: числа складывать, строки — склеивать.

// PYTHON_EXECUTOR (Pyodide Wasm)

Что запомнить про типы в работе с отчётами:

ТипЧто хранитТипичная колонка выгрузки
strтекстФИО, класс, предмет, комментарий
intцелое числопервичный балл, число сдавших
floatдробное числосредний балл, процент выполнения
boolда/нет«допущен», «сдал», «есть пересдача»

Правило стиля. Имена переменных — строго snake_case: test_score, а не TestScore или testScore. Имя должно называть данные (score_project), а не их тип (number_1).


1.2 Вывод данных: print() и f-строки

Зачем это нужно. Итог работы аналитика — читаемая строка отчёта. Функция print() выводит её в консоль, а f-строка подставляет значения переменных прямо в текст: перед кавычкой ставится f, переменные пишутся в фигурных скобках {}.

// PYTHON_EXECUTOR (Pyodide Wasm)

Внутри {} можно считать прямо на месте — это удобно для процентов:

// PYTHON_EXECUTOR (Pyodide Wasm)

⚠️ Подводный камень

Соблазн собрать строку через + заканчивается ошибкой: Python не складывает текст с числом.

// PYTHON_EXECUTOR (Pyodide Wasm)
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-строку.

Правильный паттерн

// PYTHON_EXECUTOR (Pyodide Wasm)

Пояснение логики: f-строка сама вызывает преобразование значения в текст на этапе подстановки, поэтому тип переменной значения не имеет. Это же правило действует для всей книги: конкатенация через + — почти всегда признак, что нужна f-строка.


1.3 Ввод данных: input() и приведение типов

Зачем это нужно. Функция input() останавливает программу и ждёт, пока оператор введёт значение с клавиатуры. Так собирают данные, которых ещё нет в выгрузке: результаты пересдачи, ручные корректировки, параметры отчёта.

// PYTHON_EXECUTOR (Pyodide Wasm)

⚠️ Подводный камень

input() всегда возвращает str, даже если оператор ввёл цифры. Самое опасное здесь то, что ошибки не будет: Python молча склеит строки вместо сложения, и в отчёт уйдёт неверное число.

// PYTHON_EXECUTOR (Pyodide Wasm)
ОшибкаЧто значит для PythonЧеловеческий перевод
— (тихая ошибка)«Обе переменные — str, значит + это конкатенация»Забыли обернуть input() в int(). Traceback не появится, но данные в отчёте будут неверными.

Правильный паттерн

// PYTHON_EXECUTOR (Pyodide Wasm)

Пояснение логики: 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«Нарушена логика отступов»Лишний или пропущенный пробел в начале строки. Пригодится с главы про условия и циклы.

Два самых частых случая целиком:

// PYTHON_EXECUTOR (Pyodide Wasm)
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'
// PYTHON_EXECUTOR (Pyodide Wasm)
Traceback (most recent call last):
File "report.py", line 2, in <module>
print(test_scor)
NameError: name 'test_scor' is not defined

Мини-кейс: бланк первичной проверки

Задача: собрать скрипт для оператора, который принимает ФИО ученика и баллы за две части работы, считает сумму и печатает готовую карточку.

// PYTHON_EXECUTOR (Pyodide Wasm)

Пример работы при вводе Петров Игорь, 45, 40:

--- КАРТОЧКА УЧЕНИКА ---
Ученик: Петров Игорь
Тест: 45 | Проект: 40
Суммарный балл: 85 из 100
Процент выполнения: 85.0%

Что получилось: три блока, которые повторятся во всех следующих главах — сбор данных, расчёты, вывод. ФИО осталось строкой, баллы приведены к int прямо на вводе, поэтому сложение сработало как арифметика. Итоговый текст собран f-строками — ни одного + для склейки.


Чек-лист главы

  • Называю четыре базовых типа и понимаю, какой подходит для балла, ФИО, среднего и флага сдачи
  • Пишу имена переменных в snake_case и по смыслу данных
  • Собираю строки отчёта f-строками, а не сложением через +
  • Помню, что input() всегда возвращает str, и привожу тип в момент ввода
  • Отличаю int() от float() по характеру показателя
  • Читаю traceback снизу вверх и узнаю TypeError, ValueError, NameError
  • Могу написать скрипт по схеме «сбор данных → расчёты → вывод отчёта»

Дальше: Числа и вычисления