Szybki quiz – przypomnienie poprzedniej lekcji
1. Co zostanie wyświetlone?
x = 7
y = 2.0
print(x + y, type(x + y))
Odpowiedź
Odpowiedź: 9.0 <class 'float'>. Działanie int + float daje float.
2. Znajdź błąd w kodzie i popraw go.
ilosc = 3
print("Mam " + ilosc + " jabłka")
Odpowiedź
Odpowiedź: Operatorem + nie można łączyć str z int (TypeError). Poprawnie: str(ilosc) albo f-string: print(f"Mam {ilosc} jabłka").
3. Co zostanie wyświetlone?
print(bool(""), bool("0"), bool(0.0), bool([]))
Odpowiedź
Odpowiedź: False True False False. Napis "0" nie jest pusty, więc jest „prawdziwy”. Pozostałe wartości są „fałszywe”.
4. Dlaczego ten kod nie działa? Jak uzyskać napis python?
tekst = "Python"
tekst[0] = "p"
Odpowiedź
Odpowiedź: Stringi są niemutowalne (TypeError). Trzeba utworzyć nowy napis, np. tekst = tekst.lower().
5. Co zostanie wyświetlone?
print(int(3.99), int("12") + 1, float(4))
Odpowiedź
Odpowiedź: 3 13 4.0. int() ucina część dziesiętną, nie zaokrągla.
6. Co zostanie wyświetlone?
print(None == False, None is None)
Odpowiedź
Odpowiedź: False True. None to brak wartości, nie jest równe False. Na None sprawdzamy operatorem is.
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)}")
PODSUMOWANIE
input()wstrzymuje program i czeka na tekst zakończony Enterem.input()zawsze zwracastr, nawet gdy użytkownik wpisze25.- Komunikat dla użytkownika podajemy jako argument:
input("Podaj wiek: "). Nie rób osobnegoprint()przedinput(). - Liczbę uzyskujemy przez rzutowanie:
int(...)dla całkowitych,float(...)dla ułamków. Zalecany zapis:age = int(input("...")). - Bez rzutowania
+skleja napisy ("4" + "5"daje"45"), a*je powtarza ("4" * 3daje"444"). int("3.7")iint("abc")kończą sięValueError. Błędne dane od użytkownika to normalna sytuacja, więc program powinien się na nią przygotować.try / except ValueErrorprzechwytuje błąd konwersji. Pętlawhile Truezbreakpozwala pytać do skutku, acontinuewraca do początku pętli.- Wiele wartości w jednej linii:
input().split()zwraca listę napisów. Każdy element nadal trzeba przekonwertować. - Wynik z częścią dziesiętną formatujemy w f-stringu:
{wartosc:.2f}.
Minimum, które powinno wejść w pamięć
Jeżeli masz zapamiętać tylko kilka rzeczy z tej lekcji, zapamiętaj te:
input()zawsze zwracastr.- Do obliczeń rzutuj od razu:
int(input("..."))lubfloat(input("...")). intdla liczb całkowitych,floatdla cen, wymiarów, temperatur.int("3.7")zgłasza błąd.- Bez rzutowania
"4" + "5"daje"45", a"4" * 3daje"444". - Komunikat wpisujesz w nawiasie:
input("Podaj wiek: "). - Błędne dane (
ValueError) obsługujesz przeztry / except ValueError, a w pętliwhile Trueużywaszbreakpo poprawnych danych. input().split()daje listę napisów, które nadal trzeba przekonwertować.- Wynik z dwoma miejscami po przecinku zapisujesz tak:
f"{wynik:.2f}".
Ściągawka – najważniejsze polecenia i składnia
| Zadanie | Zapis |
|---|---|
| Pobranie tekstu | imie = input("Imię: ") |
| Pobranie liczby całkowitej | wiek = int(input("Wiek: ")) |
| Pobranie liczby z ułamkiem | cena = float(input("Cena: ")) |
| Sprawdzenie typu | type(zmienna) |
| Wynik z 2 miejscami po przecinku | f"{wynik:.2f}" |
| Wiele wartości w jednej linii | lista = input().split() |
| Wiele liczb (zaawansowane) | liczby = [int(x) for x in input().split()] |
Obsługa błędnej liczby:
try:
n = int(input("Podaj liczbę: "))
print(n * 2)
except ValueError:
print("Błąd! Wpisz liczbę!")
Pytanie do skutku (walidacja):
while True:
try:
n = int(input("Podaj liczbę: "))
break
except ValueError:
print("Błąd! Wpisz liczbę!")
Typowy schemat programu:
# 1. dane -> 2. obliczenia -> 3. wynik
a = float(input("a: "))
b = float(input("b: "))
wynik = a * b
print(f"Wynik: {wynik:.2f}")
Quiz – sprawdź się
1. Jaki typ zwraca funkcja input() i co otrzyma zmienna, jeśli użytkownik wpisze 25?
2. Użytkownik wpisuje kolejno 4 i 5. Co zostanie wyświetlone?
a = input()
b = input()
print(a + b)
3. Znajdź błąd i popraw kod.
age = input("Podaj wiek: ")
print(f"Za rok będziesz mieć {age + 1} lat")
4. Uzupełnij kod tak, aby cena mogła mieć ułamek, ilość była liczbą całkowitą, a wynik miał dwa miejsca po przecinku.
cena = ____(input("Cena: "))
ilosc = ____(input("Ilość: "))
print(f"Razem: {cena * ilosc____} zł")
5. Użytkownik wpisuje kolejno 2.5 i 4. Co zostanie wyświetlone?
a = float(input())
b = int(input())
print(a * b, type(a * b))
6. Użytkownik wpisał 3.7. Dlaczego program przerywa działanie? Jak go naprawić?
x = int(input("Liczba: "))
7. Która linia jest poprawna?
- A)
name = input(Podaj imię: ) - B)
name = input("Podaj imię: ") - C)
name = "Podaj imię: ".input() - D)
input("Podaj imię: ") = name
8. Co zostanie wyświetlone, gdy użytkownik wpisze abc, a co, gdy wpisze 12?
try:
n = int(input("n: "))
print(n * 2)
except ValueError:
print("Błąd")
9. Użytkownik wpisuje 2 3 5. Co zostanie wyświetlone?
dane = input().split()
print(dane)
print(int(dane[0]) + int(dane[1]))
10. Napisz program, który pobiera trzy oceny (liczby całkowite) i wyświetla ich średnią z dokładnością do dwóch miejsc po przecinku. Sprawdź go dla ocen 5, 4, 4.
Odpowiedzi
1. Zwraca str. Zmienna otrzyma napis "25", a nie liczbę.
2. 45. Obie zmienne to napisy, więc + je skleja.
3. age jest napisem, więc age + 1 powoduje TypeError. Poprawnie: age = int(input("Podaj wiek: ")).
4. float, int, :.2f:
cena = float(input("Cena: "))
ilosc = int(input("Ilość: "))
print(f"Razem: {cena * ilosc:.2f} zł")
5. 10.0 <class 'float'>. Iloczyn float * int daje float.
6. int() nie potrafi zamienić napisu "3.7" na liczbę i zgłasza ValueError. Jeśli program ma przyjmować ułamki, użyj float(input(...)). Jeśli ma przyjmować tylko całkowite, dodaj try / except ValueError.
7. B. Komunikat musi być napisem w cudzysłowie, a input() to funkcja wywoływana z argumentem.
8. Dla abc wyświetli Błąd, bo int("abc") zgłasza ValueError. Dla 12 wyświetli 24.
9. Wyświetli dwie linie:
['2', '3', '5']
5
Elementy listy są napisami, dlatego przed dodaniem trzeba je przekonwertować.
10. Przykładowe rozwiązanie:
o1 = int(input("Ocena 1: "))
o2 = int(input("Ocena 2: "))
o3 = int(input("Ocena 3: "))
srednia = (o1 + o2 + o3) / 3
print(f"Średnia: {srednia:.2f}")
Dla 5, 4, 4 program wyświetla Średnia: 4.33. Nawiasy w (o1 + o2 + o3) / 3 są konieczne, bo dzielenie ma wyższy priorytet niż dodawanie.