Hallo,
ich würde gerne aus zwei bestehenden Listen eine weitere Liste bilden mit einer bestimmten Anzahl an Einträgen. Hier bei sollen aus den bestehenden Listen eine bestimmte Anzahl von den jeweiligen Elementen eingefügt werden.
Soweit bin ich schon. Jetzt würde ich jedoch gern gewährleisten, dass die Einträge unterschiedlich sind.
Wie muss ich meine Methode denn dahin gehend verändern?
Hier mal meine Methode:
def display_exercise(self):
exercise = self.select_exercise()
polynom = exercise['polynom']
correct_factors = exercise['correct_factor']
wrong_factors = exercise['wrong_factor']
factors = []
value = random.randint(5, 10)
r = random.SystemRandom()
debug = 0
for i in range(0, value):
# in factors[] Elemente einfügen
factors.append(r.choice(correct_factors))
for i in range(value, 16):
factors.append(r.choice(wrong_factors))
print(polynom, factors)
#return polynom, factors
Meine Ausgabe in der Console ist bisher eben das polynom und eine Liste factors mit Elementen aus den Listen correct_factors und wrong_factors
Unterschiedliche und zufällige Einträge aus Listen
Das funktioniert leider nicht wenn ich das statt random.SystemRandom() schreibe, da bekomme ich eine Fehlermeldung?
Brauch ich dann auch eine andere Funktion als choice?
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@lenaslnr: Die hart kodierten magischen Zahlen sind nicht gut. Das sollten mindestens Konstanten sein, und falls Werte von anderen Werten abhängig sind, dann sollten die berechnet werden. Im Moment kann man beispielsweise nicht sagen ob das jetzt zufällig ein bis zwei drittel richtige Faktoren sind, oder ob das Absicht ist. Falls das Absicht ist, sollten die 5 und die 10 entsprechend aus der 15 berechnet werden. Und die 15 passt auch immer garantiert zu dem Wert in `polynom`? Wie ist das sichergestellt?
Das sieht mir auch sehr nach einer Funktion aus statt nach einer Methode. Soll in einer `display…`-Funktion nicht eher tatsächlich nur etwas angezeigt werden, statt da am Anfang noch einen Aufruf zu machen der erst noch etwas aswählt das angezeigt wird?
Zwischenstand, ungetestet:
Aus dem Wörterbuch könnte man eventuell auch ein eigenständiges Objekt machen.
Das sieht mir auch sehr nach einer Funktion aus statt nach einer Methode. Soll in einer `display…`-Funktion nicht eher tatsächlich nur etwas angezeigt werden, statt da am Anfang noch einen Aufruf zu machen der erst noch etwas aswählt das angezeigt wird?
Zwischenstand, ungetestet:
Code: Alles auswählen
def display_exercise(exercise):
correct_factor_count = random.randint(5, 10)
random_generator = random.SystemRandom()
factors = random_generator.sample(
exercise["correct_factor"], correct_factor_count
) + random_generator.sample(
exercise["wrong_factor"], 15 - correct_factor_count
)
print(exercise["polynom"], factors)
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Ah alles klar danke dir! Ja das bit den 5 und 15 soll eine zufällige zahl sein das war absicht. ich möchte die auch gar nicht berechnen, weil ich ein spielfeld habe auf dem immer wenn es geladen wird eine andere anzahl an "richtigen" und"falschen" Faktoren angezeigt wird!__blackjack__ hat geschrieben: Freitag 17. April 2020, 14:28 @lenaslnr: Die hart kodierten magischen Zahlen sind nicht gut. Das sollten mindestens Konstanten sein, und falls Werte von anderen Werten abhängig sind, dann sollten die berechnet werden. Im Moment kann man beispielsweise nicht sagen ob das jetzt zufällig ein bis zwei drittel richtige Faktoren sind, oder ob das Absicht ist. Falls das Absicht ist, sollten die 5 und die 10 entsprechend aus der 15 berechnet werden. Und die 15 passt auch immer garantiert zu dem Wert in `polynom`? Wie ist das sichergestellt?
Das sieht mir auch sehr nach einer Funktion aus statt nach einer Methode. Soll in einer `display…`-Funktion nicht eher tatsächlich nur etwas angezeigt werden, statt da am Anfang noch einen Aufruf zu machen der erst noch etwas aswählt das angezeigt wird?
Zwischenstand, ungetestet:Aus dem Wörterbuch könnte man eventuell auch ein eigenständiges Objekt machen.Code: Alles auswählen
def display_exercise(exercise): correct_factor_count = random.randint(5, 10) random_generator = random.SystemRandom() factors = random_generator.sample( exercise["correct_factor"], correct_factor_count ) + random_generator.sample( exercise["wrong_factor"], 15 - correct_factor_count ) print(exercise["polynom"], factors)
Und die MEthode/Funktion habe ich zu create_exercise umbenannt, da sie tatsächlich die aufgabe nicht anzeigt, lediglich erstellt.
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@lenaslnr: Ich weiss nicht ob Du das mit 5, 10, und15 richtig verstanden hast, denn Deine Antwort macht für mich keinen Sinn. Mir geht es darum wo a) die 15 her kommt, und b) wieso 5 und 10 als Grenzen für die Zufallszahl. Alle drei Zahlen sollten da nicht als literale, magische Zahlen so im Code stehen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari