Learning Platform
Урок 02.02 · 15 мин
Начальный
Stringsf-stringsinputType conversion

От чисел к тексту

В прошлом уроке мы считали числа и выводили результат. Но настоящие программы общаются с человеком словами: «Привет, Анна», «Итого: 300 рублей», «Сколько вам лет?». Для этого нужны строки — текст. А чтобы программа умела что-то спрашивать, есть функция input(). В этом уроке мы соединим то и другое и сделаем первый маленький диалог.

Если вы вышли из REPL — снова откройте его командой python3.

Что такое строка

Строка — это текст в кавычках. Кавычки могут быть двойные или одинарные, Python не различает их:

>>> name = "Анна"
>>> greeting = 'Привет'
>>> name
'Анна'

Кавычки нужны именно для того, чтобы отличить текст от кода. Без кавычек Анна Python принял бы за имя переменной и стал бы её искать (и не нашёл бы). А "Анна" в кавычках — это просто буквы, набор символов, с которым Python не пытается ничего делать, кроме как хранить и показывать. Если внутри текста нужны сами кавычки, удобно взять внешние кавычки другого вида: 'Он сказал "привет"'.

У строки есть длина — сколько в ней символов. Узнать её можно функцией len():

>>> len("привет")
6
>>> len("")
0

Пустые кавычки "" — это тоже строка, просто без единого символа, её длина ноль. Такая «пустая строка» часто используется как стартовое значение, к которому потом что-то добавляют.

Строки можно склеивать знаком + — это называется конкатенация:

>>> "Привет, " + "мир"
'Привет, мир'
>>> name = "Анна"
>>> "Привет, " + name
'Привет, Анна'

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

>>> "Вам лет: " + 25
TypeError: can only concatenate str (not "int") to str

Python говорит прямым текстом: к строке можно приклеить только строку, а не int. Эту ошибку вы будете видеть часто — она означает «ты смешал текст и число». Как это лечится, увидим через минуту.

f-строки — текст со вставками

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

>>> name = "Анна"
>>> age = 25
>>> f"Привет, {name}! Тебе {age} лет."
'Привет, Анна! Тебе 25 лет.'

Python берёт всё, что внутри фигурных скобок, вычисляет и подставляет прямо в текст. Числа подставляются без всяких ошибок — это и есть главное удобство:

>>> price = 100
>>> quantity = 3
>>> print(f"Итого: {price * quantity} рублей")
Итого: 300 рублей

Внутри скобок может быть не только имя переменной, но и любое выражение — например, арифметика price * quantity. Сравните это с громоздким print("Итого:", price * quantity, "рублей") из прошлого урока — f-строка читается куда понятнее. С этого момента для вывода с подстановками мы используем именно f-строки.

TIP

Запомнить просто: буква f перед кавычкой — «format», то есть «подставь сюда значения». Без f фигурные скобки останутся обычным текстом и ничего не подставится.

input() — спросить пользователя

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

>>> name = input("Как тебя зовут? ")
Как тебя зовут? Анна
>>> print(f"Привет, {name}!")
Привет, Анна!

Здесь Анна — то, что набрал пользователь. Программа сохранила это в name и поздоровалась.

Есть один момент, на котором спотыкаются все новички: input() всегда возвращает строку, даже если вы ввели число. Для Python "25" (текст) и 25 (число) — разные вещи. Посмотрите, что выйдет, если попытаться посчитать на «числе», полученном из input:

>>> age = input("Сколько тебе лет? ")
Сколько тебе лет? 25
>>> age + 1
TypeError: can only concatenate str (not "int") to str

Снова та же ошибка! Python воспринял 25 как текст "25", а к тексту нельзя прибавить число. Чтобы превратить текст в число, его нужно явно сконвертировать функцией int() (для целого) или float() (для дробного):

>>> age = input("Сколько тебе лет? ")
Сколько тебе лет? 25
>>> age = int(age)
>>> age + 1
26

Часто это пишут в одну строку — сразу оборачивают input(...) в int(...):

>>> age = int(input("Сколько тебе лет? "))
Сколько тебе лет? 25
>>> print(f"Через год тебе будет {age + 1}")
Через год тебе будет 26

Правило, которое спасёт вам много нервов: ввели число — не забудьте int() или float(), иначе оно останется текстом.

Как выбрать между int() и float()? Если значение по смыслу целое (возраст, количество, год) — берите int(). Если оно может быть дробным (цена, рост, средний балл) — берите float(). Конвертация сработает только если в строке действительно записано число: int("25") даёт 25, а int("привет") упадёт с ошибкой ValueError — Python не сможет превратить буквы в число. Пока что вводите числа аккуратно, а корректную обработку «кривого» ввода мы разберём позже, когда познакомимся с условиями и исключениями.

Попробуй сам

Откройте REPL и соберите диалог пошагово. Сначала просто имя:

>>> name = input("Имя: ")
Имя: Иван
>>> city = input("Город: ")
Город: Москва
>>> print(f"{name} из города {city}")
Иван из города Москва

Теперь — с числом и арифметикой. Спросите год рождения и посчитайте возраст. Не забудьте int():

>>> year = int(input("Год рождения: "))
Год рождения: 1998
>>> print(f"Тебе примерно {2026 - year} лет")
Тебе примерно 28 лет

Проверка, что вы поняли главное: если убрать int() вокруг input в примере выше — что произойдёт? (Ответ: 2026 - year упадёт с TypeError, потому что year останется строкой, а из числа нельзя вычесть текст.)

В следующем уроке мы возьмём всё это и сложим в настоящий файл-скрипт, который запускается командой python3 и делает что-то полезное.

Проверка знанийKnowledge check
Пользователь пишет `age = input("Возраст: ")` и вводит 30, а потом считает `age * 2`. Что получится и почему?
ОтветAnswer
Получится `'3030'`, а не `60`. input всегда возвращает строку, поэтому age — это текст `"30"`, а не число. Умножение строки на число повторяет её, поэтому `"30" * 2` даёт `"3030"`. Чтобы посчитать по-настоящему, нужно было написать `age = int(input("Возраст: "))`.

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

Результат: 0 из 0
Прикладной
Вопрос 1 из 3. Какая запись правильно подставит значения переменных name и age в текст?

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

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

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

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