Liste 3x Wiederholen

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.
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

Sirius3 hat geschrieben: Donnerstag 20. Januar 2022, 11:47 Du hattest folgenden Code:

Code: Alles auswählen

import random

zahlen = []
while len(zahlen) < 6:
    zahl = random.randint(1, 49)
    if zahl not in zahlen:
        zahlen.append(zahl)

zahlen.sort()
print(zahlen)
Steck das in eine Funktion bedeutet:

Code: Alles auswählen

import random

def ziehe_zahlen():
    zahlen = []
    while len(zahlen) < 6:
        zahl = random.randint(1, 49)
        if zahl not in zahlen:
            zahlen.append(zahl)
    zahlen.sort()
    return zahlen
    
def main():
    zahlen = ziehe_zahlen()
    print(zahlen)   

if __name__ == "__main__":
    main()
Und jetzt die Funktion drei mal aufrufen, ist wieder Deine Aufgabe.
Ansonsten gilt noch das von mir geschriebene: eingerückt wird mit 4 Leerzeichen, keine Tabs. Variablennamen und Funktionen schreibt man kompett klein.
Konstanten dagegen komplett gross: `ANFANG = 1`.
`insert` braucht man selten, hier definitiv nicht. Das ist ein `append`.

Oh mein Gott ich bin echt richtig dumm🙄🙄🙄🙄🙄 ich danke dir so sehr ok das mit dem wiederholen schaffe ich jetzt und poste das Ergebnis hier rein
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

Sirius3 hat geschrieben: Donnerstag 20. Januar 2022, 11:47 Du hattest folgenden Code:

Code: Alles auswählen

import random

zahlen = []
while len(zahlen) < 6:
    zahl = random.randint(1, 49)
    if zahl not in zahlen:
        zahlen.append(zahl)

zahlen.sort()
print(zahlen)
Steck das in eine Funktion bedeutet:

Code: Alles auswählen

import random

def ziehe_zahlen():
    zahlen = []
    while len(zahlen) < 6:
        zahl = random.randint(1, 49)
        if zahl not in zahlen:
            zahlen.append(zahl)
    zahlen.sort()
    return zahlen
    
def main():
    zahlen = ziehe_zahlen()
    print(zahlen)   

if __name__ == "__main__":
    main()
Und jetzt die Funktion drei mal aufrufen, ist wieder Deine Aufgabe.
Ansonsten gilt noch das von mir geschriebene: eingerückt wird mit 4 Leerzeichen, keine Tabs. Variablennamen und Funktionen schreibt man kompett klein.
Konstanten dagegen komplett gross: `ANFANG = 1`.
`insert` braucht man selten, hier definitiv nicht. Das ist ein `append`.

Jetzt Funkt es endlich:))) ich danke euch allen🙏🙏🙏 hier der richtige Code:

Code: Alles auswählen

 import random

def ziehe_zahlen():
    zahlen = []
    while len(zahlen) < 6:
        zahl = random.randint(1, 49)
        if zahl not in zahlen:
            zahlen.append(zahl)
    zahlen.sort()
    return zahlen
    
def main():
	for i in range(3):
		zahlen = ziehe_zahlen()
		print(zahlen)   

if __name__ == "__main__":
    main()
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Sülo,

kannst du zum Aufsammeln der Lottozahlen nicht ein Set statt einer Liste verwenden? Das hätte die schöne Eigenschaft, dass Duplikate beim Einfügen automatisch verworfen werden, da Sets keine Duplikate enthalten können. Die If-Abfrage würde also wegfallen. Die Funktion sorted() macht aus dem Set wieder eine sortierte Liste.
Statt append() verwendet man allerdings add() für Sets. Bei sehr großen Datenmengen würde das auch deutlich performanter sein.

Code: Alles auswählen

import random


def ziehe_zahlen():
    zahlen = set()
    while len(zahlen) < 6:
        zahlen.add(random.randint(1, 49))
    
    return sorted(zahlen)


def main():
    for _ in range(3):
        zahlen = ziehe_zahlen()
        print(zahlen)


if __name__ == "__main__":
    main()
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Ich werfe mal random.shuffle() in den Raum, da das bisher nicht explizit ausgeschlossen wurde:

Code: Alles auswählen

>>> import random
>>> items = list(range(1, 50))
>>> random.shuffle(items)
>>> sorted(items[:6])
[2, 3, 19, 21, 22, 41]
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Vielleicht eine interessante Zusatzaufgabe mal drüber nachzudenken unter welchen Umständen die eine oder andere Art das zu lösen besser ist. Also was die Vor- und Nachteile der beiden Varianten jeweils sind. Ist eventuell für absolute Anfänger noch ein bisschen zu hoch gegriffen und bei 6 aus 49 ist das auch ziemlich egal welche Variante man nimmt. Nur so als Idee/Anregung. 🤓
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Mischen von 49 Zahlen dauert länger als 6 mal zufällig ziehen. Allerdings nimmt die Wahrscheinlichkeit zu, dass man nochmal ziehen muss.
Das dürfte sich bei anderen Konstellationen - z.B. 49 aus 49 extrem verlagern.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Man muss sich bei solchen Fragen den Worst-case anschauen. Der ist im einen Fall O(n) und im anderen unendlich.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Naja nicht wirklich unendlich, weil man da dann ja als nächstes den Erwartungswert mit einbeziehen würde, oder? Denn auch wenn das in einem fast unendlich unwahrscheinlichen Fall tatsächlich unendlich ist, erwartet man den Abbruch ja dann doch etwas früher.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten