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

Возвращаемся к Python.
В предыдущем уроке ты изучил переменные и типы данных.
Ты научился сохранять значения вроде:
name = "Anna"
age = 25
price = 19.99
is_student = True
Очень хорошо.
Твои программы теперь могут запоминать значения.
Но есть ещё одна проблема.
Значения написаны прямо внутри кода.
Это означает, что программа всегда использует одни и те же данные.
Полезно.
Но не очень интерактивно.
Настоящая программа часто должна спрашивать информацию у пользователя.
Например:
Как тебя зовут?
Сколько тебе лет?
Сколько продуктов ты хочешь?
Какая цена?
И тут на сцену выходит input().
input() позволяет программе задавать вопросы.
Пользователь отвечает.
Python сохраняет ответ.
Потом программа может его использовать.
Внезапно программа не просто говорит.
Она слушает.
Опасное обновление.
Но полезное.
Что ты изучишь
В этом уроке ты изучишь:
- что делает
input(); - как спрашивать текст у пользователя;
- как сохранять input в переменных;
- почему
input()всегда возвращает string; - как превращать текст в числа;
- как использовать
int(); - как использовать
float(); - как соединять
input()с f-strings; - как строить простые интерактивные программы;
- типичные ошибки начинающих;
- как создать маленький калькулятор.
К концу этого урока твои программы смогут разговаривать с пользователями.
Не умно.
Не как 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.
Теперь твоя программа использует:
- текстовый input;
- числовой input;
- конвертацию типов;
- вычисление;
- output через f-string.
Маленькая программа.
Реальные концепции.
Очень хорошо.
Простая магазинная программа
Создай файл:
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.
Это использует:
float();- математику;
- форматирование через f-string.
Очень хорошая практика.
Ещё и полезно, если когда-нибудь нужно понять погоду в другой системе измерения.
Потому что человечество, очевидно, любит разнообразие.
Мини-программа: простой калькулятор
Создай файл:
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.
Итог
Сегодня ты изучил:
input()спрашивает информацию у пользователя;- текст внутри
input()— это prompt; - input пользователя обычно сохраняют в переменной;
input()всегда возвращает string;- числа из input нужно конвертировать перед математикой;
int()превращает текст в целое число;float()превращает текст в десятичное число;- f-strings помогают понятно выводить данные пользователя;
:.2fформатирует числа с двумя знаками после точки;- интерактивные программы спрашивают, сохраняют, считают и отвечают;
- ввод неправильного типа данных может вызвать ошибки;
- деление на ноль вызывает
ZeroDivisionError.
Это большой шаг.
Твои программы теперь интерактивные.
Они могут задавать вопросы.
Могут использовать ответы.
Могут считать результаты на основе данных пользователя.
Так начинается много полезных скриптов.
Не огромных.
Не fancy.
А полезных.
А полезное — это сила.
Следующий урок
В следующем уроке мы изучим условия.
Ты научишься принимать решения с помощью:
if
else
elif
Твоя программа сможет задавать вопросы вроде:
Пользователь достаточно взрослый?
Пароль правильный?
Число положительное или отрицательное?
Продукт доступен?
Именно тут программы начинают делать выбор.
Очень важно.
Очень мощно.
Немного опасно.
Идеально.