← Back to course

Input пользователя и конвертация типов

Input пользователя и конвертация типов

Возвращаемся к Python.

В предыдущем уроке ты изучил переменные и типы данных.

Ты научился сохранять значения вроде:

name = "Anna"
age = 25
price = 19.99
is_student = True

Очень хорошо.

Твои программы теперь могут запоминать значения.

Но есть ещё одна проблема.

Значения написаны прямо внутри кода.

Это означает, что программа всегда использует одни и те же данные.

Полезно.

Но не очень интерактивно.

Настоящая программа часто должна спрашивать информацию у пользователя.

Например:

Как тебя зовут?
Сколько тебе лет?
Сколько продуктов ты хочешь?
Какая цена?

И тут на сцену выходит input().

input() позволяет программе задавать вопросы.

Пользователь отвечает.

Python сохраняет ответ.

Потом программа может его использовать.

Внезапно программа не просто говорит.

Она слушает.

Опасное обновление.

Но полезное.

Что ты изучишь

В этом уроке ты изучишь:

К концу этого урока твои программы смогут разговаривать с пользователями.

Не умно.

Не как chatbot.

Но достаточно, чтобы задать вопрос и использовать ответ.

Маленькое взаимодействие.

Большой шаг.

Очень Python.

Что такое input()?

input() — это функция Python, которая спрашивает информацию у пользователя.

Пример:

name = input("What is your name? ")

print(f"Hello, {name}!")

Когда ты запускаешь программу, Python показывает:

What is your name?

Потом пользователь что-то вводит.

Например:

Anna

Python сохраняет "Anna" в переменной name.

После этого программа выводит:

Hello, Anna!

Очень красиво.

Очень вежливо.

Программа спросила.

Пользователь ответил.

Python запомнил.

Никто не плакал.

Отличный прогресс.

Твоя первая программа с input()

Создай файл:

input_example.py

Напиши:

name = input("What is your name? ")

print(f"Hello, {name}!")

Запусти:

python input_example.py

или:

python3 input_example.py

Ты увидишь:

What is your name?

Введи своё имя и нажми Enter.

Пример:

Viktor

Потом программа выведет:

Hello, Viktor!

Поздравляю.

Твоя программа теперь интерактивная.

Она спрашивает.

Ждёт.

Отвечает.

Очень просто.

Очень важно.

Очень “моя программа выучила базовые манеры”.

Текст внутри input()

Текст внутри input() называется prompt.

Пример:

input("What is your name? ")

Prompt — это то, что видит пользователь.

Хороший prompt:

name = input("What is your name? ")

Плохой prompt:

name = input()

Это работает, но пользователь ничего не видит.

Программа просто ждёт.

Пользователь может подумать, что программа сломалась.

И честно говоря, справедливо.

Всегда пиши понятный prompt.

Компьютеры сами себя нормально не объясняют.

Ты должен им помогать.

Как маленьким растерянным металлическим детям.

Сохранение input в переменной

Обычно input сохраняют в переменной.

Пример:

city = input("Where do you live? ")

print(f"You live in {city}.")

Если пользователь введёт:

Rome

Output:

You live in Rome.

Поток такой:

Задай вопрос.
Пользователь вводит ответ.
Сохрани ответ в переменной.
Используй переменную.

Этот шаблон очень распространён.

Ты будешь использовать его снова и снова.

Как приготовление кофе.

Только с большим количеством синтаксиса.

Несколько вопросов

Можно задать больше одного вопроса.

Пример:

name = input("What is your name? ")
city = input("Where do you live? ")
language = input("What programming language are you learning? ")

print(f"Hello, {name}!")
print(f"You live in {city}.")
print(f"You are learning {language}.")

Пример взаимодействия:

What is your name? Anna
Where do you live? Rome
What programming language are you learning? Python

Output:

Hello, Anna!
You live in Rome.
You are learning Python.

Теперь твоя программа собирает несколько частей информации.

Это уже полезно.

Маленькая форма.

Маленькое ощущение базы данных.

Но без базы данных.

Пока что.

input() всегда возвращает string

Очень важная деталь:

input() всегда возвращает string.

Даже если пользователь вводит число.

Пример:

age = input("How old are you? ")

print(type(age))

Если пользователь введёт:

25

Python сохранит это как:

"25"

Не как:

25

Output:

<class 'str'>

Это важно.

Очень важно.

Python видит input пользователя как текст.

Потому что с клавиатуры всё приходит как текст.

Python не угадывает.

Python не говорит:

Это выглядит как число, поэтому я буду творческим.

Нет.

Python говорит:

Текст.
Точно текст.
Удачи.

Очень строго.

Очень честно.

Проблема с числами из input()

Попробуй это:

age = input("How old are you? ")

next_year = age + 1

print(next_year)

Если пользователь введёт:

25

Ты можешь ожидать:

26

Но Python даст ошибку.

Почему?

Потому что age — это string.

То есть Python видит:

"25" + 1

Это текст плюс число.

Python отказывается.

И честно говоря, правильно делает.

Это как пытаться добавить банан к калькулятору.

Интересно.

Но невалидно.

Конвертация input в int

Если тебе нужно целое число, используй int().

Пример:

age_text = input("How old are you? ")
age = int(age_text)

next_year = age + 1

print(f"Next year you will be {next_year}.")

Если пользователь введёт:

25

Output:

Next year you will be 26.

Здесь:

int(age_text)

превращает string "25" в integer 25.

Теперь Python может делать математику.

Очень хорошо.

Банан из калькулятора убран.

Более короткая версия

Можно конвертировать input сразу:

age = int(input("How old are you? "))

next_year = age + 1

print(f"Next year you will be {next_year}.")

Это распространённо.

Но для начинающих длинная версия иногда понятнее:

age_text = input("How old are you? ")
age = int(age_text)

Обе версии правильные.

Используй ту, которая кажется тебе понятнее.

Понятный код лучше, чем код, который выглядит умно, но заставляет мозг выйти из здания.

Конвертация input в float

Если тебе нужно десятичное число, используй float().

Пример:

price = float(input("Product price: "))
quantity = int(input("Quantity: "))

total = price * quantity

print(f"Total: {total}")

Пример:

Product price: 19.99
Quantity: 3

Output:

Total: 59.97

Используй:

int()

для целых чисел.

Используй:

float()

для десятичных чисел.

Простое правило.

Полезное правило.

Правило, которое спасает от многих головных болей.

Десятичные числа используют точку

В Python десятичные числа используют точку:

19.99

Не запятую:

19,99

Правильный input:

19.99

Неправильный input:

19,99

Если пользователь введёт:

19,99

а программа использует float(), Python пожалуется.

Python ожидает точку.

Python не волнует, что многие страны используют запятую для цен.

Python выбрал точку.

Точка — закон.

Маленькая точка.

Большая власть.

Простая программа приветствия

Создай файл:

greeting.py

Напиши:

name = input("What is your name? ")
city = input("Where do you live? ")

print(f"Hello, {name}!")
print(f"{city} sounds like a nice place.")

Запусти её.

Пример:

What is your name? Anna
Where do you live? Rome

Output:

Hello, Anna!
Rome sounds like a nice place.

Эта программа не делает много.

Но использует настоящее взаимодействие.

Input.

Переменные.

Output.

Это полезный шаблон.

Многие большие программы — это просто этот шаблон с большим количеством шагов и кофе.

Простая программа с возрастом

Создай файл:

age_program.py

Напиши:

name = input("What is your name? ")
age = int(input("How old are you? "))

next_year = age + 1

print(f"Hello, {name}.")
print(f"Next year you will be {next_year} years old.")

Пример:

What is your name? Anna
How old are you? 25

Output:

Hello, Anna.
Next year you will be 26 years old.

Теперь твоя программа использует:

Маленькая программа.

Реальные концепции.

Очень хорошо.

Простая магазинная программа

Создай файл:

shop_input.py

Напиши:

customer_name = input("Customer name: ")
product_name = input("Product name: ")
price = float(input("Product price: "))
quantity = int(input("Quantity: "))

total = price * quantity

print("----- Receipt -----")
print(f"Customer: {customer_name}")
print(f"Product: {product_name}")
print(f"Price: {price}")
print(f"Quantity: {quantity}")
print(f"Total: {total}")

Пример взаимодействия:

Customer name: Anna
Product name: Keyboard
Product price: 70
Quantity: 2

Output:

----- Receipt -----
Customer: Anna
Product: Keyboard
Price: 70.0
Quantity: 2
Total: 140.0

Это уже намного интереснее.

Пользователь даёт данные.

Программа вычисляет результат.

Так начинается много полезных скриптов.

Не с фейерверков.

А с input.

И подозрительного количества терпения.

Делаем output чище

Иногда floats выводят больше десятичных знаков, чем нужно.

Для денег обычно нужно два знака после точки.

Используй:

print(f"Total: {total:.2f}")

Пример:

price = 19.99
quantity = 3

total = price * quantity

print(f"Total: {total:.2f}")

Output:

Total: 59.97

Часть:

:.2f

означает:

покажи это число с 2 знаками после точки

Это полезно для цен.

Очень полезно.

Потому что деньги со случайным количеством десятичных знаков выглядят как налоговый документ в нервном срыве.

Более чистая магазинная программа

Обнови shop_input.py:

customer_name = input("Customer name: ")
product_name = input("Product name: ")
price = float(input("Product price: "))
quantity = int(input("Quantity: "))

total = price * quantity

print("----- Receipt -----")
print(f"Customer: {customer_name}")
print(f"Product: {product_name}")
print(f"Price: {price:.2f}")
print(f"Quantity: {quantity}")
print(f"Total: {total:.2f}")

Теперь output выглядит чище:

----- Receipt -----
Customer: Anna
Product: Keyboard
Price: 70.00
Quantity: 2
Total: 140.00

Намного лучше.

Читаемый output имеет значение.

Программа должна не только работать.

Она ещё не должна выглядеть так, будто её собрал уставший енот.

Разве что это тема.

Обычно нет.

Типичная ошибка: забыть int()

Неправильно:

age = input("How old are you? ")

next_year = age + 1

print(next_year)

Это не работает, потому что age — текст.

Правильно:

age = int(input("How old are you? "))

next_year = age + 1

print(next_year)

Если хочешь математику, конвертируй input в число.

Запомни:

input() даёт текст.
Математике нужны числа.

Просто.

Важно.

Очень Python.

Типичная ошибка: использовать int() для десятичных чисел

Неправильно:

price = int(input("Product price: "))

Если пользователь введёт:

19.99

Python пожалуется.

Потому что int() ожидает целое число.

Используй:

price = float(input("Product price: "))

Правило:

Возраст, количество, number of items -> int
Цена, вес, температура -> float

Не всегда идеально.

Но хорошо для начинающих.

Типичная ошибка: ввести текст, когда Python ожидает число

Если программа говорит:

age = int(input("How old are you? "))

а пользователь вводит:

banana

Python упадёт с ошибкой.

Потому что:

int("banana")

не имеет смысла.

Python не может превратить banana в число.

Это не Python тяжёлый.

Это Python разумный.

Позже мы изучим, как правильно обрабатывать ошибки.

Пока вводи тот тип данных, который просит программа.

Если спрашивает возраст, не отвечай фруктом.

Обычно это ещё и хороший жизненный совет.

Типичная ошибка: не хватает пробела в prompt

Это не сломано:

name = input("What is your name?")

Но пользователь будет вводить ответ прямо после вопроса:

What is your name?Anna

Лучше:

name = input("What is your name? ")

Обрати внимание на пробел перед закрывающей кавычкой:

"? "

Так input читается лучше:

What is your name? Anna

Маленькая деталь.

Лучший опыт.

Программирование полно маленьких деталей, которые притворяются маленькими.

Типичная ошибка: не сохранить файл

Ты редактируешь код.

Запускаешь программу.

Ничего не меняется.

Почему?

Часто потому, что файл не сохранён.

Классика.

Очень классика.

Почти традиция.

Перед запуском программы сохрани файл.

Твой редактор может показывать точку или индикатор, если файл имеет несохранённые изменения.

Сохрани.

Запусти.

Проверь.

Этот ритм важен:

редактируй
сохрани
запусти

Не:

редактируй
паникуй
запусти старую версию
паникуй ещё больше

input() с пустыми ответами

Пользователь может нажать Enter, ничего не введя.

Пример:

name = input("What is your name? ")

print(f"Hello, {name}!")

Если пользователь просто нажмёт Enter, name станет пустым string:

""

Output:

Hello, !

Не очень красиво.

Но валидно.

Позже мы научимся проверять пустой input.

Пока просто знай, что такое может случиться.

Пользователи творческие.

Иногда слишком творческие.

Мини-программа: минуты в секунды

Создай файл:

minutes_to_seconds.py

Напиши:

minutes = int(input("Minutes: "))

seconds = minutes * 60

print(f"{minutes} minutes is {seconds} seconds.")

Пример:

Minutes: 5

Output:

5 minutes is 300 seconds.

Эта программа спрашивает число.

Конвертирует его.

Вычисляет.

Выводит результат.

Просто.

Полезно.

Маленький калькулятор вошёл в комнату.

Мини-программа: Celsius в Fahrenheit

Создай файл:

temperature.py

Напиши:

celsius = float(input("Temperature in Celsius: "))

fahrenheit = (celsius * 9 / 5) + 32

print(f"{celsius:.1f}°C is {fahrenheit:.1f}°F.")

Пример:

Temperature in Celsius: 20

Output:

20.0°C is 68.0°F.

Это использует:

Очень хорошая практика.

Ещё и полезно, если когда-нибудь нужно понять погоду в другой системе измерения.

Потому что человечество, очевидно, любит разнообразие.

Мини-программа: простой калькулятор

Создай файл:

calculator.py

Напиши:

first_number = float(input("First number: "))
second_number = float(input("Second number: "))

sum_result = first_number + second_number
difference = first_number - second_number
product = first_number * second_number
division = first_number / second_number

print(f"Sum: {sum_result}")
print(f"Difference: {difference}")
print(f"Product: {product}")
print(f"Division: {division}")

Пример:

First number: 10
Second number: 5

Output:

Sum: 15.0
Difference: 5.0
Product: 50.0
Division: 2.0

Это настоящий проект для начинающего.

Маленький.

Но настоящий.

Он спрашивает input.

Конвертирует input.

Выполняет вычисления.

Выводит результаты.

Это фундамент многих программ.

Просто с меньшим количеством кнопок и меньшим количеством совещаний.

Осторожно с делением на ноль

Если пользователь введёт:

0

как второе число, эта строка не сработает:

division = first_number / second_number

Потому что деление на ноль запрещено.

Python покажет ошибку:

ZeroDivisionError

Пока избегай нуля как второго числа.

Позже, когда мы изучим условия, мы исправим это правильно.

Будущий урок нас спасёт.

Пока вежливо избегаем математических взрывов.

Практика

Создай файл:

practice_input.py

Спроси пользователя про:

Потом вычисли:

birth year = current year - age

Пример:

name = input("Name: ")
city = input("City: ")
favorite_language = input("Favorite programming language: ")
age = int(input("Age: "))
current_year = int(input("Current year: "))

birth_year = current_year - age

print(f"Hello, {name}!")
print(f"You live in {city}.")
print(f"You like {favorite_language}.")
print(f"You were born around {birth_year}.")

Запусти.

Измени ответы.

Запусти снова.

Программа должна адаптироваться к input пользователя.

В этом весь смысл.

Тот же код.

Другие данные.

Другой output.

Красиво.

Мини-задание

Создай файл:

order_total.py

Программа должна спросить:

Потом вычисли:

subtotal = product price * quantity
total = subtotal + shipping cost

Выведи итог так:

----- Order Summary -----
Customer: Anna
Product: Keyboard
Price: 70.00
Quantity: 2
Subtotal: 140.00
Shipping: 5.00
Total: 145.00

Пример решения:

customer_name = input("Customer name: ")
product_name = input("Product name: ")
price = float(input("Product price: "))
quantity = int(input("Quantity: "))
shipping = float(input("Shipping cost: "))

subtotal = price * quantity
total = subtotal + shipping

print("----- Order Summary -----")
print(f"Customer: {customer_name}")
print(f"Product: {product_name}")
print(f"Price: {price:.2f}")
print(f"Quantity: {quantity}")
print(f"Subtotal: {subtotal:.2f}")
print(f"Shipping: {shipping:.2f}")
print(f"Total: {total:.2f}")

Когда заработает, измени значения.

Попробуй разные продукты.

Попробуй разное количество.

Попробуй десятичные цены.

Но не вводи banana там, где Python ожидает число.

Python ещё не готов к фруктовой коммерции.

Checklist для начинающих

Когда твоя input-программа не работает, проверь:

Я сохранил файл?
Я запускаю правильный файл?
Я закрыл все скобки?
Я закрыл все кавычки?
Я конвертировал числовой input через int() или float()?
Я ввёл число, когда программа ожидала число?
Я использовал точку для десятичных чисел?
Я не делил на ноль?
Я правильно написал названия переменных?

Большинство ошибок маленькие.

Маленькая не значит безопасная.

Одна незакрытая кавычка может остановить всю программу.

Очень драматично.

Очень обучающе.

Очень Python.

Итог

Сегодня ты изучил:

Это большой шаг.

Твои программы теперь интерактивные.

Они могут задавать вопросы.

Могут использовать ответы.

Могут считать результаты на основе данных пользователя.

Так начинается много полезных скриптов.

Не огромных.

Не fancy.

А полезных.

А полезное — это сила.

Следующий урок

В следующем уроке мы изучим условия.

Ты научишься принимать решения с помощью:

if
else
elif

Твоя программа сможет задавать вопросы вроде:

Пользователь достаточно взрослый?
Пароль правильный?
Число положительное или отрицательное?
Продукт доступен?

Именно тут программы начинают делать выбор.

Очень важно.

Очень мощно.

Немного опасно.

Идеально.