9 svar
397 visningar
alix2a behöver inte mer hjälp
alix2a 416
Postad: 26 mar 2022 19:14

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?

Lindehaven 820 – Lärare
Postad: 26 mar 2022 19:25

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])

alix2a 416
Postad: 26 mar 2022 19:45

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?

Laguna 30218
Postad: 26 mar 2022 21:08

Ett sätt är att ta bort n från L varje gång.

alix2a 416
Postad: 26 mar 2022 21:36

Ja juste, men borde jag inte då få färre tal än jag "ber" programmet om?

Laguna 30218
Postad: 26 mar 2022 21:53

Du tar fram två tal. Hur många menar du att du ber om?

Tigster 271
Postad: 26 mar 2022 23:17 Redigerad: 26 mar 2022 23:28

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    

Laguna 30218
Postad: 27 mar 2022 08:32

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.

Hondel 1369
Postad: 27 mar 2022 09:02

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” 

Lindehaven 820 – Lärare
Postad: 29 mar 2022 13:48

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]
Svara
Close