Nabend zusammen,
ich hock, wahrscheinlich wie viele vor mir an einer Art Vokabeltrainer, die ich allerdings nun gern umfunktionieren würde zu einem Quiz.
Mein erster Versuch einfach ein dict mit Fragen und eines mit Antworten zu nutzen erwies sich als ziemlich unpraktikabel,
da man in 95% der Fälle Antworten sofort ausschliessen konnte die absolut nicht zur Fragestellung passten.
Daher wüsst ich gern ob man einem dict key 3 oder mehrerer Werte zuweisen kann und die auch gezielt ansteuern. Hashmaps hat Python (soweit ich bisher weiss) ja nicht,
wobei ich die in Java vor Urzeiten auch teils umständlich verschachteln musste
Besten Dank
Dict mit 3 Values pro Key möglich?
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Python hat keine Hashmaps? Was glaubst du, was dicts sind?
Und ja, man kann dicts mit drei values pro key anlegen:Genau genommen ist das immer noch nur ein einziger value pro key, nur sind die values eben drei-elementige tuple. Aber wir wollen hier mal keine Korinthen kacken.
Und ja, man kann dicts mit drei values pro key anlegen:
Code: Alles auswählen
>>> d = {
... 'a': ('b', 'c', 'd'),
... 'e': ('f', 'g', 'h')
... }
>>> d
{'a': ('b', 'c', 'd'), 'e': ('f', 'g', 'h')}
>>> d['a']
('b', 'c', 'd')
>>> d['a'][1]
'c'
>>> d['a'][2]
'd'
In specifications, Murphy's Law supersedes Ohm's.
- __blackjack__
- User
- Beiträge: 13117
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wobei Fragen als Schlüssel IMHO schon ein bisschen komisch sind, denn man greift ja normalerweise nicht über die Frage auf die Antworten zu, sondern arbeitet die Fragen/Antworten der Reihe nach ab, also ist das eher eine Sequenz, also eine Liste von Fragen + Antworten. Bei einer Liste kann man dann auch `random.shuffle()` ganz einfach benutzen damit die Fragen nicht immer in der gleichen Reihenfolge gestellt werden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Stimmt, Frage als Schlüssel ist komisch, da war ein Denkfehler im Hirn.
Und danke auch den anderen. Python ist mir (noch) relativ fremd und ich hab Dictionaries für eindimensional gehalten und mich nicht zu tief damit befasst.
Werd mir das verschachteln mal genauer ansehen
Und danke auch den anderen. Python ist mir (noch) relativ fremd und ich hab Dictionaries für eindimensional gehalten und mich nicht zu tief damit befasst.
Werd mir das verschachteln mal genauer ansehen
Soll der Benutzer eine Auswahl aus mehreren Antworten habe? Dann wäre ein solches Schema denkbar:
Wobei man das Durchnummerieren natürlich im tatsächlichen Code nicht macht, sondern stattdessen Texte einsetzt.
Code: Alles auswählen
fragen = {
frage1:
{antwort1: True, antwort2: False, antwort3: False},
frage2:
{antwort1: False, antwort2: False, antwort3: True},
...
}
for frage, antworten in random.sample(fragen.items(), len(fragen)):
...
Ein Dictionary ist auch eindimensional, aber du kannst ja, wie gezeigt, als Wert ein Tupel nehmen. Für Listen gilt das natürlich auch und ein beliebiger Mix ist ebenfalls möglich. Die Tiefe ist nicht limitiert.
- __blackjack__
- User
- Beiträge: 13117
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@snafu: Denkbar, naja, es ist halt die falsche Datenstruktur. Man benutzt ja nie das Wörterbuch wenn man immer nur `items()` verwendet und nie tatsächlich auch mal per Schlüssel auf einen Wert zugreift. Und für die Antworten würde ich einfach festlegen das immer die erste Antwort die richtige ist und die dann bei der Abfrage vorher ”mischen”, damit die richtige Antwort nicht immer an der gleichen Stelle steht. Die Datenstruktur könnte dann so aussehen:
Code: Alles auswählen
fragen = [
("frage1", ["antwort1", "antwort2", "antwort3"]),
("frage2", ["antwort1", "antwort2", "antwort3"]),
...
]
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman