Python:
Generowanie liczb losowych
Jak to zrobić:
Python dostarcza moduł random, który pomaga w generowaniu losowych liczb do różnych zastosowań. Oto jak zacząć:
Importowanie modułu
import randomGenerowanie losowej liczby całkowitej Między dowolnymi dwiema liczbami.
random_integer = random.randint(1, 10) print(random_integer)Przykładowy wynik:
7Generowanie liczby zmiennoprzecinkowej Między 0 a 1.
random_float = random.random() print(random_float)Przykładowy wynik:
0.436432634653Jeśli potrzebujesz liczby zmiennoprzecinkowej w innym zakresie, pomnóż:
random_float_range = random.random() * 5 # od 0 do 5 print(random_float_range)Przykładowy wynik:
3.182093745Wybieranie losowego elementu z listy
greetings = ['Hello', 'Hi', 'Hey', 'Hola', 'Bonjour'] print(random.choice(greetings))Przykładowy wynik:
HolaMieszanie listy Idealne dla gier karcianych lub każdej aplikacji wymagającej losowego porządku.
numbers = list(range(10)) random.shuffle(numbers) print(numbers)Przykładowy wynik:
[2, 5, 0, 4, 9, 8, 1, 7, 6, 3]
Dogłębna analiza
Moduł random w Pythonie korzysta z generatora liczb pseudolosowych (PRNG), konkretnie z algorytmu Mersenne Twister, który jest dobry do zastosowań ogólnego użytku, ale nie nadaje się do celów kryptograficznych ze względu na jego przewidywalność, jeśli obserwuje się wystarczająco dużo wyników. Moduł secrets, wprowadzony w Pythonie 3.6, oferuje lepszą alternatywę do generowania kryptograficznie mocnych liczb losowych, szczególnie przydatną w aplikacjach wrażliwych na bezpieczeństwo. Na przykład generowanie bezpiecznego, losowego tokenu do linku resetowania hasła:
import secrets
token = secrets.token_hex(16)
print(token)Historycznie generowanie naprawdę losowych liczb było wyzwaniem w informatyce, gdzie wczesne metody polegały na zjawiskach fizycznych lub ręcznie wprowadzanych ziarnach. Rozwój i przyjęcie algorytmów takich jak Mersenne Twister (używany domyślnie w module random Pythona przynajmniej do mojej ostatniej aktualizacji wiedzy w 2023) oznaczało znaczący postęp. Jednak ciągłe poszukiwanie bardziej bezpiecznych i wydajnych algorytmów doprowadziło do wprowadzenia modułu secrets do zadań związanych z kryptografią. Ta ewolucja odzwierciedla rosnące znaczenie bezpieczeństwa w rozwoju oprogramowania i potrzebę bardziej solidnej losowości w aplikacjach, od szyfrowania po generowanie bezpiecznych tokenów.