Program sprawdzający, czy liczba dzieli się przez 3
Reszty z dzielenia przez 2, 3, 5 i 7 bez zmiany funkcji
Podręcznik: s. 121–123 oraz dodatek 7, s. 226.
Rozgrzewka · 3 minuty
Pierwsze, złożone i rozkład na czynniki
Wracamy do poprzedniej lekcji o liczbach pierwszych.
Jaką liczbę nazywamy pierwszą, a jaką złożoną?
Ile liczb pierwszych jest wśród liczb mniejszych od 100?
Liczba 91 kończy się cyfrą 1. Czy to wystarczy, żeby uznać ją za pierwszą?
podręcznik s. 117–120
Część 1 · Po co funkcje
Przepis zapisany raz, używany wiele razy
Trudniejszy problem najlepiej rozłożyć na prostsze podproblemy. W praktyce oznacza to wyodrębnianie fragmentów programu, czyli podprogramów. W Pythonie takie podprogramy nazywamy funkcjami. Funkcja to jak przepis w książce kucharskiej: opis czynności ma swoją nazwę, a potem wystarczy powiedzieć nazwę, żeby wszystko wykonać od nowa.
Podręcznik Informatyka na czasie 2, s. 121 (8.2 Podzielność liczb, „Funkcje w języku Python”, pojęcie z marginesu: funkcja)
Część 1 · Budowa funkcji
Nagłówek, blok i słowo return
def function_name(parameters):
statements
Nagłówek to def, nazwa funkcji, parametry w nawiasie i dwukropek.
Parametry funkcji to nazwy wartości, które funkcja dostaje do pracy.
Blok instrukcji pod nagłówkiem jest wcięty, tak jak w pętli.
Instrukcja return oddaje wynik temu, kto funkcję wywołał.
Nazwy funkcji i zmiennych piszemy bez polskich znaków.
Podręcznik Informatyka na czasie 2, s. 121 (8.2 Podzielność liczb, budowa funkcji, pojęcia z marginesu: parametr funkcji, instrukcja return, ramka „Warto wiedzieć”) oraz s. 226 (dodatek 7 Podstawowe typy instrukcji, funkcja trapezoid_area)
Część 1 · Definicja kontra wywołanie
Zapisanie przepisu to jeszcze nie gotowanie
Funkcja bez wywołania nie robi nic, tak jak przepis, którego nikt nie użył. Ta sama definicja obsłuży square_area(5), square_area(12) i każdą inną liczbę.
Podręcznik Informatyka na czasie 2, s. 121–122 (8.2 Podzielność liczb, definicja funkcji i jej wywołanie)
Część 2 · Podzielność przez 3
Program, który liczy resztę z dzielenia
Liczba dzieli się przez 3 wtedy, gdy reszta z dzielenia przez 3 wynosi zero. Tworzymy funkcję division_remainder i wywołujemy ją dla liczby podanej przez użytkownika oraz dla trójki.
Specyfikacja
Dane: dwie liczby naturalne a i b.
Wynik: reszta z dzielenia liczby a przez liczbę b.
1. def division_remainder(a, b):
2. return a % b
3.
4. number = int(input("Podaj liczbę: "))
5.
6. print("Reszta z dzielenia", number, end=" ")
7. print("przez 3 wynosi:", end=" ")
8. print(division_remainder(number, 3))
Podręcznik Informatyka na czasie 2, s. 121–122 (8.2 Podzielność liczb, ramka „Specyfikacja” i kod źródłowy programu sprawdzającego podzielność liczby przez 3)
Część 2 · Wiersz po wierszu
Cztery wiersze, które trzeba znać
Wiersze 1. i 2. to definicja funkcji. W nawiasie jest lista parametrów, a wiersz 2. wyznacza resztę operatorem % i oddaje wynik słowem return.
Wiersz 4. pyta użytkownika o liczbę i zapamiętuje ją w zmiennej number.
Wiersz 8. to wywołanie funkcji dla dwóch wartości: zmiennej number oraz liczby 3.
Podaj liczbę: 23101985
Reszta z dzielenia 23101985 przez 3 wynosi: 2
>>>
Reszta wyszła 2, więc 23101985 nie dzieli się przez 3. Gdyby wyszło 0, liczba dzieliłaby się bez reszty.
Podręcznik Informatyka na czasie 2, s. 122 (8.2 Podzielność liczb, omówienie wierszy 1., 2., 4. i 8. oraz rys. 8.3 „Wywołanie programu sprawdzającego podzielność przez 3”)
Część 2 · Dwa rodzaje parametrów
Parametr formalny i parametr aktualny
Parametr aktualny przekazuje faktyczną wartość do funkcji zdefiniowanej wcześniej. Ta sama funkcja policzy resztę z dzielenia dowolnych liczb, bo w środku pracuje na nazwach a i b, a nie na konkretnych liczbach.
Podręcznik Informatyka na czasie 2, s. 122–123 (8.2 Podzielność liczb, pojęcie z marginesu: parametry formalny i aktualny funkcji)
Program ma podać cztery reszty: z dzielenia przez 2, 3, 5 i 7. Funkcja już jest, więc zmiana to samo dopisanie czterech wywołań.
Funkcje definiujemy, gdy chcemy nazwać pewną grupę instrukcji i oddzielić fragment kodu od reszty programu, zwykle po to, aby go wielokrotnie wykorzystać.
Podręcznik Informatyka na czasie 2, s. 123 (8.2 Podzielność liczb, kod źródłowy programu obliczającego reszty z dzielenia przez 2, 3, 5, 7 oraz ramka „Zapamiętaj”)
Część 3 · Nazwy funkcji
Skąd biorą się nazwy funkcji?
Nazwa funkcji ma mówić, co ta funkcja robi. division_remainder („reszta z dzielenia”) jest dobrą nazwą, bo po samej nazwie widać wynik. Nazwa function1 nie mówi nic i za miesiąc nikt nie odgadnie, po co powstała.
Ciekawostka. Programiści Pythona mają wspólny zbiór zaleceń o nazwie PEP 8, napisany w 2001 roku przez twórcę języka Guida van Rossuma razem z Barrym Warsawem i Alyssą Coghlan. Nazwy funkcji i zmiennych piszemy małymi literami, a słowa oddzielamy podkreśleniem: division_remainder. Zapis z wielkich liter, jak ResztaZDzielenia w podręczniku, jest dopuszczony tylko tam, gdzie tak przyjęto wcześniej.
Na lekcji piszemy jak w pracy zespołowej: po angielsku, małymi literami, z podkreśleniem. W podręczniku te same funkcje mają polskie nazwy z wielkich liter.
ciekawostka o PEP 8 i cytowane zalecenie: peps.python.org/pep-0008/
Ćwiczenie · na kartce · 12 minut
Ćwiczenie: tabela śledzenia i własna funkcja
Podpisz kartkę. Przepisz wiersze 1., 2. i 8. ze slajdu 6, ze zmianą dzielnika z 3 na 17.
Przepisz tabelę z prawej i uzupełnij ją dla liczb 34, 100 i 123.
Napisz własną funkcję is_even na wzór podręcznikowej: def z jednym parametrem, wiersz z return, jedno wywołanie.
a (parametr) | b | result return | dzieli się?
34 | 17 | |
100 | 17 | |
123 | 17 | |
W ostatniej kolumnie wpisz „tak” albo „nie”. Wcięcie w bloku funkcji zaznacz wyraźnie.
Dla chętnych (dom):uruchom u siebie plik divisibility.py: cztery wywołania dla 2, 3, 5 i 7, wiersze 6.–8. w jednej linii, wersja z pętlą for po liście [2, 3, 5, 7].
Podręcznik Informatyka na czasie 2, s. 123 (ćwiczenie 1b: podzielność przez 17; ćwiczenie 2a i 2b: skrócenie wierszy 6.–8. i pętla for po liście)
Część 3 · Pytania kontrolne
Trzy pytania na koniec
Czym różni się definicja funkcji od jej wywołania?
Co robi instrukcja return i dokąd trafia to, co ona przekazuje?
Dlaczego program liczący reszty z dzielenia przez 2, 3, 5 i 7 nie wymagał żadnej zmiany w samej funkcji?
Podręcznik Informatyka na czasie 2, s. 121–123 (8.2 Podzielność liczb, ramka „Zapamiętaj”)
Część 3 · Podsumowanie
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
Własna funkcja licząca resztę
Python ma to gotowe: divmod(a, b) zwraca naraz iloraz i resztę z dzielenia całkowitego, a sam operator % zwraca samą resztę.
zastąpione
Nazwa division_remainder
Zespoły trzymają się jednego zapisu z zaleceń PEP 8: nazwy funkcji małymi literami ze znakiem podkreślenia.
zmienione
Ten sam fragment kodu wpisany kilka razy
Powtarzający się fragment zamienia się w jedną funkcję i wywołuje w wielu miejscach. Poprawka wtedy idzie w jednym miejscu, a nie w pięciu.
nadal w użyciu
Funkcje w jednym pliku z programem
Funkcje grupuje się w moduły i biblioteki, a program dołącza je poleceniem import.
rozszerzane
return oddaje jedną wartość
Funkcja może oddać kilka wartości naraz, jak divmod, który zwraca parę liczb.