Generera slumpmässiga tal från lista?
Hej! Det är så att jag har en lista, L, med tal och jag vill slumpa fram två tal från listan. När jag försöker kompilera koden är den inte nöjd med rad 7...
Traceback (most recent call last):
File "main.py", line 7, in <module>
n = random.randint(L)
TypeError: randint() missing 1 required positional argument: 'b'
Har någon tips på hur jag kan åtgärda detta?
Funktionen randint kräver två argument. Läs dokumentationen för randint.
Prova att slumpa fram index 0-4 och hämta siffran med detta index ur listan:
n = random.randint(0, 4)
randomlist.append(L[n])
Tack! Det löste sig!
Nu verkar det dock som att samma tal kan komma två gånger, alltså 6, 6, går det att göras att det alltid är olika tal?
Ett sätt är att ta bort n från L varje gång.
Ja juste, men borde jag inte då få färre tal än jag "ber" programmet om?
Du tar fram två tal. Hur många menar du att du ber om?
Annars kan du göra som nedan:
n = random.randint(0, 4)
if len(randomlist):
while L[n] == randomlist[-1]:
n = random.randint(0, 4)
randomlist.append(L[n])
Ber om ursäkt för att jag inte använder mig av kod-taggar. De verkar inte finnas om man skriver via mobilen.
Kodtaggar fixade efter önskemål från Tigster. /Smutstvätt, moderator
Tigster, med din metod kan man få t.ex. listan 6, 3, 6 om man ändrar så att man producerar tre tal.
Med bara två tal fungerar den förstås.
Du kanske kan titta på någon funktion som samplar index utan återlämning (på engelska without replacement). Random.sample() verkar vara en sådan funktion?
Tillägg: 30 mar 2022 10:11
Det ska stå ”återläggning”, inte ”återlämning”
Eller ta bort elementet ur listan efter att det använts. Notera att längden på listan då minskar och att man behöver räkna ut listans längd med funktionen len
.
n = random.randint(0, len(L)-1)
randomlist.append(L[n])
del L[n]