Interakcja z użytkownikiem to kluczowy element wielu programów. Python umożliwia pobieranie danych od użytkownika za pomocą funkcji input(), która wstrzymuje wykonanie programu i czeka na wprowadzenie tekstu przez użytkownika.
Kluczowa zasada: Funkcja input() ZAWSZE zwraca typ str (string), niezależnie od tego, co użytkownik wpisze. Jeśli potrzebujesz liczby, musisz dokonać rzutowania.
Funkcja input()
Podstawowa składnia
zmienna = input()
Funkcja input():
- Wyświetla kursor w konsoli
- Czeka na wpisanie tekstu przez użytkownika
- Pobiera tekst po naciśnięciu Enter
- Zwraca wprowadzony tekst jako string
- Przypisuje wartość do zmiennej
Najprostszy przykład
# Program czeka na input użytkownika
name = input()
# Użytkownik wpisuje np. "Jan" i naciska Enter
print(name) # Jan
Sesja w konsoli:
Jan użytkownik wpisał
Jan program wyświetlił
Input z komunikatem (prompt)
Lepiej jest wyświetlić komunikat informujący użytkownika, co ma wpisać.
# Komunikat jako argument funkcji input()
name = input("Podaj swoje imię: ")
print(name)
Sesja w konsoli:
Podaj swoje imię: Jan
Jan
To jest znacznie lepsze niż:
# Stary sposób - dwie linie zamiast jednej
print("Podaj swoje imię:")
name = input()
Input zawsze zwraca string
# Użytkownik wpisuje liczbę
age = input("Podaj swój wiek: ")
# Sprawdzamy typ
print(type(age)) # <class 'str'>
# To jest string, nie liczba!
print(age) # "25" (w cudzysłowach, bo to string)
Sesja w konsoli:
Podaj swój wiek: 25
<class 'str'>
25
Problem z obliczeniami
# Pobieramy "liczbę"
age = input("Podaj wiek: ")
# Próbujemy dodać
# result = age + 5 # TypeError: can only concatenate str to str
# To nie zadziała - age to string "25", nie liczba 25
Rzutowanie danych wejściowych
Konwersja na int
# Metoda 1: Rzutowanie po pobraniu
age_str = input("Podaj swój wiek: ")
age = int(age_str)
print(f"Za rok będziesz mieć {age + 1} lat")
# Metoda 2: Rzutowanie od razu (ZALECANE)
age = int(input("Podaj swój wiek: "))
print(f"Za rok będziesz mieć {age + 1} lat")
Sesja w konsoli:
Podaj swój wiek: 25
Za rok będziesz mieć 26 lat
Konwersja na float
# Pobieranie liczby zmiennoprzecinkowej
price = float(input("Podaj cenę produktu: "))
# Obliczanie z VAT
price_with_vat = price * 1.23
print(f"Cena z VAT: {price_with_vat:.2f} zł")
Sesja w konsoli:
Podaj cenę produktu: 100
Cena z VAT: 123.00 zł
Przykłady praktyczne
Przykład 1: Proste powitanie
print("Podaj swoje imię:")
name = input()
print("Witaj " + name + "!")
print("Dobrze Cię znowu gościć!")
Lepszy sposób (komunikat w input):
name = input("Podaj swoje imię: ")
print(f"Witaj {name}!")
print("Dobrze Cię znowu gościć!")
Sesja w konsoli:
Podaj swoje imię: Jan
Witaj Jan!
Dobrze Cię znowu gościć!
Przykład 2: Obliczenia z wiekiem
print("Podaj swój wiek:")
age = input()
# Rzutowanie na int przed obliczeniami
print("Jesteś ode mnie młodszy o", 38 - int(age), "lat")
Lepszy sposób:
age = int(input("Podaj swój wiek: "))
roznica = 38 - age
print(f"Jesteś ode mnie młodszy o {roznica} lat")
Sesja w konsoli:
Podaj swój wiek: 25
Jesteś ode mnie młodszy o 13 lat
Przykład 3: Kalkulator kwoty do zapłaty
print("Podaj kwotę:")
x = int(input())
print("Podaj ilość:")
y = int(input())
print("Kwota do zapłaty:", x * y)
Lepszy sposób:
price = float(input("Podaj cenę jednostkową: "))
quantity = int(input("Podaj ilość: "))
total = price * quantity
print(f"Kwota do zapłaty: {total:.2f} zł")
Sesja w konsoli:
Podaj cenę jednostkową: 19.99
Podaj ilość: 3
Kwota do zapłaty: 59.97 zł
Przykład 4: Pole prostokąta
# Pobieramy wymiary
dlugosc = float(input("Podaj długość prostokąta (cm): "))
szerokosc = float(input("Podaj szerokość prostokąta (cm): "))
# Obliczamy pole
pole = dlugosc * szerokosc
# Wyświetlamy wynik
print(f"Pole prostokąta wynosi: {pole} cm²")
Sesja w konsoli:
Podaj długość prostokąta (cm): 5.5
Podaj szerokość prostokąta (cm): 3.2
Pole prostokąta wynosi: 17.6 cm²
Przykład 5: Konwerter temperatur
# Pobieramy temperaturę w Celsjuszach
celsjusz = float(input("Podaj temperaturę w °C: "))
# Konwertujemy na Fahrenheita: F = C * 9/5 + 32
fahrenheit = celsjusz * 9/5 + 32
# Wyświetlamy wynik
print(f"{celsjusz}°C = {fahrenheit:.1f}°F")
Sesja w konsoli:
Podaj temperaturę w °C: 25
25.0°C = 77.0°F
Obsługa błędów przy input()
Problem – użytkownik wpisuje nieprawidłowe dane
# Użytkownik powinien wpisać liczbę
age = int(input("Podaj wiek: "))
# Jeśli wpisze "dwadzieścia" → ValueError!
Rozwiązanie – try-except
try:
age = int(input("Podaj wiek: "))
print(f"Masz {age} lat")
except ValueError:
print("Błąd! Wpisz liczbę, nie tekst!")
Sesja z błędem:
Podaj wiek: dwadzieścia
Błąd! Wpisz liczbę, nie tekst!
Sesja poprawna:
Podaj wiek: 25
Masz 25 lat
Lepsze rozwiązanie – pętla z walidacją
while True:
try:
age = int(input("Podaj wiek: "))
# Dodatkowa walidacja
if age < 0 or age > 150:
print("Wiek musi być między 0 a 150!")
continue
# Jeśli wszystko OK, wychodzimy z pętli
break
except ValueError:
print("Błąd! Wpisz liczbę!")
print(f"Twój wiek: {age}")
Sesja z próbami:
Podaj wiek: abc
Błąd! Wpisz liczbę!
Podaj wiek: -5
Wiek musi być między 0 a 150!
Podaj wiek: 200
Wiek musi być między 0 a 150!
Podaj wiek: 25
Twój wiek: 25
Wiele danych wejściowych
Pojedynczo z opisami
# Dane osobowe
imie = input("Imię: ")
nazwisko = input("Nazwisko: ")
wiek = int(input("Wiek: "))
miasto = input("Miasto: ")
# Wyświetlanie
print("\n--- Podsumowanie ---")
print(f"Imię i nazwisko: {imie} {nazwisko}")
print(f"Wiek: {wiek}")
print(f"Miasto: {miasto}")
Kilka liczb na raz
# Opcja 1: Osobne inputy
a = int(input("Podaj pierwszą liczbę: "))
b = int(input("Podaj drugą liczbę: "))
c = int(input("Podaj trzecią liczbę: "))
suma = a + b + c
print(f"Suma: {suma}")
Split – podział stringa
# Użytkownik wpisuje wiele wartości rozdzielonych spacją
liczby_str = input("Podaj trzy liczby oddzielone spacją: ")
# Rozdzielamy string na listę
liczby_lista = liczby_str.split()
# Konwertujemy każdy element na int
a = int(liczby_lista[0])
b = int(liczby_lista[1])
c = int(liczby_lista[2])
suma = a + b + c
print(f"Suma: {suma}")
Split z list comprehension (zaawansowane)
# Elegancki sposób na wiele liczb
liczby_str = input("Podaj liczby oddzielone spacją: ")
liczby = [int(x) for x in liczby_str.split()]
print(f"Suma: {sum(liczby)}")
print(f"Średnia: {sum(liczby) / len(liczby)}")