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.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sülo: Beim letzten Satz hatte ich Dich anders verstanden, und zwar bei einer Antwort wo Ich explizit nachgefragt hatte welche der beiden Varianten gesucht ist.

Meine Frage war „[…] sollen die 3×6=18 Zahlen dann auch alle unterschiedlich sein, oder reicht es wenn die innerhalb der jeweiligen Ziehung unterschiedlich sind?“

Und geantwortet hattest Du „J also die Zahlen sollen sich in den 3 Listen (18 Zahlen) nicht doppeln.“

Vielleicht mein Fehler, dass ich bei „J(a?)“ auf eine entweder/oder Frage nicht noch mal nachgehakt habe. 🙂 Ich hatte die Angabe von den 18 Zahlen in Verbindung mit nicht doppeln dann halt auf diese 18 Zahlen bezogen verstanden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

__blackjack__ hat geschrieben: Mittwoch 19. Januar 2022, 14:42 @Sülo: Beim letzten Satz hatte ich Dich anders verstanden, und zwar bei einer Antwort wo Ich explizit nachgefragt hatte welche der beiden Varianten gesucht ist.

Meine Frage war „[…] sollen die 3×6=18 Zahlen dann auch alle unterschiedlich sein, oder reicht es wenn die innerhalb der jeweiligen Ziehung unterschiedlich sind?“

Und geantwortet hattest Du „J also die Zahlen sollen sich in den 3 Listen (18 Zahlen) nicht doppeln.“

Vielleicht mein Fehler, dass ich bei „J(a?)“ auf eine entweder/oder Frage nicht noch mal nachgehakt habe. 🙂 Ich hatte die Angabe von den 18 Zahlen in Verbindung mit nicht doppeln dann halt auf diese 18 Zahlen bezogen verstanden.
Nein Nein das war mein Fehler, ich dachte auch das die Zahlen in den 3 Listen sich nicht wiederholen sollten bis der Prof. gesagt hat das es egal sei und die sich doppeln können da 3 verschiedene Listen mit jeweils 6 aus 49 gezogen werden. Nur in der Liste an sich sollen sie sich nicht doppeln.

[6, 2, 2, 3, 4, 5] <- nicht möglich
[1,2,3,4,5,6] [1,2,3,4,5,6] <- möglich
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann schreib eine Funktion, die einmal die Lottozahlen zieht. Und ruf die dreimal auf.
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

__deets__ hat geschrieben: Mittwoch 19. Januar 2022, 15:35 Dann schreib eine Funktion, die einmal die Lottozahlen zieht. Und ruf die dreimal auf.
Das ist es ja, wie ich die Zahlen ziehe hab ich schon aber nicht wie ich es 3x wiederholen lassen soll😂😂
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Code: Alles auswählen

for _ in range(3):
    print(ziehe_lottozahlen())
Dazu muss eben dein bestehender Code in eine Funktion ziehe_lottozahlen.
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

Also ich hab jetzt mal komplett von vorne angefangen:

Code: Alles auswählen

from random import randrange

anfang = 1
ende = 49


def Zahlenliste():
	zufaelligezahlen = list()
	while len(zufaelligezahlen) < 6:
		zufaelligeZahl = randrange(anfang, ende)
		repeated = False
		for num in zufaelligezahlen:
			if num == zufaelligezahlen:
				repeated = True
		if repeated == False:
			zufaelligezahlen.append(zufaelligeZahl)
	zufaelligezahlen.sort()
	return zufaelligezahlen


def main():
	Zahlenlisten = []
	for i in range(3):
		zufaelligezahlen = Zahlenliste()
		Zahlenlisten.insert(i, zufaelligezahlen)
	print(Zahlenlisten)


if __name__ == "__main__":
	main()
	
soweit so gut, nächstes Problem wie oder bzw. was muss ich jetzt tun das die Zahlen pro liste sich nicht wiederholen?
mit If ?? Diese Aufgabe zerstört mich grade:(((((
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Das hier ist falsch:

Code: Alles auswählen

for num in zufaelligezahlen:
    if num == zufaelligezahlen:
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Haeh? Du schreibst doch oben, dass die Zahlen sich zwischen den Listen doppeln duerfen. Woher kommt nun wieder diese andere Anforderung? Ich meine das ist doch "6 aus 49" nicht "6 aus wir ziehen immer weiter bis wir keine Zahlen mehr haben und am Ende ist klar welche Kombination gewinnt & wir werden alle stinkreich".
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

__deets__ hat geschrieben: Donnerstag 20. Januar 2022, 10:34 Haeh? Du schreibst doch oben, dass die Zahlen sich zwischen den Listen doppeln duerfen. Woher kommt nun wieder diese andere Anforderung? Ich meine das ist doch "6 aus 49" nicht "6 aus wir ziehen immer weiter bis wir keine Zahlen mehr haben und am Ende ist klar welche Kombination gewinnt & wir werden alle stinkreich".
Nein Nein ich hab ja oben geschrieben in die Zahlen dürfen sich in allen 3 Listen wiederholen aber nicht in der Eigenen Also Quasi Könnte rauskommen [1,2,3,4,5,6], [1,2,3,4,5,6], [1,2,3,4,5,6]
aber es darf NICHT so sein: [1,2,3,4,4,5] [1,1,6,6,8,9].... die Wahrscheinlichkeit das es doppelt vorkommt in einer Liste ist sehr gering trotzdem möchte mein Prof die Wahrscheinlichkeit = 0 haben...
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

kbr hat geschrieben: Donnerstag 20. Januar 2022, 10:29 Das hier ist falsch:

Code: Alles auswählen

for num in zufaelligezahlen:
    if num == zufaelligezahlen:
was müsste sonst da Stehen? Weil so gibt er mir ja 3 Listen mit jeweils 6 Zahlen aus.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja aber das Problem hast du doch schon in viewtopic.php?f=1&t=53866#p400277 geloest? Jetzt geht es doch nur darum, *den* Code in eine Funktion zu packen. Warum machst du das nicht, und schreibst stattdessen neuen/anderen Code, der diese Bedingung nicht mehr erfuellt?
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

__deets__ hat geschrieben: Donnerstag 20. Januar 2022, 11:17 Ja aber das Problem hast du doch schon in viewtopic.php?f=1&t=53866#p400277 geloest? Jetzt geht es doch nur darum, *den* Code in eine Funktion zu packen. Warum machst du das nicht, und schreibst stattdessen neuen/anderen Code, der diese Bedingung nicht mehr erfuellt?
Weil ich zu dumm bin um das in eine Funktion zu packen...:D
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hier oben hast du es doch auch schon geschafft. Was daran ist jetzt ploetzlich so viel schwerer?
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

__deets__ hat geschrieben: Donnerstag 20. Januar 2022, 11:26 Hier oben hast du es doch auch schon geschafft. Was daran ist jetzt ploetzlich so viel schwerer?
Ich weiß es nicht das ist mein Problem manchmal mach ich einfach indes klappt sagt man mir dann aber was einfaches wie zb. Pack das in eine Funktion dann bin ich so verloren weil ich überhaupt nicht weiß wie ich was gemacht habe:D
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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`.
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: 13077
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
Antworten