PDA

View Full Version : [pyhton] numeri casuali non ripetuti.


kimal73
21-12-2016, 20:00
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?

!fazz
22-12-2016, 09:26
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

les2
22-12-2016, 10:39
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.

71⁣106
25-12-2016, 15:00
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.

kimal73
07-01-2017, 13:21
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.