View Full Version : [pyhton] numeri casuali non ripetuti.
ho scritto questo programmino davvero elementare in pyhton.
import random
for i in range(10):
numcasuale = random.randint(1,100)
print(numcasuale)
Però ora vorrei che i 10 numeri random non capitassero mai ripetuti. Ho provato con le condizioni IF ma se il programma trova un numero ripetuto si limita a non stamparlo e i numeri ottenuti diventano 9. Dovrebbe ripetere l'estrazione.
QUalcuno può aiutarmi?
ho scritto questo programmino davvero elementare in pyhton.
import random
for i in range(10):
numcasuale = random.randint(1,100)
print(numcasuale)
Però ora vorrei che i 10 numeri random non capitassero mai ripetuti. Ho provato con le condizioni IF ma se il programma trova un numero ripetuto si limita a non stamparlo e i numeri ottenuti diventano 9. Dovrebbe ripetere l'estrazione.
QUalcuno può aiutarmi?
non conosco bene python ma di solito basta inizializzare il seed del generatore per avere una sequenza diversa da esecuzione ad esecuzione
invece di fare i in 10 fai i < 10
e aumenti di uno la ì mentre cicli
ora puoi mettere la condizione di if
(se rispettata aumenti di uno la i e stampi il valore)
pabloski
22-12-2016, 13:53
Però ora vorrei che i 10 numeri random non capitassero mai ripetuti. Ho provato con le condizioni IF ma se il programma trova un numero ripetuto si limita a non stamparlo e i numeri ottenuti diventano 9. Dovrebbe ripetere l'estrazione.
QUalcuno può aiutarmi?
random.sample(range(100), 10)
Ovviamente estrae 10 numeri casuali tra 1 e 100 ma ( come chiedevi ) SENZA ripetizioni.
Ciò di cui hai bisogno non è un PRNG (pseudo-random number generator), bensì una PRP (pseudo-random permutation).
random.shuffle (https://docs.python.org/2/library/random.html#random.shuffle) permette di crearne una:
a = range(10)
random.shuffle(a)
print a
EDIT: pardon, non avevo letto che il dominio dei numeri da scegliere (100 elementi) è più grande del set di numeri scelti (10 elementi). In questo caso va bene random.sample.
Vi ringrazio per tutte queste risposte che leggo solamente ora. Non capisco perchè non mi arrivano le notifiche delle risposte.
Vi posto la mia soluzione.
import random
l = []
while len(l) < 10:
numero = random.randint(1,100)
if numero not in l:
l.append(numero)
print(numero)
Ancora grazie!
pabloski
07-01-2017, 15:15
Vi ringrazio per tutte queste risposte che leggo solamente ora. Non capisco perchè non mi arrivano le notifiche delle risposte.
Vi posto la mia soluzione.
import random
l = []
while len(l) < 10:
numero = random.randint(1,100)
if numero not in l:
l.append(numero)
print(numero)
Ancora grazie!
E' una soluzione, pero' non e' ne' pythonica ne' efficiente.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.