Переменные и типы данных

Программа робота работает не только с командами, но и с данными: расстоянием до стены, напряжением аккумулятора, названием режима и признаком аварийной остановки. Чтобы не подставлять значения вручную в каждую строку, им дают имена. В Python такое имя связывается с объектом, а объект хранит значение и имеет определённый тип.
Переменная в Python — это имя, связанное со значением. Оператор = создаёт или меняет эту связь. Тип принадлежит объекту: целые числа имеют тип int, дробные — float, текст — str, а логические значения True и False — bool. Функции int(), float() и str() создают значения нужного типа из подходящих данных.
Зачем это нужно
Пусть робот получил расстояние 34 сантиметра. Само число не объясняет, что оно означает: расстояние, скорость двигателя, номер вывода или количество измерений. Имя distance_cm добавляет назначение и единицу:
distance_cm = 34
print(distance_cm)
Теперь значение можно вывести, сравнить с порогом и заменить новым измерением. При этом порог остановки, команда привода и состояние кнопки хранятся отдельно:
stop_distance_cm = 20
motor_command = 120
button_pressed = False
Правильный выбор типа влияет на доступные операции. Числа можно складывать, строку — соединять с другой строкой, а bool удобно использовать как результат проверки. Если текст "34" принять за число без преобразования, арифметика либо даст другой смысл, либо завершится исключением.
Главная идея
Полезная модель выглядит так:
имя переменной -> объект -> значение и тип
В выражении справа от = Python сначала вычисляет результат, затем связывает с ним имя слева:
sample_count = 3
sample_count = sample_count + 1
print(sample_count)
После второй строки имя sample_count связано со значением 4. Знак = здесь не означает математическое равенство навсегда. Это инструкция присваивания. Для сравнения на равенство позже используется ==.
У каждого объекта есть тип. Он определяет допустимые операции и поведение значения. Узнать тип в учебном эксперименте можно функцией type():
distance_cm = 34
battery_voltage_v = 7.4
robot_name = "Reversi rover"
emergency_stop = False
print(type(distance_cm))
print(type(battery_voltage_v))
print(type(robot_name))
print(type(emergency_stop))
Функция type() полезна для проверки гипотезы, но не должна заменять понятную модель данных. Лучше заранее решить, что обозначает переменная и какие операции ей нужны.
Основные типы первого проекта
| Тип | Пример | Что хранить в роботе | Особенность |
|---|---|---|---|
int | 42 | счётчик, номер режима, целое измерение | целые числа Python имеют произвольную точность |
float | 7.4 | напряжение, коэффициент, дробное измерение | многие десятичные дроби представлены приближённо |
str | "forward" | название режима, сообщение, строку из терминала | строка — неизменяемая последовательность символов |
bool | True | нажатие кнопки, наличие препятствия, готовность | принимает два логических значения: True и False |
None | None | явное отсутствие результата или ещё не полученное измерение | это отдельный объект, а не число 0 и не пустая строка |
В одном проекте лучше последовательно выбирать единицы. Имена distance_cm, period_ms и voltage_v помогают заметить ошибку при ревью, хотя сам Python не проверяет физические единицы.
None — не «любая пустота»Значение None используют, когда результат отсутствует. Оно отличается от 0, потому что нулевое расстояние может быть настоящим измерением; отличается от False, потому что логическая проверка могла дать корректный отрицательный ответ.
Целые и дробные числа
С int и float доступны обычные арифметические операции:
left_ticks = 120
right_ticks = 116
average_ticks = (left_ticks + right_ticks) / 2
difference = left_ticks - right_ticks
print("Среднее:", average_ticks)
print("Разница:", difference)
Оператор / всегда возвращает дробный результат типа float. Целочисленное деление // округляет вниз, а % возвращает остаток:
samples = 17
full_groups = samples // 4
remaining_samples = samples % 4
print(full_groups)
print(remaining_samples)
Не заменяйте / на // только ради типа int. Сначала решите, должен ли алгоритм сохранять дробную часть. Среднее двух показаний 5 и 6 равно 5.5, а целочисленный результат потеряет половину единицы.
Дробные значения хранятся в конечном двоичном представлении. Поэтому результат может выглядеть неожиданно:
result = 0.1 + 0.2
print(result)
Это не случайная поломка Python. Числа 0.1 и 0.2 нельзя точно представить конечной двоичной дробью. Для управления роботом не следует проверять шумное измерение на точное совпадение с десятичным эталоном. Порог или допустимое отклонение выбирают по требованиям и характеристикам измерения.
Строки и понятный вывод
Строки записывают в одинарных или двойных кавычках:
robot_name = "Reversi rover"
motion_mode = "forward"
print(robot_name)
print(motion_mode)
Цифры в кавычках остаются текстом. "42" — строка, а 42 — целое число. Операция + для двух строк соединяет их, но для чисел складывает:
print("12" + "3")
print(12 + 3)
Чтобы собрать сообщение из текста и значений, удобно использовать форматированную строку, или f-строку:
distance_cm = 34
source = "model"
print(f"Источник: {source}; расстояние: {distance_cm} см")
Выражения в фигурных скобках вычисляются при создании строки. Единица измерения остаётся рядом со значением, поэтому журнал испытаний легче читать.
Строки неизменяемы: нельзя заменить один символ внутри уже существующей строки. Операции со строками создают новый объект, после чего имя можно связать с ним.
Логические значения
bool удобно хранит ответ «да» или «нет». Логическое значение часто получается после сравнения:
distance_cm = 18.5
stop_distance_cm = 20.0
obstacle_detected = distance_cm < stop_distance_cm
print(obstacle_detected)
Здесь имя obstacle_detected связано с True, потому что 18.5 меньше 20.0. Следующий урок покажет, как по этому значению выбирать команду двигателя.
Записывайте True и False с заглавной буквы. Варианты true и false не являются этими встроенными константами Python.
Преобразование bool() проверяет истинность объекта. Пустая строка даёт False, непустая — True. Поэтому запись bool("False") неожиданно даёт True: слово внутри не разбирается как логическая команда, строка просто не пуста. Пользовательский текст "да" или "нет" нужно разбирать по явно заданным правилам.
Имена и повторное присваивание
Имя может содержать буквы, цифры и знак подчёркивания, но не начинается с цифры. В учебных и переносимых проектах используйте английские имена в стиле snake_case:
front_distance_cm = 42
left_motor_command = 120
sensor_is_ready = True
Такой стиль соответствует рекомендации PEP 8 для функций и переменных. Константы по соглашению записывают заглавными буквами:
STOP_DISTANCE_CM = 20
MAX_MOTOR_COMMAND = 255
Python не запрещает позже присвоить этим именам другое значение: верхний регистр — договорённость между разработчиками, а не защита на уровне языка.
Одно имя можно связать с объектом другого типа:
sensor_value = 42
sensor_value = "нет данных"
print(sensor_value)
Язык это разрешает, но в инженерном коде такая смена смысла усложняет проверку. Чище использовать два имени, например distance_cm и sensor_status, или явно обозначить отсутствие измерения через None.
Преобразование типов

Функция input() возвращает строку, даже если человек ввёл только цифры:
raw_distance = input("Расстояние, см: ")
print(type(raw_distance))
Перед арифметикой данные нужно преобразовать:
raw_distance = "42"
distance_cm = int(raw_distance)
distance_m = distance_cm / 100
print(distance_cm)
print(distance_m)
| Преобразование | Пример результата | Когда применить |
|---|---|---|
int("42") | целое 42 | строка содержит запись целого числа |
float("7.4") | дробное 7.4 | строка содержит подходящую запись числа |
str(42) | строка "42" | число нужно превратить в текст |
bool("") | False | требуется проверить пустоту строки, а не разобрать слово |
int("7.4") не округляет строку и завершится ValueError: запись 7.4 не является целым литералом для такого преобразования. Сначала нужно решить, допустимы ли дробные данные, затем выбрать float() или отклонить ввод. Обработку исключений мы разберём позже; на этом этапе фиксируйте требуемый формат входа и проверяйте примеры отдельно.
Робототехническая модель данных
Соберём несколько типов в одном безопасном сценарии без управления настоящим мотором:
robot_name = "Reversi rover"
raw_distance_cm = "18.7"
distance_cm = float(raw_distance_cm)
stop_distance_cm = 20.0
obstacle_detected = distance_cm < stop_distance_cm
sample_count = 1
motor_command = 0
print(f"Робот: {robot_name}")
print(f"Измерение {sample_count}: {distance_cm} см")
print(f"Препятствие близко: {obstacle_detected}")
print(f"Модельная команда двигателя: {motor_command}")
Каждая переменная отвечает за один смысл:
| Имя | Тип | Назначение |
|---|---|---|
robot_name | str | название стенда |
raw_distance_cm | str | исходная строка, как будто полученная извне |
distance_cm | float | числовое измерение |
stop_distance_cm | float | порог в той же единице |
obstacle_detected | bool | результат сравнения |
sample_count | int | номер измерения |
motor_command | int | модельная команда, ещё не отправляемая приводу |
Сохранение сырого и преобразованного значения в разных именах облегчает диагностику: можно увидеть, что пришло на вход и что использовал расчёт.
Что запомнить о данных
=вычисляет правую часть и связывает результат с именем слева;- тип принадлежит объекту и определяет его операции;
intподходит для целых значений,float— для дробных,str— для текста,bool— для логического состояния;input()возвращаетstr;- преобразование типа должно соответствовать формату исходных данных;
- единицу измерения и назначение полезно отражать в имени;
- дробные вычисления могут быть приближёнными;
- смена типа у одного имени разрешена, но обычно ухудшает модель программы.
Практика
- Создайте переменные для названия робота, номера испытания, напряжения аккумулятора и готовности датчика. Выведите значение и
type()каждого объекта. - Запишите расстояние в миллиметрах как
intи вычислите сантиметры без потери дробной части. В именах укажите единицы. - Получите строку расстояния через
input(), преобразуйте её вfloatи выведите f-строкой. Проверьте отдельно корректный ввод и строку, которую нельзя преобразовать. - Рассчитайте среднее двух целых показаний. Сравните
/и//и объясните, какой оператор соответствует вашей задаче. - Проверьте результаты
bool(""),bool("False"),bool(0)иbool(1). Сформулируйте, почемуbool()нельзя использовать как готовый разбор слов"да"и"нет". - Смоделируйте расстояние, порог и логическое значение
obstacle_detected. Не добавляйте готовое управление мотором: выбор действия относится к уроку об условиях. - Придумайте два плохих имени без единицы или назначения и замените их на имена в стиле
snake_case.
Проверьте себя
- Что делает оператор присваивания
=? - Чем
"42"отличается от42? - Какой тип возвращает обычное деление
/? - Почему результат
0.1 + 0.2может не совпасть с точной десятичной записью? - Что возвращает
input()? - Почему
bool("False")даётTrue? - Чем
Noneотличается от нулевого измерения? - Зачем записывать единицу в имени
distance_cm?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
| Термин | Значение |
|---|---|
| переменная | имя, связанное с объектом |
| объект | значение Python с определёнными типом и поведением |
| тип данных | набор правил хранения и допустимых операций объекта |
| присваивание | вычисление правой части и связывание результата с именем |
int | тип целых чисел |
float | тип дробных чисел с конечной двоичной точностью |
str | тип текстовых строк |
bool | логический тип со значениями True и False |
None | объект, обозначающий отсутствие значения |
| преобразование типа | создание значения нужного типа из подходящего исходного объекта |
| f-строка | строка, в которую подставляются результаты выражений в фигурных скобках |
snake_case | стиль имени из строчных слов, разделённых подчёркиваниями |
Связанные темы
- Первая программа — запуск скрипта и диагностический вывод.
- Условия — выбор действия по логическому значению.
- Циклы — повторное обновление измерений и счётчиков.
- Работа с файлами — чтение строк и сохранение результатов измерений.
Источники
- Python reference: Data model — Objects, values and types
- Python reference: Assignment statements
- Python documentation: Built-in Types
- Python tutorial: Numbers and Text
- Python documentation: Built-in Functions
- Python tutorial: Formatted string literals
- Python tutorial: Floating-Point Arithmetic — Issues and Limitations
- PEP 8: Naming Conventions