← 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

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

Користувач достатньо дорослий?
Пароль правильний?
Число додатне чи від’ємне?
Продукт доступний?

Саме тут програми починають робити вибір.

Дуже важливо.

Дуже потужно.

Трохи небезпечно.

Ідеально.