Python · typy danych

Typy danych i konwersja w Pythonie — karta pracy

Typy str, int, float i bool oraz konwersje. Zaokrąglanie, ValueError i wartości logiczne w trzech zadaniach.

45 minutPoziom podstawowyPliki i rozwiązania

Materiał redakcyjny TablicaPro · liceum i technikum

print("12" + "3")
print(int("12") + 3)
› 123 oraz 15
Ten sam zapis, inny typ.

Wiele błędów początkujących programistów wynika z pomylenia liczby z napisem: "12" + "3" daje 123, a 12 + 3 daje 15. Ta lekcja porządkuje cztery podstawowe typy — str, int, float, bool — i uczy zamieniać je funkcjami int, float, str i bool, a także obsługiwać błędne dane przez try i except.

Scenariusz jest przeznaczony na 45 minut dla klasy znającej zmienne i print. Pasuje przed lekcją o pobieraniu danych, ale można go zrobić także po niej.

Przygotowanie stanowisk

Potrzebny jest Python 3 i edytor lub IDLE. Rozpakuj pakiet z sekcji materiałów do osobnego folderu i uruchamiaj skrypty z tego folderu. Program uruchomisz przez Run → Run Module albo poleceniem python start.py, python3 start.py lub py start.py.

Cele i plan lekcji

Po zajęciach uczeń potrafi:

  • rozpoznać typ wartości i sprawdzić go funkcją type;
  • zamienić tekst na liczbę i liczbę na tekst;
  • wyjaśnić różnicę między int(3.9) a round(3.9);
  • obsłużyć błędną konwersję przez try ... except ValueError;
  • wskazać wartości, które w warunku są fałszywe.
CzasPraca na lekcji
0–5 minProblem: "12" + "3" kontra 12 + 3
5–15 minTypy i funkcja type, konwersje
15–22 minZaokrąglanie, ValueError, wartości logiczne
22–37 minTrzy zadania samodzielne
37–42 minOmówienie wyników
42–45 minPytania kontrolne

Cztery typy i konwersje

str to tekst ("12"), int — liczba całkowita (12), float — liczba z częścią ułamkową (3.5), bool — wartość logiczna (True lub False). Funkcja type(x) zwraca typ wartości. Operator + dodaje liczby, ale łączy napisy, a * powiela napis: "12" * 2 to 1212.

Konwersje: int("12") daje 12, float("2.5") daje 2.5, str(45) daje "45". Funkcja int odcina część ułamkową (int(3.9) to 3, int(-3.9) to −3), natomiast round zaokrągla — i dla połówek stosuje zaokrąglanie do najbliższej liczby parzystej, więc round(2.5) to 2, a round(3.5) to 4. Próba zamiany tekstu, który nie jest liczbą, zgłasza ValueError; można go przechwycić blokiem try ... except ValueError. W Pythonie ułamki zapisujemy z kropką, więc przecinek trzeba najpierw zamienić metodą replace.

W warunkach fałszywe są: 0, 0.0, pusty napis, pusta lista i None; prawdziwe jest m.in. napis "0" (bo nie jest pusty).

Zadania

Zadanie 1. Napis czy liczba? Dla tekst = "12" wypisz tekst + "3", int(tekst) + 3 i tekst * 2, a w drugiej linii typy: napisu, int(tekst), liczby 3.5 i wartości True.

Zadanie 2. Zaokrąglanie. Wypisz int(3.9), int(-3.9), round(3.5), round(2.5) oraz float("2.5") * 2. Zbuduj napisy 45 min i Wynik: 5 z liczb za pomocą str.

Zadanie 3. Błędne dane. Dla listy ["15", "3,5", "abc", "7.2"] zamień każdy element na liczbę (przecinek zamień na kropkę). Dla tekstu, który nie jest liczbą, wypisz komunikat zamiast zatrzymywać program. Na końcu sprawdź bool dla 0, "", "0", [] i 7.

Dla chętnych: dla listy ["10", "20", "x", "30"] zsumuj tylko elementy składające się z cyfr (isdigit).

Rozwiązanie i wyniki

# Zadanie 1
tekst = "12"
print(tekst + "3", int(tekst) + 3, tekst * 2)
print(type(tekst), type(int(tekst)), type(3.5), type(True))

# Zadanie 2
print(int(3.9), int(-3.9), round(3.5), round(2.5), float("2.5") * 2)
print(str(45) + " min", "Wynik: " + str(2 + 3))

# Zadanie 3
for napis in ["15", "3,5", "abc", "7.2"]:
    try:
        print(napis, "->", float(napis.replace(",", ".")))
    except ValueError:
        print(napis, "-> to nie jest liczba")
print(bool(0), bool(""), bool("0"), bool([]), bool(7))

Program wypisze:

123 15 1212
<class 'str'> <class 'int'> <class 'float'> <class 'bool'>
3 -3 4 2 5.0
45 min Wynik: 5
15 -> 15.0
3,5 -> 3.5
abc -> to nie jest liczba
7.2 -> 7.2
False False True False True

Zadanie dla chętnych (rozszerzenie.py) wypisuje:

Suma poprawnych: 60

Typowe błędy

ObjawCo sprawdzić
TypeError: can only concatenate str (not "int") to strDo napisu dodano liczbę; użyj str(liczba) albo int(napis).
"5" + "5" daje 55To łączenie napisów; zamień oba na int.
ValueError: could not convert string to float: '3,5'Przecinek zamiast kropki; użyj replace(",", ".").
int("3.5") zgłasza błądint nie czyta ułamków zapisanych jako tekst; użyj float, a potem int.
round(2.5) daje 2To zaokrąglanie do najbliższej parzystej; zachowanie jest zgodne z dokumentacją.
Pusty tekst uznany za prawdębool("") to False, ale bool("0") to True.

Pytania kontrolne i punktacja

  1. Co wypisze "7" + "3", a co 7 + 3?
  2. Czym różni się int(4.8) od round(4.8)?
  3. Jaką wartość ma bool("0")?

Odpowiedzi: 73 oraz 10. int odcina część ułamkową (4), round zaokrągla (5). True, bo napis nie jest pusty.

Proponowana punktacja (razem 10 punktów): zadanie 1 — trzy wyniki 2 pkt, typy 1 pkt; zadanie 2 — pięć wartości 2 pkt, konwersja str 1 pkt; zadanie 3 — replace 1 pkt, try/except 2 pkt, bool 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.

Materiały do pobrania

Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.

Co dalej?

Następny krok to pobieranie danych od użytkownika i instrukcje warunkowe. Ten materiał rozwija dział o typach i konwersjach w kursie Python w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.

Źródła techniczne: typy wbudowane w dokumentacji oraz funkcja round. Zobacz też lekcję o napisach.

Poprowadź kolejne lekcje Python

Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.

Kup dostęp do kursu Python →

Zobacz program kursu