Guten Tag liebe Programmierer!:)
Ich hab ein Problem:
Ich hab eine random Liste erstellt quasi wie beim Lotto 6 aus 49 nun will ich aber das mir das Programm die Liste 3x hintereinander ausgibt und darauf achtet, das die random zahlen nicht doppelt verwendet werden.
Folgendes habe ich schon geschrieben:
import random
Zahlen = []
x = 0
while x < 6:
Zahl = random.randint(1,49)
if Zahl in Zahlen:
continue
else:
Zahlen.append(Zahl)
x = x + 1
Zahlen.sort()
print(Zahlen)
ab jetzt komm ich nicht mehr weiter, wäre es doch sinnvoller auf eine for-schleife zu greifen?
danke schonmal im Voraus!
Liste 3x Wiederholen
Bitte benutze den "Code" Button, damit dein Programm lesbar bleibt
Du musst dir nur überlegen, wie du dir die Zahlen merken willst, die bereits "gezogen" wurden.
Also entweder könntest du die alle 3 Listen merken und dann darin suchen, ob die Zufallszahl "in Ordnung" ist.
Oder du erstellst vorab eine Liste mit möglichen Zahlen, die dann wie bei Lottokugeln nicht mehr "zurückgelegt" werden.
Das würde auch deinen bisherigen Code vereinfachen, weil du nicht mehr dauernd in "continue" rein laufen würdest.
Dein Problem lässt sich mit While und For lösen, das hat damit erstmal nicht so viel zu tun.Sülo hat geschrieben: ↑Montag 17. Januar 2022, 10:37 Folgendes habe ich schon geschrieben:
Code: Alles auswählen
import random Zahlen = [] x = 0 while x < 6: Zahl = random.randint(1,49) if Zahl in Zahlen: continue else: Zahlen.append(Zahl) x = x + 1 Zahlen.sort() print(Zahlen)
Du musst dir nur überlegen, wie du dir die Zahlen merken willst, die bereits "gezogen" wurden.
Also entweder könntest du die alle 3 Listen merken und dann darin suchen, ob die Zufallszahl "in Ordnung" ist.
Oder du erstellst vorab eine Liste mit möglichen Zahlen, die dann wie bei Lottokugeln nicht mehr "zurückgelegt" werden.
Das würde auch deinen bisherigen Code vereinfachen, weil du nicht mehr dauernd in "continue" rein laufen würdest.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Kebap hat geschrieben: ↑Montag 17. Januar 2022, 10:44 Bitte benutze den "Code" Button, damit dein Programm lesbar bleibt
Dein Problem lässt sich mit While und For lösen, das hat damit erstmal nicht so viel zu tun.
Du musst dir nur überlegen, wie du dir die Zahlen merken willst, die bereits "gezogen" wurden.
Also entweder könntest du die alle 3 Listen merken und dann darin suchen, ob die Zufallszahl "in Ordnung" ist.
Oder du erstellst vorab eine Liste mit Zahlen, die dann wie bei Lottokugeln nicht mehr "zurückgelegt" werden.
Das würde auch deinen bisherigen Code vereinfachen, weil du nicht mehr dauernd in "continue" rein laufen würdest.
Sülo hat geschrieben: ↑Montag 17. Januar 2022, 10:37 Guten Tag liebe Programmierer!:)
Ich hab ein Problem:
Ich hab eine random Liste erstellt quasi wie beim Lotto 6 aus 49 nun will ich aber das mir das Programm die Liste 3x hintereinander ausgibt und darauf achtet, das die random zahlen nicht doppelt verwendet werden.
Folgendes habe ich schon geschrieben:
ab jetzt komm ich nicht mehr weiter, wäre es doch sinnvoller auf eine for-schleife zu greifen?Code: Alles auswählen
import random Zahlen = [] x = 0 while x < 6: Zahl = random.randint(1,49) if Zahl in Zahlen: continue else: Zahlen.append(Zahl) x = x + 1 Zahlen.sort() print(Zahlen)
danke schonmal im Voraus!
Oh sorry das war keine Absicht.
also würde ich quasi mit If weitermachen? ich komm halt nicht darauf wie ich es so schreiben soll das quasi [1,2,3,4,5,6] [7,8,9,10,11,12] [13,14,15,16,17,18] <- blödes Beispiel, aber die ausgabe sollte halt so sein.
ich werde noch verrückt:D
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Sülo: Schau Dir mal die `random.sample()`-Funktion an.
Aus Deiner Aufgabenstellung wird auch nicht so ganz klar wo die Zahlen nicht doppelt vorkommen dürfen. Also in den 6 Zahlen ist klar, aber Du willst das ja drei mal machen — sollen die 3×6=18 Zahlen dann auch alle unterschiedlich sein, oder reicht es wenn die innerhalb der jeweiligen Ziehung unterschiedlich sind?
Nachtrag: Anmerkung zum Quelltext: `x` ist überflüssig denn das ist ja im Grunde die Länge der Liste und die kann man mit `len()` von der Liste abfragen.
Namen werden in Python klein_mit_unterstrichen geschrieben. Also beispielsweise `zahl` statt `Zahl`. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
Aus Deiner Aufgabenstellung wird auch nicht so ganz klar wo die Zahlen nicht doppelt vorkommen dürfen. Also in den 6 Zahlen ist klar, aber Du willst das ja drei mal machen — sollen die 3×6=18 Zahlen dann auch alle unterschiedlich sein, oder reicht es wenn die innerhalb der jeweiligen Ziehung unterschiedlich sind?
Nachtrag: Anmerkung zum Quelltext: `x` ist überflüssig denn das ist ja im Grunde die Länge der Liste und die kann man mit `len()` von der Liste abfragen.
Namen werden in Python klein_mit_unterstrichen geschrieben. Also beispielsweise `zahl` statt `Zahl`. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Angegeben ist das wir random.sample nicht benutzen dürfen.__blackjack__ hat geschrieben: ↑Montag 17. Januar 2022, 11:06 @Sülo: Schau Dir mal die `random.sample()`-Funktion an.
Aus Deiner Aufgabenstellung wird auch nicht so ganz klar wo die Zahlen nicht doppelt vorkommen dürfen. Also in den 6 Zahlen ist klar, aber Du willst das ja drei mal machen — sollen die 3×6=18 Zahlen dann auch alle unterschiedlich sein, oder reicht es wenn die innerhalb der jeweiligen Ziehung unterschiedlich sind?
J also die Zahlen sollen sich in den 3 Listen (18 Zahlen) nicht doppeln.
@Sülo: Du mußt nicht immer den ganzen Beitrag zitieren, der steht ja direkt drüber.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. Variablennamen werden komplett klein geschrieben. `continue` sollte man sparsam einsetzen, weil es den Ablauf einer Schleife undurchsichtig macht, da Du eh mit `else` arbeitest, ist es hier unnötig, kann durch `pass` ersetzt werden, noch besser wäre es, einfach die Bedingung umzudrehen.
`x` muß man nicht selbst zählen, weil das einfach die Länge der Liste ist. Sortieren muß man nur einmal, nach der Schleife.
Die ganze Schleife kann man durch `random.sample` ersetzen:
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. Variablennamen werden komplett klein geschrieben. `continue` sollte man sparsam einsetzen, weil es den Ablauf einer Schleife undurchsichtig macht, da Du eh mit `else` arbeitest, ist es hier unnötig, kann durch `pass` ersetzt werden, noch besser wäre es, einfach die Bedingung umzudrehen.
`x` muß man nicht selbst zählen, weil das einfach die Länge der Liste ist. Sortieren muß man nur einmal, nach der Schleife.
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)
Code: Alles auswählen
import random
zahlen = sorted(random.sample(range(1, 50), 6))
print(zahlen)
Sirius3 hat geschrieben: ↑Montag 17. Januar 2022, 11:20 @Sülo: Du mußt nicht immer den ganzen Beitrag zitieren, der steht ja direkt drüber.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. Variablennamen werden komplett klein geschrieben. `continue` sollte man sparsam einsetzen, weil es den Ablauf einer Schleife undurchsichtig macht, da Du eh mit `else` arbeitest, ist es hier unnötig, kann durch `pass` ersetzt werden, noch besser wäre es, einfach die Bedingung umzudrehen.
`x` muß man nicht selbst zählen, weil das einfach die Länge der Liste ist. Sortieren muß man nur einmal, nach der Schleife.Die ganze Schleife kann man durch `random.sample` ersetzen: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)
Code: Alles auswählen
import random zahlen = sorted(random.sample(range(1, 50), 6)) print(zahlen)
Danke ! Ja mit random.sample wäre es definitiv einfach aber ich darf es leider nicht nutzen so ist die Aufgabenstellung.
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Komplettlösungsansatz:
Und ja, Du darfst `random.sample()` nicht verwenden — ich wollte auch Deine Hausaufgaben nicht lösen.
Code: Alles auswählen
In [197]: from more_itertools import divide
In [198]: n = 3
In [199]: list(map(sorted, divide(n, random.sample(range(1, 50), 6 * n))))
Out[199]: [[4, 20, 23, 24, 29, 30], [3, 7, 15, 26, 36, 43], [1, 25, 32, 37, 40, 45]]
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
HAHA das ist Mies__blackjack__ hat geschrieben: ↑Montag 17. Januar 2022, 11:33 Komplettlösungsansatz:Und ja, Du darfst `random.sample()` nicht verwenden — ich wollte auch Deine Hausaufgaben nicht lösen.Code: Alles auswählen
In [197]: from more_itertools import divide In [198]: n = 3 In [199]: list(map(sorted, divide(n, random.sample(range(1, 50), 6 * n)))) Out[199]: [[4, 20, 23, 24, 29, 30], [3, 7, 15, 26, 36, 43], [1, 25, 32, 37, 40, 45]]
aber ich habe da was gesehen was mir weiterhelfen könnte und zwar wenn ich die n = 3 bei mir einbaue bekomme ich eine ganze Liste aber 3x raus. jetzt muss ich die ja durch Divide noch teilen dann müsste es ja eigentlich klappen! Frage ist nur wo setze ich das divide rein?:D
Also der neuste stand ist:
import random
zahlen = []
n = 6
x = 3
while len(zahlen) < 6 * x:
zahl = random.randint(1, 49)
if zahl not in zahlen:[
zahlen.append(zahl)
zahlen.sort()
output = [zahlen[i:i + n] for i in range(0, len(zahlen), n)]
print(output)
Soweit so gut hab ich dem prof gezeigt er ist nicht ganz zufrieden… er meinte das programm würde nun nur auf 1 liste zugreifen es soll aber füt jede 6 aus 49 aus einer neuen liste greifen und daist es egal ob beim ersten 6 aus 49 und beispielsweise aus der 3. liste von 6 aus 49 die zahlen gleich sind…. Hat da jemand ein tipp für mich? ( keine lösung nur den ansatz wo ich was verwenden könnte)
import random
zahlen = []
n = 6
x = 3
while len(zahlen) < 6 * x:
zahl = random.randint(1, 49)
if zahl not in zahlen:[
zahlen.append(zahl)
zahlen.sort()
output = [zahlen[i:i + n] for i in range(0, len(zahlen), n)]
print(output)
Soweit so gut hab ich dem prof gezeigt er ist nicht ganz zufrieden… er meinte das programm würde nun nur auf 1 liste zugreifen es soll aber füt jede 6 aus 49 aus einer neuen liste greifen und daist es egal ob beim ersten 6 aus 49 und beispielsweise aus der 3. liste von 6 aus 49 die zahlen gleich sind…. Hat da jemand ein tipp für mich? ( keine lösung nur den ansatz wo ich was verwenden könnte)
Das mit den Code-Tags, das wurde dir doch schon mitgeteilt, oder? So ist dein Code nunmal unlesbar.
Und die Aufgabe deines Profs wird trivial, wenn du deine Code (liste anlegen inklusive) in eine Funktion steckst, so wie man das eh machen sollte. Und die dann 3 mal aufrufst.
Und die Aufgabe deines Profs wird trivial, wenn du deine Code (liste anlegen inklusive) in eine Funktion steckst, so wie man das eh machen sollte. Und die dann 3 mal aufrufst.
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
An die beiden Vorposter: Das mit dem dreimal aufrufen geht nicht, jedenfalls nicht mit einer generischen `random.sample()`-Funktion, denn die Zahlen sollen über alle drei Listen eindeutig sein, nicht nur in jeder der drei Einzellisten. Deswegen ist meine Lösung die `random.sample()` benutzt ja so ”kompliziert”. Andernfalls wäre das ja einfach nur eine einfache „list comprehension“ mit `random.sample()`. Also ``[random.sample(range(1, 50), 6) for _ in range(3)]`` ist laut Aufgabenstellung keine korrekte Lösung.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Wenn ich das richtig verstehe (und das ist wirklich nicht leicht zu entziffern), dann hat blackjack unrecht (und somit Sülo früher auch) und die Lösung ist leichter als zunächst angenommen.Sülo hat geschrieben: ↑Dienstag 18. Januar 2022, 14:18 Soweit so gut hab ich dem prof gezeigt er ist nicht ganz zufrieden… er meinte das programm würde nun nur auf 1 liste zugreifen es soll aber füt jede 6 aus 49 aus einer neuen liste greifen und daist es egal ob beim ersten 6 aus 49 und beispielsweise aus der 3. liste von 6 aus 49 die zahlen gleich sind…. Hat da jemand ein tipp für mich? ( keine lösung nur den ansatz wo ich was verwenden könnte)
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Kebap hat geschrieben: ↑Dienstag 18. Januar 2022, 21:15Wenn ich das richtig verstehe (und das ist wirklich nicht leicht zu entziffern), dann hat blackjack unrecht (und somit Sülo früher auch) und die Lösung ist leichter als zunächst angenommen.Sülo hat geschrieben: ↑Dienstag 18. Januar 2022, 14:18 Soweit so gut hab ich dem prof gezeigt er ist nicht ganz zufrieden… er meinte das programm würde nun nur auf 1 liste zugreifen es soll aber füt jede 6 aus 49 aus einer neuen liste greifen und daist es egal ob beim ersten 6 aus 49 und beispielsweise aus der 3. liste von 6 aus 49 die zahlen gleich sind…. Hat da jemand ein tipp für mich? ( keine lösung nur den ansatz wo ich was verwenden könnte)
Wie hast du es Verstanden?
Also ich kann es ja nochmal Versuchen kurz zusammen zu fassen:
Ich soll ein Programm schreiben, welches 6 zufällige Zahlen aus einer Liste von 49 zieht. Dabei dürfen die Zahlen nicht doppelt vorkommen.
Das ganze soll jeweils aus 3 unterschiedlichen Listen passieren => dabei ist es egal ob die 6 zahlen der ersten liste mit den 6 zahlen aus den anderen Listen doppelt sind.
- __blackjack__
- User
- Beiträge: 13100
- 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.
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
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.__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.
[6, 2, 2, 3, 4, 5] <- nicht möglich
[1,2,3,4,5,6] [1,2,3,4,5,6] <- möglich
Code: Alles auswählen
for _ in range(3):
print(ziehe_lottozahlen())