Python Zufallszahlen ohne Wiederholung?


12.05.2021, 22:22

Das if Statement hab ich erst grade hinzugefügt um zu sehen welchen Einfluss es hat...

3 Antworten

Von Experte KarlRanseierIII bestätigt

Mach's einfach so:

  • Füge alle ziehbaren Zahlen (1-20) in eine Liste
  • Shuffle die Liste (dann sind die 20 Zahlen zufällig vermischt)
  • Nimm die ersten 10 Werte der Liste

Dann hast du 10 Zufallszahlen ohne Wiederholung.

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
ShimaG  12.05.2021, 22:40

Für 20 Zahlen würde ich das genauso machen.

0
oSIEGUNwerg 
Fragesteller
 18.05.2021, 20:22

Stimmt so kann man das machen.... Ich hab jetzt selber nochmal nachgedacht und eine Lösung gefunden... Hab mit ner for Schleife durch die Liste 'geloopt' und mit ner while Schleife so lang geloopt bis ne Zahl kommt die nicht in der Liste ist...

0
Von Experte MrAmazing2 bestätigt

Unnötig kompliziert, invertiere einfach Deine Logik:

Erzeuge ien Liste mit den Zahlen 1-20 (Bereich aus dem die Zufalszahlen stammen sollen) und ziehe dann 10 mal zufällig aus dieser Liste.

random.choice() ist hier ein Helferlein.

Noch einfacher:

Nimm Deine Liste mit den Werten von 1-20, führe ein Shuffle aus und nehem die ersten 10 Werte.

MrAmazing2  12.05.2021, 22:38

Einfach meine Antwort kopiert xD

1
KarlRanseierIII  12.05.2021, 22:41
@MrAmazing2

Ich lege einen drauf:

random.sample(range(1,21),10)

Wenn es auch noch schnell sein soll :-D.

2

Ich habe jetzt nicht den ganzen Code gelesen, kannst aber einfach einen check machen nachdem die Zahl zu der Liste von Zahlen geadded wurde ob sie dort drinnen ist:

if zahl in zahlen:

# do it again oder so

oSIEGUNwerg 
Fragesteller
 12.05.2021, 22:26

im gonna try it

1
ShimaG  12.05.2021, 22:38

Das klappt nur gut, wenn du wenige Zahlen (r) aus einer signifikant größeren Zahlenmenge (1..N) ziehen willst, ansonsten schlägt die Prüfung zu oft fehl.

Wenn r > N ist, terminiert das nicht mehr.

0
crimsonfire  12.05.2021, 22:41
@ShimaG

Kann man ja anpassen ist ja nur ganz grob, also man kann natürlich auch beim random generieren einfach immer aus einer Liste machen zB range und dort dann einfach immer die zahlen entfernen und dann halt statt randint choice nutzen

0