Soluzione 1
La funzione choice() della libreria random risolve il problema
import random # choice()
NUMERI = [1, 9, 2, 8]
x1 = random.choice(NUMERI); print(x1) # 8
x2 = random.choice(NUMERI); print(x2) # 9
...
Soluzione 2
...
n = len(NUMERI) # Numero elementi
p1 = random.randint(0, n-1) # Posizione casuale da 0 a n-1
x1 = NUMERI[p1] # Estrazione del numero
p2 = random.randint(0, n-1) # Un'altra posizione casuale
x2 = NUMERI[p2] # Un altro numero casuale
...
Soluzione 3
Basta una sola riga di codice per ogni numero
...
x1 = NUMERI[random.randint(0, len(NUMERI)-1)]
x2 = NUMERI[random.randint(0, len(NUMERI)-1)]
...
Estrazione senza reinserimento
Le estrazioni devono dare valori diversi…
Soluzione 1
...
x1 = random.choice(NUMERI) # 8
NUMERI.remove(x1) # [1, 9, 2]
x2 = random.choice(NUMERI) # 9
NUMERI.remove(x2) # [1, 2]
...
Soluzione 2
...
p = random.randint(0, len(NUMERI)-1) # Posizione casuale
x = NUMERI[p] # Estrazione
del NUMERI[p] # Eliminazione
...
Funzione
import random # randint()
def estrazione(lista):
p = random.randint(0, len(lista)-1)
x = lista[p]
del lista[p]
return x
NUMERI = [1, 9, 2, 8]
x1 = estrazione(NUMERI) # x1=8, NUMERI=[1, 9, 2]
x2 = estrazione(NUMERI) # x2=9, NUMERI=[1, 2]
...
Senza eliminazione
Estrarre, dal registro di classe, un certo numero di interrogati.
La lista originale non viene alterata.
Le estrazioni successive vengono inserite in una lista solo se non sono già presenti.
import random
def estrazione(lista):
p = random.randint(0, len(lista)-1)
x = lista[p]
return x
#------------------------------------------------------
NUMERI = list(range(1, 25)) # Elenco registro: 1..24
ESTRATTI = [] # Elenco interrogati
N = 4 # Numero interrogati
while(len(ESTRATTI) < N):
x = estrazione(NUMERI)
if(x not in ESTRATTI):
ESTRATTI.append(x)
print(ESTRATTI) # Non ordinati
ESTRATTI.sort()
print(ESTRATTI) # In ordine
Se la lista contiene direttamente i nomi diventa tutto più chiaro…