Cum se configurează smartphone-uri și PC-uri. Portal de informare
  • Acasă
  • Windows Phone
  • Generatoare de numere pseudo-aleatoare și metode de testare a acestora. Generator de numere pseudo-aleatoare – aleatoriu

Generatoare de numere pseudo-aleatoare și metode de testare a acestora. Generator de numere pseudo-aleatoare – aleatoriu


Rețineți că, în mod ideal, curba densității distribuției numerelor aleatoare ar arăta așa cum se arată în Fig. 22.3. Adică în ideal fiecare interval conține același număr de puncte: N i = N/k , Unde N numărul total de puncte, k numărul de intervale, i= 1, , k .

Orez. 22.3. Diagrama de frecvență a numerelor aleatoare,
generat teoretic de un generator ideal

Trebuie amintit că generarea unui număr arbitrar aleatoriu constă în două etape:

  • generarea unui număr aleator normalizat (adică distribuit uniform de la 0 la 1);
  • conversie normalizată a numerelor aleatoare r i la numere aleatorii x i, care sunt distribuite conform legii de distribuție (arbitrară) cerută de utilizator sau în intervalul cerut.

Generatoarele de numere aleatorii conform metodei de obținere a numerelor sunt împărțite în:

  • fizic;
  • tabular;
  • algoritmic.

RNG fizic

Un exemplu de RNG fizic poate fi: o monedă („capete” 1, „cozi” 0); zaruri; o tobă cu o săgeată împărțită în sectoare cu numere; generator de zgomot hardware (HS), care utilizează un dispozitiv termic zgomotos, de exemplu, un tranzistor (Fig. 22.422.5).

Orez. 22.4. Schema unei metode hardware pentru generarea de numere aleatorii
Orez. 22.5. Diagrama de obținere a numerelor aleatoare folosind metoda hardware
Sarcina „Generarea numerelor aleatorii folosind o monedă”

Generați un număr aleatoriu de trei cifre, distribuit uniform în intervalul de la 0 la 1, folosind o monedă. Precizie trei zecimale.

Prima modalitate de a rezolva problema
Aruncă o monedă de 9 ori, iar dacă moneda aterizează pe capete, notează „0” dacă aterizează pe capete, apoi notează „1”. Deci, să presupunem că, în urma experimentului, am primit secvența aleatorie 100110100.

Desenați un interval de la 0 la 1. Citind numerele în succesiune de la stânga la dreapta, împărțiți intervalul în jumătate și alegeți de fiecare dată una dintre părțile intervalului următor (dacă se rulează 0, atunci cea din stânga, dacă este 1 este rulat, apoi cel potrivit). Astfel, puteți ajunge în orice moment al intervalului, cu cât de precis doriți.

Aşa, 1 : intervalul se împarte în jumătate și , se selectează jumătatea dreaptă, se îngustează intervalul: . Următorul număr 0 : intervalul se împarte în jumătate și , se selectează jumătatea stângă, se îngustează intervalul: . Următorul număr 0 : intervalul se împarte în jumătate și , se selectează jumătatea stângă, se îngustează intervalul: . Următorul număr 1 : intervalul se împarte în jumătate și , se selectează jumătatea dreaptă, se îngustează intervalul: .

În funcție de condiția de acuratețe a problemei, s-a găsit o soluție: este orice număr din interval, de exemplu, 0,625.

În principiu, dacă adoptăm o abordare strictă, atunci împărțirea intervalelor trebuie continuată până când limitele din stânga și dreapta ale intervalului găsit COINCIDEAZĂ cu o precizie a zecimalei a treia. Adică din punct de vedere al acurateței, numărul generat nu va mai fi distins de niciun număr din intervalul în care se află.

A doua modalitate de a rezolva problema
Să împărțim secvența binară rezultată 100110100 în triade: 100, 110, 100. După convertirea acestor numere binare în numere zecimale, obținem: 4, 6, 4. Înlocuind „0” în față, obținem: 0,464. Această metodă poate produce numai numere de la 0,000 la 0,777 (deoarece maximul care poate fi „stors” din trei cifre binare este 111 2 = 7 8), adică, de fapt, aceste numere sunt reprezentate în sistemul de numere octale. Pentru traducere octal numere în zecimal hai sa facem reprezentarea:
0,464 8 = 4 8 1 + 6 8 2 + 4 8 3 = 0,6015625 10 = 0,602 10.
Deci, numărul necesar este: 0,602.

RNG tabelar

RNG-urile tabelare folosesc tabele special compilate care conțin numere verificate necorelate, adică în niciun fel dependente unele de altele, ca sursă de numere aleatorii. În tabel Figura 22.1 prezintă un mic fragment dintr-un astfel de tabel. Prin parcurgerea tabelului de la stânga la dreapta de sus în jos, puteți obține numere aleatorii distribuite uniform de la 0 la 1 cu numărul necesar de zecimale (în exemplul nostru, folosim trei zecimale pentru fiecare număr). Deoarece numerele din tabel nu depind unele de altele, tabelul poate fi parcurs în diferite moduri, de exemplu, de sus în jos sau de la dreapta la stânga sau, să zicem, puteți selecta numere care sunt în poziții pare.

Tabelul 22.1.
Numere aleatorii. În mod egal
numere aleatorii distribuite de la 0 la 1
Numere aleatorii Distribuit uniform
0 la 1 numere aleatorii
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
… …

Demnitate această metodă este că produce numere cu adevărat aleatorii, deoarece tabelul conține numere necorelate verificate. Dezavantajele metodei: stocarea unui număr mare de cifre necesită multă memorie; Există mari dificultăți în generarea și verificarea acestui tip de tabele atunci când se folosește un tabel nu mai garantează caracterul aleatoriu al secvenței numerice și, prin urmare, fiabilitatea rezultatului.

Există un tabel care conține 500 de numere verificate absolut aleatoare (preluate din cartea lui I. G. Venetsky, V. I. Venetskaya „Concepte și formule matematice și statistice de bază în analiza economică”).

RNG algoritmic

Numerele generate de aceste RNG-uri sunt întotdeauna pseudoaleatoare (sau cvasi-aleatoare), adică fiecare număr generat ulterior depinde de cel anterior:

r i + 1 = f(r i) .

Secvențele formate din astfel de numere formează bucle, adică există în mod necesar un ciclu care se repetă de un număr infinit de ori. Ciclurile repetate se numesc perioade.

Avantajul acestor RNG-uri este viteza lor; generatoarele nu necesită practic resurse de memorie și sunt compacte. Dezavantaje: numerele nu pot fi numite pe deplin aleatoare, deoarece există o dependență între ele, precum și prezența unor perioade în succesiunea numerelor cvasialeatoare.

Să luăm în considerare câteva metode algoritmice pentru obținerea RNG:

  • metoda pătratelor mediane;
  • metoda produselor de mijloc;
  • metoda de agitare;
  • metoda liniară congruentă.

Metoda midsquare

Există un număr din patru cifre R 0 . Acest număr este pătrat și introdus în R 1. În continuare de la R 1 ia noul număr aleatoriu din mijloc (patru cifre din mijloc) și îl scrie R 0 . Apoi procedura se repetă (vezi Fig. 22.6). Rețineți că, de fapt, ca număr aleatoriu, trebuie să luați nu ghij, A 0.ghij cu un zero și un punct zecimal adăugat la stânga. Acest fapt este reflectat ca în fig. 22.6, și în cifre similare ulterioare.

Orez. 22.6. Schema metodei pătratelor medii

Dezavantajele metodei: 1) dacă la o iterație numărul R 0 devine egal cu zero, apoi generatorul degenerează, deci alegerea corectă a valorii inițiale este importantă R 0; 2) generatorul va repeta secvența prin M n pași (în cel mai bun caz), unde n cifra numerică R 0 , M baza sistemului numeric.

De exemplu în Fig. 22.6: dacă numărul R 0 va fi reprezentat în sistemul de numere binar, apoi succesiunea numerelor pseudoaleatoare se va repeta în 2 4 = 16 pași. Rețineți că repetarea secvenței poate apărea mai devreme dacă numărul de pornire este ales prost.

Metoda descrisă mai sus a fost propusă de John von Neumann și datează din 1946. Deoarece această metodă s-a dovedit a fi nesigură, a fost rapid abandonată.

Metoda produsului mediu

Număr R 0 înmulțit cu R 1, din rezultatul obținut R 2 se extrage mijlocul R 2 * (acesta este un alt număr aleatoriu) și înmulțit cu R 1. Toate numerele aleatoare ulterioare sunt calculate folosind această schemă (vezi Fig. 22.7).

Orez. 22.7. Schema metodei produselor mediane

Metoda de agitare

Metoda shuffle folosește operații pentru a muta ciclic conținutul unei celule la stânga și la dreapta. Ideea metodei este următoarea. Lăsați celula să stocheze numărul inițial R 0 . Deplasând ciclic conținutul celulei la stânga cu 1/4 din lungimea celulei, obținem un nou număr R 0 * . În același mod, ciclând conținutul celulei R 0 la dreapta cu 1/4 din lungimea celulei, obținem al doilea număr R 0**. Suma numerelor R 0* și R 0** oferă un nou număr aleatoriu R 1. Următorul R 1 este introdus R 0 și se repetă întreaga secvență de operații (vezi Fig. 22.8).


Orez. 22.8. Diagrama metodei de amestecare

Vă rugăm să rețineți că numărul rezultat din însumare R 0* și R 0 ** , este posibil să nu se încadreze complet în celulă R 1. În acest caz, cifrele suplimentare trebuie eliminate din numărul rezultat. Să explicăm acest lucru în fig. 22.8, unde toate celulele sunt reprezentate de opt cifre binare. Lasă R 0 * = 10010001 2 = 145 10 , R 0 ** = 10100001 2 = 161 10 , Atunci R 0 * + R 0 ** = 100110010 2 = 306 10 . După cum puteți vedea, numărul 306 ocupă 9 cifre (în sistemul de numere binar), iar celula R 1 (la fel ca R 0) poate conține maximum 8 biți. Prin urmare, înainte de a introduce valoarea în R 1, este necesar să eliminați un bit „în plus”, cel mai din stânga din numărul 306, rezultând R 1 nu va mai merge la 306, ci la 00110010 2 = 50 10 . De asemenea, rețineți că în limbi precum Pascal, „tuierea” biților suplimentari atunci când o celulă depășește este efectuată automat în conformitate cu tipul specificat de variabilă.

Metoda liniară congruentă

Metoda liniară congruentă este una dintre cele mai simple și mai frecvent utilizate proceduri care simulează în prezent numere aleatoare. Această metodă folosește modul( x, y) , care returnează restul când primul argument este împărțit la al doilea. Fiecare număr aleatoriu ulterior este calculat pe baza numărului aleatoriu anterior folosind următoarea formulă:

r i+ 1 = mod( k · r i + b, M) .

Se numește șirul de numere aleatoare obținute folosind această formulă succesiune liniară congruentă. Mulți autori numesc o secvență liniară congruentă când b = 0 metoda multiplicativă congruentă, și când b ≠ 0 — metoda mixta congruenta.

Pentru un generator de înaltă calitate, este necesar să selectați coeficienți potriviți. Este necesar ca numărul M a fost destul de mare, deoarece perioada nu poate avea mai mult M elemente. Pe de altă parte, împărțirea folosită în această metodă este o operație destul de lentă, astfel încât pentru un computer binar alegerea logică ar fi M = 2 N, deoarece în acest caz, găsirea restului diviziunii este redusă în interiorul computerului la operația logică binară „ȘI”. Alegerea celui mai mare număr prim este de asemenea comună M, mai puțin de 2 N: în literatura de specialitate este dovedit că în acest caz cifrele de ordin inferior ale numărului aleator rezultat r i+ 1 se comportă la fel de aleatoriu ca și cei mai vechi, ceea ce are un efect pozitiv asupra întregii secvențe de numere aleatoare în ansamblu. De exemplu, unul dintre numerele Mersenne, egal cu 2 31 1 și astfel, M= 2 31 1 .

Una dintre cerințele pentru secvențele liniare congruente este ca lungimea perioadei să fie cât mai lungă posibil. Durata perioadei depinde de valori M , kŞi b. Teorema pe care o prezentăm mai jos ne permite să determinăm dacă este posibil să realizăm o perioadă de lungime maximă pentru anumite valori M , kŞi b .

Teorema. Secvență liniară congruentă definită prin numere M , k , bŞi r 0, are o perioadă de lungime M dacă și numai dacă:

  • numere bŞi M relativ simplu;
  • k de 1 ori p pentru fiecare prim p, care este un divizor M ;
  • k 1 este un multiplu al lui 4, dacă M multiplu de 4.

În cele din urmă, să încheiem cu câteva exemple de utilizare a metodei congruente liniare pentru a genera numere aleatorii.

S-a stabilit că o serie de numere pseudoaleatoare generate pe baza datelor din exemplul 1 vor fi repetate la fiecare M/4 numere. Număr q este setat arbitrar înainte de începerea calculelor, cu toate acestea, trebuie avut în vedere că seria dă impresia că este aleatorie în general k(și prin urmare q). Rezultatul poate fi îmbunătățit oarecum dacă b ciudat și k= 1 + 4 · q în acest caz rândul se va repeta la fiecare M numere. După o lungă căutare k cercetătorii s-au stabilit pe valori de 69069 și 71365.

Un generator de numere aleatorii care utilizează datele din Exemplul 2 va produce numere aleatorii, nerepetate, cu o perioadă de 7 milioane.

Metoda multiplicativă pentru generarea numerelor pseudoaleatoare a fost propusă de D. H. Lehmer în 1949.

Verificarea calitatii generatorului

Calitatea întregului sistem și acuratețea rezultatelor depind de calitatea RNG. Prin urmare, secvența aleatorie generată de RNG trebuie să îndeplinească o serie de criterii.

Verificările efectuate sunt de două tipuri:

  • verificări pentru uniformitatea distribuției;
  • teste pentru independența statistică.

Verificări pentru uniformitatea distribuției

1) RNG ar trebui să producă aproape următoarele valori ale parametrilor statistici caracteristici unei legi aleatorii uniforme:

2) Test de frecventa

Un test de frecvență vă permite să aflați câte numere se încadrează într-un interval (m r – σ r ; m r + σ r) , adică (0,5 0,2887; 0,5 + 0,2887) sau, în cele din urmă, (0,2113; 0,7887). Deoarece 0,7887 0,2113 = 0,5774, concluzionăm că într-un RNG bun, aproximativ 57,7% din toate numerele aleatorii extrase ar trebui să se încadreze în acest interval (vezi Fig. 22.9).

Orez. 22.9. Diagrama de frecvență a unui RNG ideal
în cazul verificării acestuia pentru testul de frecvență

De asemenea, este necesar să se țină cont de faptul că numărul de numere care se încadrează în interval (0; 0,5) ar trebui să fie aproximativ egal cu numărul de numere care se încadrează în interval (0,5; 1).

3) Testul chi-pătrat

Testul chi-pătrat (testul χ 2) este unul dintre cele mai cunoscute teste statistice; este metoda principală folosită în combinaţie cu alte criterii. Testul chi-pătrat a fost propus în 1900 de Karl Pearson. Lucrarea sa remarcabilă este considerată ca fundament al statisticii matematice moderne.

Pentru cazul nostru, verificarea folosind criteriul chi-pătrat ne va permite să aflăm cât de mult este real RNG-ul este aproape de benchmark-ul RNG, adică dacă îndeplinește sau nu cerințele de distribuție uniformă.

Diagrama de frecventa referinţă RNG este prezentat în Fig. 22.10. Deoarece legea de distribuție a RNG de referință este uniformă, atunci probabilitatea (teoretică). p i introducerea numerelor în i al-lea interval (toate aceste intervale k) este egal cu p i = 1/k . Și astfel, în fiecare dintre k intervalele vor lovi netezi De p i · N numere ( N numărul total de numere generate).

Orez. 22.10. Diagrama de frecvență a RNG de referință

Un RNG real va produce numere distribuite (și nu neapărat uniform!) peste tot k intervale și fiecare interval va conține n i numere (în total n 1 + n 2 + + n k = N ). Cum putem determina cât de bun este RNG-ul testat și cât de aproape este de cel de referință? Este destul de logic să luăm în considerare diferențele pătrate dintre numărul rezultat de numere n iși „referință” p i · N . Să le adunăm și rezultatul este:

χ 2 exp. = ( n 1 p 1 · N) 2 + (n 2 p 2 · N) 2 + + ( n k – p k · N) 2 .

Din această formulă rezultă că cu cât diferența dintre fiecare dintre termeni este mai mică (și deci cu cât valoarea lui χ 2 exp. mai mică), cu atât legea distribuției numerelor aleatoare generate de un RNG real tinde să fie mai puternică.

În expresia anterioară, fiecăruia dintre termeni i se atribuie aceeași pondere (egal cu 1), ceea ce de fapt poate să nu fie adevărat; prin urmare, pentru statisticile chi-pătrat, este necesar să se normalizeze fiecare i al-lea termen, împărțindu-l la p i · N :

În cele din urmă, să scriem expresia rezultată mai compact și să o simplificăm:

Am obținut valoarea testului chi-pătrat pentru experimental date.

În tabel 22.2 sunt date teoretic valori chi-pătrat (χ 2 teoretic), unde ν = N 1 este numărul de grade de libertate, p acesta este un nivel de încredere specificat de utilizator care indică cât de mult ar trebui să satisfacă RNG cerințele unei distribuții uniforme sau p — este probabilitatea ca valoarea experimentală a lui χ 2 exp..

va fi mai mică decât cea tabulată (teoretică) χ 2 teoretică.
sau egal cu acesta
Tabelul 22.2. Câteva puncte procentuale ale distribuției χ 2 p = 1% p = 5% p = 25% p = 50% p = 75%
ν = 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 ν p = 95% ν ) · x p p = 99% x 2 p+ sqrt(2 + 2/3 · 2/3 + ν ))
x p = O (1/sqrt( 2.33 0.00 0.674 1.64 2.33

1,64 p 0,674.

Considerat acceptabil p de la 10% la 90% Dacă χ 2 exp. mult mai mult decât teoria χ 2. n i(adică p i · N este mare), apoi generatorul

nu satisface

cerința distribuției uniforme, deoarece valorile observate p mergi prea departe de teoretic Dacă χ 2 exp.și nu poate fi considerată aleatorie. Cu alte cuvinte, se stabilește un interval de încredere atât de mare încât restricțiile asupra numerelor devin foarte laxe, cerințele privind numerele devin slabe. În acest caz, se va observa o eroare absolută foarte mare. n i Chiar și D. Knuth în cartea sa „The Art of Programming” a remarcat că având χ 2 exp. p i · N pentru cei mici, în general, nici nu este bine, deși acest lucru pare, la prima vedere, a fi minunat din punct de vedere al uniformității. Într-adevăr, luați o serie de numere 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, acestea sunt ideale din punct de vedere al uniformității și χ 2 exp.

va fi practic zero, dar este puțin probabil să le recunoașteți ca aleatoare. p Dacă χ 2 exp. p mult mai mică decât teoria χ 2.

(adică p i · N mic), apoi generatorul

cerința unei distribuții uniforme aleatorii, din moment ce valorile observate

prea aproape de teoretic

și nu poate fi considerată aleatorie.

Să ne uităm la un exemplu. Numărul aleatoriu 0,2463389991 este format din cifrele 2463389991, iar numărul 0,5467766618 este format din cifrele 5467766618. Conectând secvențele de cifre, avem: 24633889991646.

Este clar că probabilitatea teoretică p i pierderi i A treia cifră (de la 0 la 9) este egală cu 0,1.

2) Verificarea aspectului serii de numere identice

Să notăm prin n L numărul de serii de cifre identice într-un rând de lungime L. Totul trebuie verificat L de la 1 la m, Unde m acesta este un număr specificat de utilizator: numărul maxim de cifre identice care apar într-o serie.

În exemplul „24633899915467766618” au fost găsite 2 serii de lungime 2 (33 și 77), adică n 2 = 2 și 2 serii de lungime 3 (999 și 666), adică n 3 = 2 .

Probabilitatea de apariție a unei serii de lungime L este egal cu: p L= 9 10 L (teoretic). Adică, probabilitatea de apariție a unei serii cu lungimea de un caracter este egală cu: p 1 = 0,9 (teoretic). Probabilitatea ca o serie de două personaje să apară este: p 2 = 0,09 (teoretic). Probabilitatea ca o serie de trei personaje să apară este: p 3 = 0,009 (teoretic).

De exemplu, probabilitatea de apariție a unei serii cu lungimea de un caracter este p L= 0,9, deoarece poate exista un singur simbol din 10 și există 9 simboluri în total (zero nu contează). Și probabilitatea ca două simboluri identice „XX” să apară într-un rând este de 0,1 · 0,1 · 9, adică probabilitatea de 0,1 ca simbolul „X” să apară în prima poziție este înmulțită cu probabilitatea de 0,1 ca același simbol va apărea în a doua poziție „X” și înmulțit cu numărul de astfel de combinații 9.

Frecvența de apariție a seriei este calculată folosind formula chi-pătrat pe care am discutat anterior folosind valorile p L .

Notă: Generatorul poate fi testat de mai multe ori, dar testele nu sunt complete și nu garantează că generatorul produce numere aleatorii. De exemplu, un generator care produce secvența 12345678912345 va fi considerat ideal în timpul testelor, ceea ce, evident, nu este în întregime adevărat.

În concluzie, observăm că cel de-al treilea capitol din The Art of Programming (Volumul 2) al lui Donald E. Knuth este dedicat în întregime studiului numerelor aleatoare. Se studiază diverse metode generarea de numere aleatorii, teste statistice ale aleatoriei și conversia numerelor aleatoare distribuite uniform în alte tipuri de variabile aleatorii. Peste două sute de pagini sunt dedicate prezentării acestui material.

Programele de calculator necesită adesea emularea aleatoriei. De exemplu, atunci când dezvoltați jocuri. Dacă programul are un anumit generator, adică un producător, al unui număr aleatoriu, atunci, folosind numărul astfel obținut, puteți selecta una sau alta ramură a execuției programului, sau un obiect arbitrar din colecție. Cu alte cuvinte, principalul lucru este să generezi un număr. Emularea unui alt tip de aleatorie se bazează pe aceasta.

Cu siguranță nu știm dacă există aleatoriu în natură sau dacă ni se pare doar din cauza limitărilor cunoștințelor noastre. Știm doar că nu există o aleatorie reală în programare. Nu există de unde să vină un număr arbitrar, este imposibil să-i programăm apariția de nicăieri. Puteți crea doar un program care, ca urmare a aplicării unei formule complexe la „granul”, va produce un număr și ni se va părea că acest număr este aleatoriu.

„Grain” este datele de intrare pentru formulă. Acesta ar putea fi, de exemplu, ora sistemului în milisecunde, care se schimbă constant. În consecință, „granul” va fi constant diferit. Sau programatorul o poate seta singur.

Un astfel de program (în realitate un modul sau o funcție) se numește generator de numere pseudoaleatoare. Biblioteca standard Python include modulul aleatoriu. Conține multe funcții legate de emularea aleatoriei (de exemplu, „amestecarea” elementelor unei secvențe), și nu doar funcții pentru generarea de numere pseudoaleatoare.

Acest tutorial va acoperi funcțiile random(), randrange() și randint() din modulul aleatoriu. Vă rugăm să rețineți că modulul aleatoriu conține funcția random() cu același nume. Se întâmplă.

Pentru a accesa funcții, trebuie să importați modulul aleatoriu:

>>> import aleatoriu

Sau importați funcții individuale din acesta:

>>> din import aleatoriu random , randrange, randint

Funcții pentru obținerea numerelor întregi „aleatorie” - randint() și randrange()

Funcțiile randint() și randrange() generează numere întregi pseudoaleatoare. Primul dintre ele este cel mai simplu și ia întotdeauna doar două argumente - limitele intervalului întreg din care este selectat orice număr:

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

sau (dacă au fost importate funcții individuale):

>>> randint(100 , 200 ) 110

În cazul randint(), ambele limite sunt incluse în interval, adică, în limbajul matematicii, segmentul este descris ca .

Numerele pot fi negative:

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

Dar primul număr trebuie să fie întotdeauna mai mic sau cel puțin egal cu al doilea. Adică a<= b.

Funcția randrange() este mai complexă. Poate fi nevoie de un singur argument, două sau chiar trei. Dacă este specificat doar unul, atunci returnează un număr aleator între 0 și argumentul specificat. Mai mult, argumentul în sine nu este inclus în interval. În limbajul matematicii, aceasta este)

Cele mai bune articole pe această temă