← Lekcje
Python · lekcja 03

Dane z klawiatury: input i int

  1. Funkcja input i tekst zachęty w nawiasie
  2. Z klawiatury zawsze przychodzi napis: int() i float()
  3. Co się dzieje, gdy ktoś wpisze literę zamiast liczby
  4. Program Szarlotka: od specyfikacji do sumy jabłek
Rozgrzewka · 3 minuty

Co pamiętacie z lekcji 2?

  1. Co robi znak = w zapisie age = 16?
  2. Wymieńcie cztery typy danych z poprzedniej lekcji i podajcie przykład każdego.
  3. Co wypisze print("Ala", "ma", 2, "koty")?
Część 1 · Instrukcja wejścia

input: program czeka na Was

Funkcja input to instrukcja wejścia: zatrzymuje program i czeka, aż wpiszecie coś z klawiatury i wciśniecie Enter. Tekst podany w nawiasie jako argument (tekst zachęty) wypisuje się bez przejścia do nowej linii, więc kursor zostaje w tej samej linii.

name = input("Podaj swoje imię: ")
print(name, "uczy się programowania.")
Podaj swoje imię: Janek
Janek uczy się programowania.

Ta sama rzecz da się zapisać dwiema linijkami: print("Podaj swoje imię:") i osobno name = input(). Wtedy pytanie stoi w jednej linii, a odpowiedź w następnej.

Podręcznik Informatyka na czasie 2 (Nowa Era), s. 96 (6.3 Tworzymy własne programy użytkowe, program Powitanie, funkcja input, instrukcja wejścia) · docs.python.org, wbudowana funkcja input (argument prompt)
Część 2 · Napis kontra liczba

Z klawiatury przychodzi napis

Funkcja input zawsze oddaje napis (typ str), nawet gdy wpiszecie same cyfry. Napisy Python skleja zamiast dodawać, dlatego "4" + "5" daje "45". Funkcja int zamienia taki napis na liczbę całkowitą.

klawiatura wpisujesz 16 i wciskasz Enter input() oddaje "16" napis, typ str int() oddaje 16 liczba, typ int
Podręcznik Informatyka na czasie 2 (Nowa Era), s. 99 (6.3 Tworzymy własne programy użytkowe, funkcja int, ramka „Warto wiedzieć”) · docs.python.org, wbudowane funkcje input i int
Część 2 · Dwie funkcje zamiany

int() i float(): całość albo ułamek

ZapisWynikTyp wynikuKiedy tak robimy
int("16")16intwiek, liczba jabłek, liczba punktów
float("4.99")4.99floatcena, waga, temperatura
float("7")7.0floatgdy chcemy liczyć na ułamkach
int(4.99)4intucina część po kropce, nie zaokrągla
int("4.5")błąd ValueErrorbrak wynikunigdy: napis z kropką bierze float

Skąd nazwa: float to skrót od angielskiego floating point number, czyli liczba zmiennoprzecinkowa. Część ułamkową oddziela w niej kropka, nie przecinek, więc float("4,99") kończy się błędem.

docs.python.org, wbudowane funkcje int i float · docs.python.org, The Python Tutorial, rozdz. 3.1.1 (Numbers) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 223 (dodatek 6 „Typy danych w języku Python”)
Część 2 · Gdy dane są złe

Użytkownik wpisał literę zamiast liczby

ania_apples = int(input("Aniu, ile masz jabłek? "))

Aniu, ile masz jabłek? cztery
Traceback (most recent call last):
  File "apples.py", line 1, in <module>
    ania_apples = int(input("Aniu, ile ..."))
ValueError: invalid literal for int()
with base 10: 'cztery'

Funkcja int umie zamienić na liczbę tylko napis złożony z cyfr. Napis "cztery" cyfr nie zawiera, więc program przerywa pracę i wypisuje komunikat o błędzie.

Czytamy go od dołu: ostatnia linia podaje rodzaj błędu (ValueError, czyli zła wartość) i to, co się nie dało zamienić. Linie wyżej mówią, w którym pliku i w której linijce.

docs.python.org, wbudowane funkcje int i float (zamiana napisu na liczbę) · docs.python.org, The Python Tutorial, rozdz. 3.1.1 (Numbers)
Część 3 · Specyfikacja i lista kroków

Czy starczy na szarlotkę?

Dane: liczba jabłek zebranych przez Anię i Wojtka wprowadzona z klawiatury.
Wynik: informacja, czy suma zebranych jabłek wystarczy na szarlotkę, lub komunikat o tym, że liczba jabłek jest niewystarczająca.

  1. Zapytaj Anię o to, ile ma jabłek. Zapamiętaj tę liczbę.
  2. Zapytaj Wojtka o to, ile ma jabłek. Zapamiętaj tę liczbę.
  3. Oblicz sumę liczb z kroków 1 i 2. Zapamiętaj tę sumę.
  4. Jeśli suma jest liczbą mniejszą niż 15, to wypisz informację, że jabłek jest za mało na szarlotkę. W przeciwnym razie wypisz informację, że liczba jabłek jest wystarczająca.
Podręcznik Informatyka na czasie 2 (Nowa Era), s. 97–98 (6.3 Tworzymy własne programy użytkowe, program Szarlotka, ramka „Specyfikacja” i lista kroków)
Część 3 · Symulacja

Sprawdzamy algorytm zanim powstanie kod

Symulacja to przejście listy kroków ołówkiem, dla przykładowych liczb. Jeśli w algorytmie jest błąd, tu go widać, a poprawka nic nie kosztuje.

WyjścieWejścieDziałania
Aniu! Ile masz jabłek?4
Wojtku! Ile masz jabłek?5
4 + 5 = 9
Czy 9 < 15
Jabłek jest za mało.
Podręcznik Informatyka na czasie 2 (Nowa Era), s. 98 (6.3 Tworzymy własne programy użytkowe, tab. 6.1 „Symulacja algorytmu Szarlotka”)
Część 3 · Kod źródłowy

Szarlotka: trzy kroki w kodzie

1.  print("Aniu, ile masz jabłek? ")
2.  ania_apples = int(input())
3.  print("Wojtku, ile masz jabłek? ")
4.  wojtek_apples = int(input())
5.
6.  total_apples = ania_apples + wojtek_apples
7.  print("Razem jabłek:", total_apples)

Linie 1.–4. to pytania i odpowiedzi, linia 6. liczy sumę, linia 7. pokazuje wynik. Pusta linia 5. oddziela pytania od obliczeń.

Dla 4 i 5 jabłek program wypisze Razem jabłek: 9. Bez funkcji int w liniach 2. i 4. wypisałby Razem jabłek: 45, bo skleiłby dwa napisy.

Podręcznik Informatyka na czasie 2 (Nowa Era), s. 98–99 (6.3 Tworzymy własne programy użytkowe, kod źródłowy programu Szarlotka, funkcja int)
Ćwiczenie · przy komputerze · 12 minut

Ćwiczenie: trzy własne programy

  1. Zapisz plik greeting.py: zapytaj o imię tekstem zachęty w nawiasie input, a potem przywitaj się z użytkownikiem. Uruchom i wpisz swoje imię.
  2. Zapisz plik apples.py: zapytaj dwie osoby o liczbę jabłek, zsumuj i wypisz sumę. Sprawdź dla 4 i 5 jabłek.
  3. W apples.py usuń obie funkcje int i uruchom dla 4 i 5. Zapisz wynik, przywróć int, a potem wpisz słowo cztery i zapisz nazwę błędu.
Sprawdzenie

Trzy pytania na koniec

  1. Jakiego typu jest to, co oddaje input, gdy wpiszecie 16?
  2. Czym różnią się int("4") i float("4"), a co zrobią z napisem "4.5"?
  3. Program pokazał ValueError: invalid literal for int() with base 10: 'cztery'. Co takiego zrobił użytkownik?
Podsumowanie

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
input() w konsoliDane od użytkownika przychodzą z formularza na stronie, z aplikacji w telefonie albo z czytnika kodów; konsola zostaje do nauki i do narzędzizastąpione
Tekst zachęty w nawiasie inputEtykieta pola i szara podpowiedź w formularzu: ten sam pomysł, tylko narysowany zamiast wypisanycodziennie
int() na tym, co wpisał użytkownikSerwer sprawdza każde pole jeszcze raz, po swojemu, bo z przeglądarki może przyjść dowolny tekstcodziennie
ValueError przerywa programProgram przechwytuje błąd i prosi o poprawienie jednego pola, zamiast wyłączyć się całej reszcie użytkownikówrozszerzane