Come configurare smartphone e PC. Portale informativo
  • casa
  • Windows Phone
  • Generatori di numeri pseudo-casuali e metodi per testarli. Generatore di numeri pseudo-casuali - casuale

Generatori di numeri pseudo-casuali e metodi per testarli. Generatore di numeri pseudo-casuali - casuale


Si noti che, idealmente, la curva di densità della distribuzione dei numeri casuali assomiglierebbe a quella mostrata in Fig. 22.3. Cioè, in caso ideale ogni intervallo contiene lo stesso numero di punti: n io = n/K , dove n- il numero totale di punti, K- il numero di intervalli, io= 1,…, K .

Riso. 22.3. Diagramma di frequenza di numeri casuali,
generato da un generatore ideale teoricamente

Va ricordato che la generazione di un numero casuale arbitrario consiste in due fasi:

  • generare un numero casuale normalizzato (cioè distribuito uniformemente da 0 a 1);
  • conversione di numeri casuali normalizzati R io a numeri casuali X io, che sono distribuiti secondo la legge di distribuzione (arbitraria) dell'utente richiesta o nell'intervallo richiesto.

I generatori di numeri casuali si dividono in:

  • fisico;
  • tabellare;
  • algoritmico.

RNG fisico

Un esempio di RNG fisico è: una moneta (testa - 1, croce - 0); dado; un tamburo con una freccia divisa in settori con numeri; generatore di rumore hardware (HS), che viene utilizzato come dispositivo termico rumoroso, ad esempio un transistor (Fig. 22.4-22.5).

Riso. 22.4. Schema del metodo hardware per la generazione di numeri casuali
Riso. 22.5. Diagramma per ottenere numeri casuali con il metodo hardware
Il compito "Generazione di numeri casuali usando una moneta"

Usa una moneta per generare un numero casuale di 3 cifre distribuito uniformemente da 0 a 1. La precisione è di tre cifre decimali.

Il primo modo per risolvere il problema
Lancia una moneta 9 volte e, se esce croce, scrivi "0", se esce testa, quindi "1". Quindi, diciamo che come risultato dell'esperimento, abbiamo ottenuto una sequenza casuale 100110100.

Disegna un intervallo da 0 a 1. Leggendo i numeri in sequenza da sinistra a destra, dividi l'intervallo a metà e scegli ogni volta una delle parti dell'intervallo successivo (se è caduto 0, poi quello di sinistra, se è caduto 1, poi quello di destra). Pertanto, puoi raggiungere qualsiasi punto dell'intervallo, con la precisione che desideri.

Così, 1 : l'intervallo viene dimezzato - e, - viene selezionata la metà destra, l'intervallo viene ridotto:. Numero successivo, 0 : l'intervallo viene dimezzato - e, - viene selezionata la metà sinistra, l'intervallo viene ridotto:. Numero successivo, 0 : l'intervallo viene dimezzato - e, - viene selezionata la metà sinistra, l'intervallo viene ridotto:. Numero successivo, 1 : l'intervallo viene dimezzato - e, - viene selezionata la metà destra, l'intervallo viene ridotto:.

Dalla condizione dell'accuratezza del problema, è stata trovata la soluzione: è un numero qualsiasi dell'intervallo, ad esempio 0,625.

In linea di principio, se ti avvicini rigorosamente, la divisione degli intervalli deve essere continuata fino a quando i limiti sinistro e destro dell'intervallo trovato COINCIDONO l'uno con l'altro con una precisione della terza cifra decimale. Cioè, dal punto di vista della precisione, il numero generato non sarà più distinguibile da nessun numero dell'intervallo in cui si trova.

Il secondo modo per risolvere il problema
Dividiamo la sequenza binaria risultante 100110100 in triadi: 100, 110, 100. Dopo aver convertito questi numeri binari in decimali otteniamo: 4, 6, 4. Sostituendo "0." davanti, otteniamo: 0,464. Con questo metodo si possono ottenere solo numeri da 0,000 a 0,777 (poiché il massimo che può essere spremuto da tre cifre binarie è 111 2 = 7 8) - cioè, in effetti, questi numeri sono rappresentati in un sistema numerico ottale. Per tradurre ottale numeri in decimale eseguiremo la rappresentazione:
0,464 8 = 4 · 8 –1 + 6 · 8 –2 + 4 · 8 –3 = 0,6015625 10 = 0,602 10.
Quindi, il numero richiesto è pari a: 0.602.

RNG tabulare

Gli RNG tabulari utilizzano tabelle appositamente compilate contenenti numeri non correlati verificati, ovvero indipendenti l'uno dall'altro, come fonte di numeri casuali. Tavolo 22.1 mostra un piccolo frammento di tale tabella. Percorrendo la tabella da sinistra a destra dall'alto verso il basso, puoi ottenere numeri casuali distribuiti uniformemente da 0 a 1 con il numero di posizioni decimali richiesto (nel nostro esempio, usiamo tre posizioni decimali per ogni numero). Poiché i numeri nella tabella non dipendono l'uno dall'altro, la tabella può essere attraversata in modi diversi, ad esempio dall'alto verso il basso o da destra a sinistra o, ad esempio, è possibile selezionare numeri che si trovano in posizione pari.

Tabella 22.1.
Numeri casuali. uniformemente
distribuito da 0 a 1 numeri casuali
Numeri casuali Uniformemente distribuito
da 0 a 1 numeri casuali
9 2 9 2 0 4 2 6 0.929
9 5 7 3 4 9 0 3 0.204
5 9 1 6 6 5 7 6 0.269
… …

Dignità questo metodo in quanto fornisce numeri veramente casuali poiché la tabella contiene numeri non correlati verificati. Svantaggi del metodo: richiede molta memoria per memorizzare un numero elevato di cifre; grandi difficoltà nel generare e controllare tali tabelle, le ripetizioni nell'uso di una tabella non garantiscono più la casualità della sequenza numerica, e quindi l'affidabilità del risultato.

C'è una tabella contenente 500 numeri verificati assolutamente casuali (tratto dal libro di I. G. Venetsky, V. I. Venetskaya "Concetti e formule matematici e statistici di base nell'analisi economica").

RNG algoritmico

I numeri generati utilizzando questi RNG sono sempre pseudo-casuali (o quasi-casuali), ovvero ogni numero generato successivamente dipende da quello precedente:

R io + 1 = F(R io) .

Le sequenze costituite da tali numeri formano dei loop, cioè esiste necessariamente un ciclo che si ripete un numero infinito di volte. I cicli che si ripetono sono chiamati periodi.

Il vantaggio dei dati RNG è la velocità; i generatori praticamente non richiedono risorse di memoria, sono compatti. Svantaggi: i numeri non possono essere chiamati completamente casuali, poiché esiste una dipendenza tra loro, così come la presenza di periodi nella sequenza di numeri quasi casuali.

Considera diversi metodi algoritmici per ottenere un RNG:

  • metodo dei quadrati medi;
  • metodo dei prodotti medi;
  • metodo di miscelazione;
  • metodo lineare congruente.

Metodo del quadrato medio

C'è un numero di quattro cifre R 0. Questo numero è al quadrato e inserito in R uno . Lontano dalla R 1 viene preso al centro (quattro cifre centrali) - un nuovo numero casuale - e scritto in R 0. Quindi la procedura viene ripetuta (vedi fig. 22.6). Nota che in effetti non è necessario prendere come un numero casuale ghij, un 0.ghij- con uno zero e un punto decimale assegnati a sinistra. Questo fatto si riflette come in Fig. 22.6 e successive figure simili.

Riso. 22.6. Schema quadrati medi

Svantaggi del metodo: 1) se a qualche iterazione il numero R 0 diventa uguale a zero, quindi il generatore degenera, quindi la scelta corretta del valore iniziale è importante R 0; 2) il generatore ripeterà la sequenza attraverso m n passaggi (nella migliore delle ipotesi), dove n- capacità cifre R 0 , m- la base del sistema di numerazione.

Ad esempio, nella Fig. 22.6: se numero R 0 sarà rappresentato in notazione binaria, la sequenza di numeri pseudocasuali sarà ripetuta in 2 4 = 16 passi. Nota che la ripetizione della sequenza può avvenire prima se il numero iniziale non è scelto bene.

Il metodo sopra descritto è stato proposto da John von Neumann e risale al 1946. Poiché questo metodo si è rivelato inaffidabile, è stato rapidamente abbandonato.

Metodo dei prodotti intermedi

Numero R 0 viene moltiplicato per R 1, dal risultato ottenuto R 2 estrarre il centro R 2 * (questo è un altro numero casuale) e moltiplicato per R uno . Tutti i successivi numeri casuali sono calcolati utilizzando questo schema (vedi Fig. 22.7).

Riso. 22.7. Metodo dei prodotti intermedi

Metodo di agitazione

Il metodo shuffle utilizza le operazioni per spostare ciclicamente il contenuto di una cella a sinistra ea destra. L'idea del metodo è la seguente. Lascia che la cellula conservi il seme R 0. Spostando ciclicamente il contenuto della cella a sinistra di 1/4 della lunghezza della cella, otteniamo un nuovo numero R 0 *. Allo stesso modo, spostando ciclicamente il contenuto di una cella R 0 a destra per 1/4 della lunghezza della cella, otteniamo il secondo numero R 0 **. Somma di numeri R 0 * e R 0 ** fornisce un nuovo numero casuale R uno . Ulteriore R 1 è inserito in R 0, e l'intera sequenza di operazioni viene ripetuta (vedi Figura 22.8).


Riso. 22.8. Diagramma del metodo di miscelazione

Si prega di notare che il numero risultante dalla sommatoria R 0 * e R 0 **, potrebbe non entrare completamente nella cella R uno . In questo caso, le cifre extra dovrebbero essere scartate dal numero ricevuto. Spieghiamo questo per la Fig. 22.8, dove tutte le celle sono rappresentate da otto cifre binarie. Permettere R 0 * = 10010001 2 = 145 10 , R 0 ** = 10100001 2 = 161 10 , poi R 0 * + R 0 ** = 100110010 2 = 306 10 ... Come puoi vedere, il numero 306 occupa 9 cifre (nel sistema numerico binario) e la cella R 1 mi piace R 0) può contenere un massimo di 8 bit. Pertanto, prima di inserire il valore in R 1 è necessario rimuovere un "extra", il bit più a sinistra dal numero 306, per cui in R 1 non andrà a 306, ma a 00110010 2 = 50 10. Si noti inoltre che in linguaggi come Pascal, il "troncamento" dei bit extra quando una cella viene traboccata viene eseguito automaticamente in base al tipo di variabile specificato.

Metodo lineare congruente

Il metodo della congruenza lineare è una delle procedure più semplici e più comunemente utilizzate per simulare numeri casuali. Questo metodo utilizza il mod ( X, ), che restituisce il resto del primo argomento diviso per il secondo. Ogni numero casuale successivo viene calcolato in base al numero casuale precedente utilizzando la seguente formula:

R io+ 1 = mod ( K · R io + B, m) .

Si chiama una sequenza di numeri casuali ottenuta usando questa formula sequenza lineare congruente... Molti autori chiamano una sequenza congruente lineare per B = 0 metodo moltiplicativo congruente, e a B ≠ 0 — metodo congruente misto.

Per un generatore di alta qualità, è necessario scegliere coefficienti adeguati. È necessario che il numero m era abbastanza grande, dal momento che il periodo non può avere di più m elementi. D'altra parte, la divisione utilizzata in questo metodo è un'operazione piuttosto lenta, quindi sarebbe logico che una macchina di calcolo binario scegliesse m = 2 n, poiché in questo caso trovare il resto della divisione si riduce all'interno del computer ad un'operazione logica binaria "AND". È anche comune scegliere il numero primo più grande m meno di 2 n: nella letteratura speciale si dimostra che in questo caso i bit meno significativi del numero casuale risultante R io+ 1 si comportano in modo casuale come i più vecchi, il che ha un effetto positivo sull'intera sequenza di numeri casuali nel suo insieme. Un esempio è uno di numeri di Mersenne uguale a 2 31 - 1, e quindi m= 2 31 - 1.

Uno dei requisiti per le sequenze lineari congruenti è la massima lunghezza possibile del periodo. La durata del periodo dipende dai valori m , K e B... Il teorema che presentiamo di seguito ci permette di determinare se è possibile raggiungere un periodo di lunghezza massima per valori specifici m , K e B .

Teorema... Sequenza lineare congruente definita da numeri m , K , B e R 0, ha un periodo di lunghezza m se e solo se:

  • i numeri B e m reciprocamente semplice;
  • K- 1 multiplo P per ogni semplice P che è un divisore m ;
  • K- 1 multiplo di 4 se m multiplo di 4.

Infine, concludiamo con un paio di esempi sull'utilizzo del metodo congruenziale lineare per generare numeri casuali.

Si è riscontrato che una serie di numeri pseudo-casuali generati dai dati dell'esempio 1 sarà ripetuta ogni m/ 4 numeri. Numero Qè impostato arbitrariamente prima di iniziare i calcoli, ma va tenuto presente che la serie dà l'impressione di essere casuale per grandi K(che significa che Q). Il risultato può essere leggermente migliorato se B strano e K= 1 + 4 Q - in questo caso la riga verrà ripetuta ogni m numeri. Dopo una lunga ricerca K i ricercatori si sono stabiliti sui valori 69069 e 71365.

Un generatore di numeri casuali che utilizza i dati dell'Esempio 2 produrrà numeri casuali non ripetuti con un periodo di 7 milioni.

Il metodo moltiplicativo per generare numeri pseudo-casuali è stato proposto da D. H. Lehmer nel 1949.

Controllo della qualità del generatore

La qualità dell'intero sistema e l'accuratezza dei risultati dipendono dalla qualità dell'RNG. Pertanto, la sequenza casuale generata dall'RNG deve soddisfare una serie di criteri.

I controlli effettuati sono di due tipi:

  • controlli di uniformità di distribuzione;
  • verifica dell'indipendenza statistica.

Verifiche di uniformità di distribuzione

1) RNG dovrebbe produrre vicino ai seguenti valori di parametri statistici caratteristici di una legge casuale uniforme:

2) Test di frequenza

Il test di frequenza consente di scoprire quanti numeri rientrano nell'intervallo (m R – σ R ; m R + σ R) , ovvero (0,5 - 0,2887; 0,5 + 0,2887) o, in definitiva, (0,2113; 0,7887). Poiché 0.7887 - 0.2113 = 0.5774, concludiamo che in un buon RNG, circa il 57,7% di tutti i numeri casuali caduti dovrebbe rientrare in questo intervallo (vedi Fig. 22.9).

Riso. 22.9. Diagramma di frequenza di un RNG ideale
in caso di verifica per un test di frequenza

È inoltre necessario tenere conto del fatto che il numero di numeri che rientrano nell'intervallo (0; 0,5) dovrebbe essere approssimativamente uguale al numero di numeri che rientrano nell'intervallo (0,5; 1).

3) Chi-quadro test

Il test chi quadrato (test χ 2) è uno dei test statistici più famosi; è il metodo principale utilizzato in combinazione con altri criteri. Il test chi quadrato è stato proposto nel 1900 da Karl Pearson. Il suo notevole lavoro è considerato il fondamento della moderna statistica matematica.

Nel nostro caso, il test chi-quadrato ci permetterà di scoprire quanto il vero Il RNG è vicino allo standard RNG, cioè se soddisfa o meno il requisito della distribuzione uniforme.

Diagramma di frequenza riferimento L'RNG è mostrato in Fig. 22.10. Poiché la legge di distribuzione del RNG di riferimento è uniforme, la probabilità (teorica) P io colpire i numeri in io esimo intervallo (tutti questi intervalli K) è uguale a P io = 1/K ... E così, in ciascuno di K gli intervalli cadranno liscio in poi P io · n numeri ( nÈ il numero totale di numeri generati).

Riso. 22.10. Diagramma di frequenza dell'RNG di riferimento

Un vero RNG produrrà numeri distribuiti (e non necessariamente in modo uniforme!) K intervalli e ogni intervallo includerà n io numeri (nella somma n 1 + n 2 + ... + n K = n ). Come possiamo determinare quanto è buono l'RNG testato e quanto è vicino a quello di riferimento? È abbastanza logico considerare i quadrati delle differenze tra il numero di numeri ricevuti. n io e "riferimento" P io · n ... Aggiungiamoli e come risultato otteniamo:

χ 2 esp. = ( n 1 - P uno · n) 2 + (n 2 - P 2 n) 2 + ... + ( n K – P K · n) 2 .

Da questa formula segue che minore è la differenza in ciascuno dei termini (e quindi minore è il valore di 2 exp.), più forte è la legge di distribuzione dei numeri casuali generati dal RNG reale tende ad essere uniforme.

Nell'espressione precedente, a ciascuno dei termini viene assegnato lo stesso peso (uguale a 1), che di fatto potrebbe non corrispondere alla realtà; quindi, per la statistica chi-quadrato, è necessario normalizzare ciascuno io-esimo termine dividendo per P io · n :

Infine, scriviamo l'espressione risultante in modo più compatto e la semplifichiamo:

Abbiamo ottenuto il valore del test chi quadrato per sperimentale dati.

Tavolo 22,2 sono dati teorico valori chi-quadrato (teoria χ 2), dove ν = n- 1 è il numero di gradi di libertà, PÈ il livello di confidenza definito dall'utente che indica quanto l'RNG deve soddisfare i requisiti di distribuzione uniforme, oppure? P — questa è la probabilità che il valore sperimentale di 2 exp. sarà inferiore alla teoria tabulata (teorica) χ 2. o uguale a lui.

Tabella 22.2.
Alcuni punti percentuali della distribuzione χ2
p = 1% p = 5% p = 25% p = 50% p = 75% p = 95% p = 99%
ν = 1 0.00016 0.00393 0.1015 0.4549 1.323 3.841 6.635
ν = 2 0.02010 0.1026 0.5754 1.386 2.773 5.991 9.210
ν = 3 0.1148 0.3518 1.213 2.366 4.108 7.815 11.34
ν = 4 0.2971 0.7107 1.923 3.357 5.385 9.488 13.28
ν = 5 0.5543 1.1455 2.675 4.351 6.626 11.07 15.09
ν = 6 0.8721 1.635 3.455 5.348 7.841 12.59 16.81
ν = 7 1.239 2.167 4.255 6.346 9.037 14.07 18.48
ν = 8 1.646 2.733 5.071 7.344 10.22 15.51 20.09
ν = 9 2.088 3.325 5.899 8.343 11.39 16.92 21.67
ν = 10 2.558 3.940 6.737 9.342 12.55 18.31 23.21
ν = 11 3.053 4.575 7.584 10.34 13.70 19.68 24.72
ν = 12 3.571 5.226 8.438 11.34 14.85 21.03 26.22
ν = 15 5.229 7.261 11.04 14.34 18.25 25.00 30.58
ν = 20 8.260 10.85 15.45 19.34 23.83 31.41 37.57
ν = 30 14.95 18.49 24.48 29.34 34.80 43.77 50.89
ν = 50 29.71 34.76 42.94 49.33 56.33 67.50 76.15
ν > 30 ν + quadrato (2 ν ) · X P+ 2/3 X 2 P- 2/3 + oh(1 / quadrato ( ν ))
X P = –2.33 –1.64 –0.674 0.00 0.674 1.64 2.33

Considerato accettabile P dal 10% al 90%.

Se 2 esp. molto più della teoria 2. (questo è P- ottimo), quindi il generatore non soddisfa requisito di distribuzione uniforme, poiché i valori osservati n io vai troppo lontano dal teorico P io · n e non può essere considerato casuale. In altre parole, l'intervallo di confidenza è così grande che i vincoli sui numeri diventano molto allentati, i requisiti sui numeri sono deboli. In questo caso, si osserverà un errore assoluto molto grande.

Anche D. Knut nel suo libro "The Art of Programming" ha notato che avere 2 exp. anche piccolo, in generale, non va bene, sebbene sembri, a prima vista, meraviglioso dal punto di vista dell'uniformità. Infatti, prendi una serie di numeri 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, ... - sono ideali dal punto di vista di uniformità, e 2 exp. saranno praticamente zero, ma è improbabile che tu li riconosca come casuali.

Se 2 esp. molto meno della teoria χ2. (questo è P- poco), quindi il generatore non soddisfa il requisito di una distribuzione uniforme casuale, poiché i valori osservati n io troppo vicino al teorico P io · n e non può essere considerato casuale.

Ma se 2 esp. giace in un certo intervallo, tra due valori di 2 theor. che corrispondono, ad esempio, P= 25% e P= 50%, quindi possiamo assumere che i valori dei numeri casuali generati dal sensore siano del tutto casuali.

Inoltre, va tenuto presente che tutti i valori P io · n deve essere abbastanza grande, ad esempio, più di 5 (scoperto empiricamente). Solo allora (con un campione statistico sufficientemente ampio) le condizioni sperimentali possono essere considerate soddisfacenti.

Quindi, la procedura di verifica è la seguente.

Test di indipendenza statistica

1) Verificare la frequenza di occorrenza di una cifra in una sequenza

Diamo un'occhiata a un esempio. Il numero casuale 0.2463389991 è composto dalle cifre 2463389991, e il numero 0.5467766618 è composto dalle cifre 5467766618. Combinando le sequenze di cifre, abbiamo: 24633899915467766618.

È chiaro che la probabilità teorica P io ricadute io-esima cifra (da 0 a 9) è 0.1.

2) Verifica dell'aspetto di serie di numeri identici

Indichiamo con n l numero di serie di cifre consecutive di lunghezza l... Tutto da verificare l da 1 a m, dove mÈ un numero specificato dall'utente: il numero massimo che si verifica di cifre identiche in una serie.

Nell'esempio "24633899915467766618" sono state trovate 2 serie di lunghezza 2 (33 e 77), cioè n 2 = 2 e 2 serie 3 lunghe (999 e 666), cioè n 3 = 2 .

La probabilità di occorrenza di una serie di lunghezza lè uguale a: P l= 9 10 - l (teorico). Cioè, la probabilità di una serie di un carattere di lunghezza è: P 1 = 0,9 (teorico). La probabilità di una serie di due caratteri di lunghezza è: P 2 = 0,09 (teorico). La probabilità di una serie di tre caratteri di lunghezza è: P 3 = 0.009 (teorico).

Ad esempio, la probabilità di una serie di un carattere di lunghezza è P l= 0,9, poiché può esserci un solo carattere su 10 e ci sono 9 caratteri in totale (zero non conta). E la probabilità che due simboli identici "XX" compaiano in una riga è 0,1 · 0,1 · 9, cioè la probabilità di 0,1 che il simbolo "X" appaia nella prima posizione è moltiplicata per la probabilità 0,1 che lo stesso il simbolo apparirà nella seconda posizione "X" e moltiplicato per il numero di tali combinazioni 9.

La frequenza di comparsa della serie è calcolata secondo la formula "chi-quadrato" precedentemente analizzata utilizzando i valori P l .

Nota: il generatore può essere controllato più volte, tuttavia i controlli non sono completi e non garantiscono che il generatore produca numeri casuali. Ad esempio, un generatore che emette la sequenza 12345678912345 ... sarà considerato ideale durante i controlli, il che ovviamente non è del tutto vero.

In conclusione, notiamo che il terzo capitolo del libro di Donald E. Knuth "The Art of Programming" (volume 2) è completamente dedicato allo studio dei numeri casuali. si studia metodi diversi generazione di numeri casuali, test statistici di casualità e conversione di numeri casuali uniformemente distribuiti in altri tipi di variabili casuali. Più di duecento pagine sono state dedicate alla presentazione di questo materiale.

La simulazione della casualità è spesso richiesta nei programmi per computer. Ad esempio, durante lo sviluppo di giochi. Se il programma ha un generatore, cioè un produttore, di un numero casuale, quindi utilizzando il numero ottenuto in questo modo, è possibile selezionare l'uno o l'altro ramo dell'esecuzione del programma o un oggetto arbitrario dalla raccolta. In altre parole, la cosa principale è generare un numero. Su di essa si basa l'emulazione di un diverso tipo di casualità.

Non sappiamo con certezza se c'è un incidente in natura, o ci sembra solo a causa della limitatezza delle nostre conoscenze. Sappiamo solo che non esiste una vera casualità nella programmazione. Non c'è nessun posto dove prendere un numero arbitrario, non puoi programmarne l'aspetto dal nulla. Puoi solo creare un programma che, come risultato dell'applicazione di una formula complessa al "grano", produrrà un numero e ci sembrerà che questo numero sia casuale.

Il "grano" è l'input della formula. Questo può essere, ad esempio, il tempo di sistema in millisecondi, che cambia continuamente. Di conseguenza, il "grano" sarà costantemente diverso. Oppure il programmatore può impostarlo da solo.

Tale programma (in realtà, un modulo o una funzione) è chiamato generatore di numeri pseudo-casuali. La libreria Python standard include il modulo random. Contiene molte funzioni legate all'emulazione della casualità (ad esempio, "mescolando" gli elementi di una sequenza), non solo funzioni per la generazione di numeri pseudo-casuali.

Questo tutorial ti guiderà attraverso le funzioni random(), randrange() e randint() dal modulo random. Notare che il modulo random contiene la funzione random() con lo stesso nome. Succede.

Per accedere alle funzioni è necessario importare il modulo random:

>>> importa casuale

Oppure importare singole funzioni da esso:

>>> da importazione casuale random, randrange, randint

Funzioni per ottenere numeri interi "casuali" - randint () e randrange ()

Le funzioni randint() e randrange() generano interi pseudo-casuali. Il primo è il più semplice e richiede sempre solo due argomenti: i limiti di un intervallo di interi, da cui viene selezionato qualsiasi numero:

>>> casuale .randint (0, 10) 6

oppure (se sono state importate singole funzioni):

>>> randinto (100, 200) 110

Nel caso di randint (), entrambi i limiti sono inclusi nell'intervallo, ovvero nel linguaggio della matematica il segmento è descritto come.

I numeri possono essere negativi:

>>> .randint casuale (-100, 10) -83 >>> .randint casuale (-100, -10) -38

Ma il primo numero deve essere sempre minore o almeno uguale al secondo. Cioè un<= b.

La funzione randrange() è più complessa. Può richiedere un argomento, due o anche tre. Se ne viene specificato solo uno, restituisce un numero casuale compreso tra 0 e l'argomento specificato. Inoltre, l'argomento in sé non è incluso nell'intervallo. Nel linguaggio della matematica, questo è)

Principali articoli correlati