Seite 1 von 1

Unterschiedliche und zufällige Einträge aus Listen

Verfasst: Donnerstag 16. April 2020, 17:00
von lenaslnr
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

Re: Unterschiedliche und zufällige Einträge aus Listen

Verfasst: Donnerstag 16. April 2020, 18:18
von Sirius3
Du suchst wohl random.sample.

Re: Unterschiedliche und zufällige Einträge aus Listen

Verfasst: Donnerstag 16. April 2020, 19:53
von lenaslnr
Sirius3 hat geschrieben: Donnerstag 16. April 2020, 18:18 Du suchst wohl random.sample.
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?

Re: Unterschiedliche und zufällige Einträge aus Listen

Verfasst: Donnerstag 16. April 2020, 21:19
von Sirius3
Du sollst das ja auch statt der Schleife und choice benutzen. Hast Du denn in der Dokumentation überhaupt nachgelesen, was sample macht?

Re: Unterschiedliche und zufällige Einträge aus Listen

Verfasst: Freitag 17. April 2020, 14:28
von __blackjack__
@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:

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)
Aus dem Wörterbuch könnte man eventuell auch ein eigenständiges Objekt machen.

Re: Unterschiedliche und zufällige Einträge aus Listen

Verfasst: Freitag 17. April 2020, 20:40
von lenaslnr
__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:

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)
Aus dem Wörterbuch könnte man eventuell auch ein eigenständiges Objekt machen.
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!

Und die MEthode/Funktion habe ich zu create_exercise umbenannt, da sie tatsächlich die aufgabe nicht anzeigt, lediglich erstellt.

Re: Unterschiedliche und zufällige Einträge aus Listen

Verfasst: Freitag 17. April 2020, 21:06
von __blackjack__
@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.