Falsche Wert-Ausgaben (Vorsicht!, für viele evtl. zu einfach)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kenneth
User
Beiträge: 3
Registriert: Samstag 5. Oktober 2019, 16:20

Hallo liebe Leute,
bin absoluter Anfänger mit einem Problem, welches ich trotz Suche nicht lösen kann.
Lottoprogramm (Anfang):

Code: Alles auswählen

print("LOTTO 6 aus 49")
mz=[1, 3, 12, 22, 32, 45]    #Meine Zahlen
import random
for u in range (10):            # 10 Ziehungen
    gewinnzahlen=set()     # um doppelte Zahlen zu vermeiden, nehm ich "set".
    for i in range(6):
        x=random.randint(1,49)
        gewinnzahlen.add(x)
    print(mz,"Ihr Tipp ")
    print("Die Gewinnzahlen der Ziehung lauten:")
    print(sorted(gewinnzahlen))
    print("--------------------------------------------")
    print ()
print("Done!")
- Als Gewinnzahlen müssten doch bei 10 mal ziehen (for u in range(10)),
pro Ziehung immer 6 Zahlenrauskommen!
Das ist aber nicht der Fall.
Mal sind es 6, dann mal wieder 5 etc.
Wenn ich das "set" in eine normale Liste änder, dann ist immer alles korrekt.
Aber sowie eine Vermeidung von Doppelzahlen programiert wird, kommen nicht immer
6 Zahlen als Ergebnis (gewinnzahlen).

Vielleicht kann ja mal jemand drüberschauen.
Vielen Dank im voraus...
Zuletzt geändert von __deets__ am Samstag 5. Oktober 2019, 17:00, insgesamt 1-mal geändert.
Grund: code-tags
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte in Zukunft die Code-Tags benutzen (</>-Knopf im Editor). Sonst kann keiner deinen Quelltext lesen, weil die eminent wichtigen Einrueckungen verloren gehen.

Und zu deinem Problem: ein set zu benutzen ist ja schonmal ne gute Idee. Nur wenn du das tust, dann musst du natuerlich auch den Fall bedenken, den dir das Set abfangen soll: du ziehst doppelt. Du kannst also nicht einfach stumpf sechs mal ziehen. Sondern musst so lange ziehen, bis die Menge der gezogenen Zahlen der gewuenschten Anzahl entspricht.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du doppelte Zahlen vermeiden willst, mußt Du auch oft genug ziehen, falls eine Zufallszahl doch doppelt ist.
Das geht aber auch bequemer:

Code: Alles auswählen

gewinnzahlen = random.sample(range(1,50), 6)
Kenneth
User
Beiträge: 3
Registriert: Samstag 5. Oktober 2019, 16:20

Vielen Dank f.d. schnellen Antworten. :D

@Sirius3:
Aber random.sample legt ja keine richtige Liste an. (soweit ich das sehe).
Die Liste brauche ich aber im späteren Programmverlauf, um
z.B. "3 Richtige" (Hurra!,Yeah!, Ausgesorgt!), ausgeben zu lassen, wenn (x) aus der Liste, z.B 3 mal in "Meinezahlen"(mz) vorkommt.
Kurz: ich muss an den Wert/Zahl (x) rankommen, den( random.sample) jeweils erzeugt.
Geht das irgendwie?

+Sorry, falls die Frage zu krumm formuliert ist.+
Bin erst die 1. Woche aktiv.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie siehst Du das? Um zu ermitteln, wie viele Richtige du hast, sind Sets ganz hilfreich.
Kenneth
User
Beiträge: 3
Registriert: Samstag 5. Oktober 2019, 16:20

@Sirius3
Habe es anhand Deiner Info random.sample hinbekommen.
Auch die Richtigen kann ich damit ja ausgeben.
Es läuft.

Thank you, und einen schönen Sonntag...
Antworten