← Back to course

Input użytkownika i konwersja typów

Input użytkownika i konwersja typów

Witaj z powrotem.

W poprzedniej lekcji nauczyłeś się zmiennych i typów danych.

Nauczyłeś się zapisywać wartości takie jak:

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

Bardzo dobrze.

Twoje programy potrafią teraz pamiętać wartości.

Ale jest jeszcze jeden problem.

Wartości są wpisane bezpośrednio w kodzie.

To znaczy, że program zawsze używa tych samych danych.

Przydatne.

Ale niezbyt interaktywne.

Prawdziwy program często musi zapytać użytkownika o informacje.

Na przykład:

Jak masz na imię?
Ile masz lat?
Ile produktów chcesz?
Jaka jest cena?

I tutaj wchodzi input().

input() pozwala programowi zadawać pytania.

Użytkownik odpowiada.

Python zapisuje odpowiedź.

Potem program może jej użyć.

Nagle program nie tylko mówi.

On słucha.

Niebezpieczny upgrade.

Ale użyteczny.

Czego się nauczysz

W tej lekcji nauczysz się:

Pod koniec tej lekcji twoje programy będą mogły rozmawiać z użytkownikami.

Nie inteligentnie.

Nie jak chatbot.

Ale wystarczająco, żeby zadać pytanie i użyć odpowiedzi.

Mała interakcja.

Duży krok.

Bardzo Python.

Czym jest input()?

input() to funkcja Pythona, która pyta użytkownika o informacje.

Przykład:

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

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

Kiedy uruchomisz program, Python pokaże:

What is your name?

Potem użytkownik coś wpisze.

Na przykład:

Anna

Python zapisze "Anna" w zmiennej name.

Potem program wyświetli:

Hello, Anna!

Bardzo ładnie.

Bardzo uprzejmie.

Program zapytał.

Użytkownik odpowiedział.

Python zapamiętał.

Nikt nie płakał.

Świetny postęp.

Twój pierwszy program z input()

Utwórz plik:

input_example.py

Napisz:

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

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

Uruchom:

python input_example.py

albo:

python3 input_example.py

Zobaczysz:

What is your name?

Wpisz swoje imię i naciśnij Enter.

Przykład:

Viktor

Potem program wyświetli:

Hello, Viktor!

Gratulacje.

Twój program jest teraz interaktywny.

Pyta.

Czeka.

Odpowiada.

Bardzo proste.

Bardzo ważne.

Bardzo “mój program nauczył się podstawowych manier”.

Tekst wewnątrz input()

Tekst wewnątrz input() nazywa się prompt.

Przykład:

input("What is your name? ")

Prompt to tekst, który widzi użytkownik.

Dobry prompt:

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

Zły prompt:

name = input()

To działa, ale użytkownik nic nie widzi.

Program po prostu czeka.

Użytkownik może pomyśleć, że program się zepsuł.

I szczerze mówiąc, słusznie.

Zawsze pisz jasny prompt.

Komputery naturalnie się nie tłumaczą.

Musisz im pomóc.

Jak małym zagubionym metalowym dzieciom.

Zapisywanie inputu w zmiennej

Zwykle zapisujesz input w zmiennej.

Przykład:

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

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

Jeśli użytkownik wpisze:

Rome

Output:

You live in Rome.

Przebieg jest taki:

Zadaj pytanie.
Użytkownik wpisuje odpowiedź.
Zapisz odpowiedź w zmiennej.
Użyj zmiennej.

Ten wzorzec jest bardzo częsty.

Będziesz go używać znowu i znowu.

Jak robienie kawy.

Tylko z większą ilością składni.

Więcej pytań

Możesz zadać więcej niż jedno pytanie.

Przykład:

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}.")

Przykład interakcji:

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.

Teraz twój program zbiera kilka informacji.

To już jest użyteczne.

Mały formularz.

Małe uczucie bazy danych.

Ale bez bazy danych.

Na razie.

input() zawsze zwraca string

Bardzo ważny szczegół:

input() zawsze zwraca string.

Nawet jeśli użytkownik wpisze liczbę.

Przykład:

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

print(type(age))

Jeśli użytkownik wpisze:

25

Python zapisze to jako:

"25"

Nie jako:

25

Output:

<class 'str'>

To jest ważne.

Bardzo ważne.

Python widzi input użytkownika jako tekst.

Bo z klawiatury wszystko przychodzi jako tekst.

Python nie zgaduje.

Python nie mówi:

To wygląda jak liczba, więc będę kreatywny.

Nie.

Python mówi:

Tekst.
Zdecydowanie tekst.
Powodzenia.

Bardzo surowo.

Bardzo szczerze.

Problem z liczbami z input()

Spróbuj tego:

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

next_year = age + 1

print(next_year)

Jeśli użytkownik wpisze:

25

Możesz oczekiwać:

26

Ale Python pokaże błąd.

Dlaczego?

Bo age jest stringiem.

To znaczy, że Python widzi:

"25" + 1

Czyli tekst plus liczba.

Python odmawia.

I szczerze mówiąc, słusznie.

To jak próba dodania banana do kalkulatora.

Ciekawe.

Ale niepoprawne.

Konwersja inputu na int

Jeśli chcesz liczbę całkowitą, użyj int().

Przykład:

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

next_year = age + 1

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

Jeśli użytkownik wpisze:

25

Output:

Next year you will be 26.

Tutaj:

int(age_text)

konwertuje string "25" na integer 25.

Teraz Python może robić matematykę.

Bardzo dobrze.

Banan został usunięty z kalkulatora.

Krótsza wersja

Możesz konwertować input bezpośrednio:

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

next_year = age + 1

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

To jest częste.

Ale dla początkujących dłuższa wersja czasem jest łatwiejsza do zrozumienia:

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

Obie wersje są poprawne.

Używaj tej, która jest dla ciebie jaśniejsza.

Jasny kod jest lepszy niż kod, który wygląda sprytnie, ale sprawia, że mózg wychodzi z budynku.

Konwersja inputu na float

Jeśli potrzebujesz liczby dziesiętnej, użyj float().

Przykład:

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

total = price * quantity

print(f"Total: {total}")

Przykład:

Product price: 19.99
Quantity: 3

Output:

Total: 59.97

Używaj:

int()

dla liczb całkowitych.

Używaj:

float()

dla liczb dziesiętnych.

Prosta zasada.

Użyteczna zasada.

Zasada, która oszczędza wiele bólu głowy.

Liczby dziesiętne używają kropki

W Pythonie liczby dziesiętne używają kropki:

19.99

Nie przecinka:

19,99

Poprawny input:

19.99

Zły input:

19,99

Jeśli użytkownik wpisze:

19,99

a program używa float(), Python będzie narzekał.

Python oczekuje kropki.

Python nie przejmuje się tym, że wiele krajów używa przecinka do cen.

Python wybrał kropkę.

Kropka jest prawem.

Mała kropka.

Wielka władza.

Prosty program powitalny

Utwórz plik:

greeting.py

Napisz:

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

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

Uruchom go.

Przykład:

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

Output:

Hello, Anna!
Rome sounds like a nice place.

Ten program nie robi wiele.

Ale używa prawdziwej interakcji.

Input.

Zmienne.

Output.

To przydatny wzorzec.

Wiele większych programów to właśnie ten wzorzec z większą liczbą kroków i większą ilością kawy.

Prosty program z wiekiem

Utwórz plik:

age_program.py

Napisz:

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.")

Przykład:

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

Output:

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

Teraz twój program używa:

Mały program.

Prawdziwe koncepcje.

Bardzo dobrze.

Prosty program sklepowy

Utwórz plik:

shop_input.py

Napisz:

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}")

Przykład interakcji:

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

To jest dużo ciekawsze.

Użytkownik podaje dane.

Program oblicza wynik.

Tak zaczyna się wiele użytecznych skryptów.

Nie od fajerwerków.

Od inputu.

I podejrzanej ilości cierpliwości.

Czystszy output

Czasem floaty wyświetlają więcej miejsc po przecinku, niż chcesz.

Dla pieniędzy zwykle chcesz dwa miejsca po przecinku.

Użyj:

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

Przykład:

price = 19.99
quantity = 3

total = price * quantity

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

Output:

Total: 59.97

Część:

:.2f

oznacza:

pokaż tę liczbę z 2 miejscami po przecinku

To przydatne dla cen.

Bardzo przydatne.

Bo pieniądze z losowymi miejscami po przecinku wyglądają jak dokument podatkowy w stanie załamania nerwowego.

Czystszy program sklepowy

Zaktualizuj 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}")

Teraz output wygląda czyściej:

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

Dużo lepiej.

Czytelny output ma znaczenie.

Program nie powinien tylko działać.

Powinien też nie wyglądać, jakby złożył go zmęczony szop pracz.

Chyba że taki jest motyw.

Zwykle nie.

Typowy błąd: zapomnienie int()

Źle:

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

next_year = age + 1

print(next_year)

To nie działa, bo age jest tekstem.

Poprawnie:

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

next_year = age + 1

print(next_year)

Jeśli chcesz matematykę, konwertuj input na liczbę.

Zapamiętaj:

input() daje tekst.
Matematyka potrzebuje liczb.

Proste.

Ważne.

Bardzo Python.

Typowy błąd: używanie int() dla liczb dziesiętnych

Źle:

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

Jeśli użytkownik wpisze:

19.99

Python będzie narzekał.

Bo int() oczekuje liczby całkowitej.

Użyj:

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

Zasada:

Wiek, ilość, liczba przedmiotów -> int
Cena, waga, temperatura -> float

Nie zawsze idealna.

Ale dobra dla początkujących.

Typowy błąd: wpisanie tekstu, gdy Python oczekuje liczby

Jeśli program mówi:

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

a użytkownik wpisze:

banana

Python się wysypie.

Bo:

int("banana")

nie ma sensu.

Python nie może przekonwertować banana na liczbę.

To nie Python jest trudny.

To Python jest rozsądny.

Później nauczymy się poprawnie obsługiwać błędy.

Na razie wpisuj taki typ danych, o jaki prosi program.

Jeśli pyta o wiek, nie odpowiadaj owocem.

Zwykle dobra rada życiowa.

Typowy błąd: brak spacji w prompt

To nie jest zepsute:

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

Ale użytkownik będzie pisał od razu po pytaniu:

What is your name?Anna

Lepiej:

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

Zauważ spację przed końcowym cudzysłowem:

"? "

Dzięki temu input jest czytelniejszy:

What is your name? Anna

Mały szczegół.

Lepsze doświadczenie.

Programowanie jest pełne małych szczegółów udających, że są małe.

Typowy błąd: niezapisany plik

Edytujesz kod.

Uruchamiasz program.

Nic się nie zmienia.

Dlaczego?

Często dlatego, że plik nie został zapisany.

Klasyka.

Bardzo klasyczna.

Prawie tradycyjna.

Przed uruchomieniem programu zapisz plik.

Twój edytor może pokazywać kropkę albo znak, kiedy plik ma niezapisane zmiany.

Zapisz.

Uruchom.

Sprawdź.

Ten rytm ma znaczenie:

edytuj
zapisz
uruchom

Nie:

edytuj
panikuj
uruchom starą wersję
panikuj bardziej

input() z pustymi odpowiedziami

Użytkownik może nacisnąć Enter bez wpisywania niczego.

Przykład:

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

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

Jeśli użytkownik po prostu naciśnie Enter, name stanie się pustym stringiem:

""

Output:

Hello, !

Niezbyt piękne.

Ale poprawne.

Później nauczymy się sprawdzać pusty input.

Na razie po prostu wiedz, że to może się zdarzyć.

Użytkownicy są kreatywni.

Czasem zbyt kreatywni.

Mini program: minuty na sekundy

Utwórz plik:

minutes_to_seconds.py

Napisz:

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

seconds = minutes * 60

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

Przykład:

Minutes: 5

Output:

5 minutes is 300 seconds.

Ten program pyta o liczbę.

Konwertuje ją.

Liczy.

Wyświetla wynik.

Prosty.

Użyteczny.

Mały kalkulator wszedł do pokoju.

Mini program: Celsius na Fahrenheit

Utwórz plik:

temperature.py

Napisz:

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

fahrenheit = (celsius * 9 / 5) + 32

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

Przykład:

Temperature in Celsius: 20

Output:

20.0°C is 68.0°F.

To używa:

Bardzo dobra praktyka.

Przydatne też, jeśli kiedyś trzeba zrozumieć pogodę w innym systemie miar.

Bo najwyraźniej ludzkość lubi różnorodność.

Mini program: prosty kalkulator

Utwórz plik:

calculator.py

Napisz:

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}")

Przykład:

First number: 10
Second number: 5

Output:

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

To prawdziwy projekt dla początkującego.

Mały.

Ale prawdziwy.

Pyta o input.

Konwertuje input.

Wykonuje obliczenia.

Wyświetla wyniki.

To fundament wielu programów.

Tylko z mniejszą liczbą przycisków i mniejszą liczbą spotkań.

Uważaj na dzielenie przez zero

Jeśli użytkownik wpisze:

0

jako drugą liczbę, ta linia się nie uda:

division = first_number / second_number

Bo dzielenie przez zero jest niedozwolone.

Python pokaże błąd:

ZeroDivisionError

Na razie unikaj używania zera jako drugiej liczby.

Później, kiedy nauczymy się warunków, naprawimy to poprawnie.

Przyszła lekcja nas uratuje.

Na razie grzecznie unikamy matematycznych eksplozji.

Praktyka

Utwórz plik:

practice_input.py

Zapytaj użytkownika o:

Potem oblicz:

rok urodzenia = obecny rok - wiek

Przykład:

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}.")

Uruchom.

Zmień odpowiedzi.

Uruchom ponownie.

Program powinien dopasowywać się do inputu użytkownika.

O to chodzi.

Ten sam kod.

Inne dane.

Inny output.

Piękne.

Mini wyzwanie

Utwórz plik:

order_total.py

Program powinien zapytać o:

Potem oblicz:

subtotal = cena produktu * ilość
total = subtotal + koszt wysyłki

Wyświetl podsumowanie tak:

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

Przykładowe rozwiązanie:

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}")

Kiedy zacznie działać, zmień wartości.

Spróbuj różnych produktów.

Spróbuj różnych ilości.

Spróbuj cen dziesiętnych.

Ale nie wpisuj banana tam, gdzie Python oczekuje liczby.

Python nie jest jeszcze gotowy na handel owocami.

Checklist dla początkujących

Kiedy twój program z inputem nie działa, sprawdź:

Czy zapisałem plik?
Czy uruchamiam właściwy plik?
Czy zamknąłem wszystkie nawiasy?
Czy zamknąłem wszystkie cudzysłowy?
Czy przekonwertowałem input liczbowy przez int() lub float()?
Czy wpisałem liczbę, kiedy program oczekiwał liczby?
Czy użyłem kropki dla liczb dziesiętnych?
Czy dzieliłem przez zero?
Czy poprawnie napisałem nazwy zmiennych?

Większość błędów jest mała.

Mały nie znaczy nieszkodliwy.

Brakujący cudzysłów może zatrzymać cały program.

Bardzo dramatycznie.

Bardzo edukacyjnie.

Bardzo Python.

Podsumowanie

Dzisiaj nauczyłeś się:

To duży krok.

Twoje programy są teraz interaktywne.

Mogą zadawać pytania.

Mogą używać odpowiedzi.

Mogą liczyć wyniki na podstawie danych użytkownika.

Tak zaczyna się wiele użytecznych skryptów.

Nie ogromnych.

Nie eleganckich.

Ale użytecznych.

A użyteczne jest potężne.

Następna lekcja

W następnej lekcji nauczymy się warunków.

Nauczysz się podejmować decyzje za pomocą:

if
else
elif

Twój program będzie mógł zadawać pytania typu:

Czy użytkownik jest wystarczająco dorosły?
Czy hasło jest poprawne?
Czy liczba jest dodatnia czy ujemna?
Czy produkt jest dostępny?

Tutaj programy zaczynają podejmować decyzje.

Bardzo ważne.

Bardzo potężne.

Trochę niebezpieczne.

Idealnie.