Python:
Generazione di numeri casuali
Come fare:
Python fornisce il modulo random
che aiuta nella generazione di numeri casuali per vari usi. Ecco come iniziare:
Importazione del modulo
import random
Generazione di un Intero Casuale Tra due numeri qualsiasi.
random_integer = random.randint(1, 10) print(random_integer)
Output di esempio:
7
Generazione di un Float Tra 0 e 1.
random_float = random.random() print(random_float)
Output di esempio:
0.436432634653
Se hai bisogno di un float in un diverso intervallo, moltiplica:
random_float_range = random.random() * 5 # Da 0 a 5 print(random_float_range)
Output di esempio:
3.182093745
Scelta di un Elemento Casuale da una Lista
greetings = ['Hello', 'Hi', 'Hey', 'Hola', 'Bonjour'] print(random.choice(greetings))
Output di esempio:
Hola
Mescolare una Lista Perfetto per giochi di carte o qualsiasi applicazione che necessita di randomizzare l’ordine.
numbers = list(range(10)) random.shuffle(numbers) print(numbers)
Output di esempio:
[2, 5, 0, 4, 9, 8, 1, 7, 6, 3]
Approfondimento
Il modulo random
in Python utilizza un generatore di numeri pseudo-casuali (PRNG), in particolare l’algoritmo Mersenne Twister, che è buono per applicazioni di uso generale ma non adatto per scopi crittografici a causa della sua prevedibilità se vengono osservati abbastanza output. Il modulo secrets
, introdotto in Python 3.6, offre un’alternativa migliore per generare numeri casuali criptograficamente forti, particolarmente utile in applicazioni sensibili alla sicurezza. Ad esempio, generando un token casuale e sicuro per un link di reimpostazione della password:
import secrets
token = secrets.token_hex(16)
print(token)
Storicamente, generare numeri casuali che sono veramente casuali è stata una sfida nel campo dell’informatica, con i primi metodi che si affidavano a fenomeni fisici o semi inseriti manualmente. Lo sviluppo e l’adozione di algoritmi come Mersenne Twister (utilizzato di default nel modulo random
di Python fino almeno al mio ultimo aggiornamento delle conoscenze nel 2023) hanno segnato un significativo progresso. Tuttavia, la continua ricerca di algoritmi più sicuri ed efficienti ha portato all’inclusione del modulo secrets
per compiti legati alla crittografia. Questa evoluzione riflette l’importanza crescente della sicurezza nello sviluppo del software e la necessità di una casualità più robusta in applicazioni che vanno dalla crittografia alla generazione di token sicuri.