Rozdział 5 · Pobawmy się liczbami!
seed i powtarzalność
Pseudolosowość może zostać „zamrożona”
seed() — ustaw stan początkowy generatora
Ponieważ generator pseudolosowy jest formułą o stanie, to przez określenie tego samego początkowego stan („ziarnista”
seed.py
import random
random.seed(42)
print(random.randint(1, 100)) # zawsze jest tą samą liczbą, gdy seed(42)
random.seed(42) # zresetuj stan
print(random.randint(1, 100)) # ta sama liczba co za pierwszym razem
Dlaczego jest to potrzebne w praktyce?
Powtarzalność jest kluczowa podczas debugowania: jeśli błąd pojawia się tylko „czasami”
random.seed() pozwala przechwycić konkretną „losową”Niezależne generatory: random.Random()
Wszystkie funkcje modułu randompracowaliśmy z
Jeden powszechny, „globalny”
random_instance.py
import random
generator_a = random.Random(1)
generator_b = random.Random(1)
print(generator_a.randint(1, 100)) # oba generatory są tworzone z tą samą seed –
print(generator_b.randint(1, 100)) # oznacza, że uzyskają ten sam wynik niezależnie od siebie
random nie jest bezpieczny dla haseł i kluczy
razy random — przewidywalny generator (ten sam
seed → tej samej sekwencji) nie może być używana tam, gdzie losowość chroni przed
hakowanie: hasła, tokeny sesji, klucze szyfrujące. Aby to zrobić, standardowa biblioteka Python
Jest osobny moduł — secrets, zaprojektowany dokładnie dla
bezpieczeństwa, a nie dla szybkości.
random czy secrets?
Czy potrzebujesz losowości w grze, symulacji, przypadku testowym?
→
zastosowanie
randomPotrzebna losowość dla hasła, tokena, klucza bezpieczeństwa?
→
zastosowanie
secretssecrets_primer.py
import secrets
token = secrets.token_hex(16) # kryptograficznie bezpieczny losowy token
print(token)
Nie będziemy secrets szczegółowo analizować w tym rozdziale
Wystarczy pamiętać o samej zasadzie:
random — do gier, symulacji i zadań edukacyjnych; secrets — tam, gdzie przypadek chroni coś cennego. O bezpieczeństwie porozmawiamy dokładniej w późniejszych rozdziałach.Praktyka: seed i powtarzalność
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji