Moduł, czyli gotowe funkcje napisane przez kogoś innego
Dwa zapisy importu: import math i from math import sqrt
Moduł math: sqrt, floor, ceil, pi
Moduł random: randint, choice i program z kostką
Rozgrzewka · 3 minuty
Co pamiętacie z lekcji o funkcjach?
Co robi słowo def i po co w ogóle piszemy własne funkcje?
Co robi instrukcja return w funkcji?
Czym różni się parametr od argumentu?
Część 1 · Czym jest moduł
Gotowe funkcje z cudzej półki
Moduł to plik z rozszerzeniem .py, w którym ktoś zebrał funkcje dotyczące jednego zagadnienia. Python przynosi setki takich plików ze sobą: to biblioteka standardowa. Nie trzeba ich instalować, wystarczy po nie sięgnąć.
docs.python.org, The Python Tutorial, rozdz. 6 (Modules) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 125–126 (8.3 Test pierwszości liczby, pojęcie modułu z marginesu)
Część 1 · Dwa zapisy importu
Bez importu Python nie zna tej nazwy
print(sqrt(25))
NameError: name 'sqrt' is not defined
import math
print(math.sqrt(25))
5.0
from math import sqrt
print(sqrt(25))
5.0
Bez importu Python przerywa program: nie wie, skąd wziąć nazwę sqrt.
import math wnosi nazwę modułu. Do funkcji sięgacie przez kropkę: math.sqrt(25).
from math import sqrt wnosi samą funkcję, więc piszecie krótko sqrt(25), ale math.floor wtedy nie zadziała.
Kropka w math.sqrt czyta się „funkcja sqrt z modułu math”, tak jak nazwisko po imieniu.
docs.python.org, The Python Tutorial, rozdz. 6.1 (More on Modules) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 228 (dodatek 9, słowa kluczowe import i from)
Część 2 · Moduł math
math: liczenie, którego nie chcecie pisać sami
Zapis
Co robi
Wynik
math.sqrt(25)
pierwiastek kwadratowy
5.0
math.sqrt(2)
pierwiastek kwadratowy
1.4142135623730951
math.floor(4.7)
zaokrąglenie w dół (podłoga)
4
math.ceil(4.2)
zaokrąglenie w górę (sufit)
5
math.pi
stała π, bez nawiasu
3.141592653589793
round(math.pi, 2)
zaokrąglenie do dwóch miejsc
3.14
Dla liczb ujemnych „w dół” znaczy w stronę mniejszych: math.floor(-2.5) to -3, a math.ceil(-2.5) to -2.
docs.python.org, The Python Tutorial, rozdz. 10.6 (Mathematics) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 227 (dodatek 8, wybrane funkcje matematyczne z biblioteki math)
Część 3 · Moduł random
random: ten sam kod, inny wynik
import random
print(random.randint(1, 6))
print(random.choice(["orzeł", "reszka"]))
Przykładowy wynik jednego uruchomienia: 3, potem orzeł. Po drugim uruchomieniu wyjdzie coś innego.
randint(a, b) oddaje losową liczbę całkowitą od a do b.
choice(items) oddaje losowy element niepustej listy.
W praktyce: dokumentacja ostrzega, że losowanie z modułu random nie nadaje się do haseł ani kluczy. Do takich zadań Python ma osobny moduł secrets.
docs.python.org, The Python Tutorial, rozdz. 10.6 (Mathematics) · docs.python.org, dokumentacja biblioteki standardowej, moduł random (randint, choice, ostrzeżenie o zastosowaniach bezpieczeństwa)
Część 3 · Skąd dokąd losuje
randint bierze oba końce, range nie
docs.python.org, dokumentacja biblioteki standardowej, moduł random (randint: a <= N <= b) · docs.python.org, The Python Tutorial, rozdz. 4.3 (The range() Function)
Część 3 · Cały program
Trzy rzuty kostką i suma oczek
import random
print("Rzucam kostką trzy razy.")
total = 0
for i in range(3):
throw = random.randint(1, 6)
print("Rzut", i + 1, "to", throw)
total = total + throw
print("Razem oczek:", total)
Rzucam kostką trzy razy.
Rzut 1 to 1
Rzut 2 to 2
Rzut 3 to 5
Razem oczek: 8
Drugie uruchomienie dało 5, 1 i 3, czyli 9 oczek. Kod ten sam, wynik inny.
Ćwiczenie · przy komputerze · 11 minut
Ćwiczenie: trzy małe programy
Otwórz edytor i napisz trzy programy, każdy w osobnym pliku. Uruchom każdy co najmniej dwa razy.
Plik root.py: poproś o liczbę, wczytaj ją i wypisz jej pierwiastek zaokrąglony do dwóch miejsc po przecinku. Sprawdź program dla liczby 20.
Plik dice.py: wylosuj dwa rzuty kostką, wypisz każdy z osobna, a pod spodem ich sumę.
Plik lunch.py: zrób listę czterech potraw i wylosuj z niej jedną, wypisując „Dziś na obiad: …”.
Jak sprawdzić, czy program jest dobry
Uruchom każdy program dwa razy. Programy z random mają za drugim razem dać inny wynik. Jeśli zobaczysz NameError, brakuje wiersza importu na samej górze pliku.
Sprawdzenie
Trzy pytania na koniec
Co się stanie, gdy użyjesz sqrt(25) bez wiersza importu?
Czym różni się import math od from math import sqrt?
Ile różnych wyników może dać random.randint(1, 6)?
Podsumowanie
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
import math
Nikt nie pisze pierwiastków, dat ani obsługi sieci od zera: program składa się z gotowych modułów
codziennie
random.choice
Serwis losuje, którą wersję strony Wam pokazać, i potem porównuje, która sprzedaje lepiej
codziennie
random.randint do hasła
Generatory haseł i kodów jednorazowych biorą losowość z modułu secrets, bo random da się przewidzieć
zastępowane
Biblioteka standardowa
Modułów spoza niej doinstalowuje się tysiące poleceniem pip install, każdy to czyjś kod