Finde Fehler nicht (Französischer Abfrager)

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.
BlackJack

@Magnetonstar: Wieso muss das in der Liste sein? Das sehe ich nicht. Allerdings ist der Code auch sehr unübersichtlich und ich würde den Fehler da nicht weiter suchen, das hat nicht viel Sinn. Schreib das besser mal mit verständlicheren Namen und mit ”echten” Funktionen, also keine globalen Variablen und alle Werte ausser Konstanten sollten Funktionen als Argumente betreten und nicht einfach magisch von irgendwo her kommen. Das macht Programme total unübersichtlich und sehr schwer nachvollziehbar.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das Problem habe ich auch, dass das ganze extrem schwer nachvollziehbar ist...

Hier mal ein Programm, dass das gleiche macht:

Code: Alles auswählen

import random

ABFRAGEN = 2

de_fr_dict = {'die Blume ': 'la fleur',
              'der Stein ': 'la pierre',
              'die Wiese ': 'le pré'}
de_worte = list(de_fr_dict.keys())
for wort in random.sample(de_worte, ABFRAGEN):
    print('Bitte übersetzen:')
    eingabe = input(wort)
    if eingabe != de_fr_dict[wort]:
        print('Leider falsch. Korrekt ist: {}'.format(de_fr_dict[wort]))
    else:
        print('Richtig!')
Gruß, noisefloor
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@noisefloor: noch ein bißchen umständlich. Man kann sich gleich ein Sample von de_fr_dict.items() holen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Sirius3 - stimmt, hatte ich nicht dran gedacht. Dann so:

Code: Alles auswählen

import random

ABFRAGEN = 2

de_fr_dict = {'die Blume ': 'la fleur',
              'der Stein ': 'la pierre',
              'die Wiese ': 'le pré'}
for wortpaar in random.sample(de_fr_dict.items(), ABFRAGEN):
    print('Bitte übersetzen:')
    eingabe = input(wortpaar[0])
    if eingabe != wortpaar[1]:
        print('Leider falsch. Korrekt ist: {}'.format(wortpaar[1]))
    else:
        print('Richtig!')
Gruß, noisefloor
Magnetonstar
User
Beiträge: 14
Registriert: Montag 16. November 2015, 18:46

noisefloor hat geschrieben:Hallo,

@Sirius3 - stimmt, hatte ich nicht dran gedacht. Dann so:

Code: Alles auswählen

import random

ABFRAGEN = 2

de_fr_dict = {'die Blume ': 'la fleur',
              'der Stein ': 'la pierre',
              'die Wiese ': 'le pré'}
for wortpaar in random.sample(de_fr_dict.items(), ABFRAGEN):
    print('Bitte übersetzen:')
    eingabe = input(wortpaar[0])
    if eingabe != wortpaar[1]:
        print('Leider falsch. Korrekt ist: {}'.format(wortpaar[1]))
    else:
        print('Richtig!')
Gruß, noisefloor
Danke Vielmals!

Code: Alles auswählen

print("Wilkommen bei dem Französischen Abfrager!")
print("Geben Sie einfach die französische Übersetzung ein.")
print("Wenn das Geschlecht nicht klar ist, bitte mit '(m)' oder '(f)' angeben!")
print(" ")

import random

de_fr_dict = {
	'die Blume ' : 'la fleur',
	'die Wiese ' : 'le pré',
	'der Stein ' : 'la pierre',
	"der Horizont " : "l'horizon (m)"
}

de_worte = list(de_fr_dict.keys())

aufgaben = 4
punkte = 0

for wort in random.sample(de_worte, aufgaben):
	eingabe_wort = input(wort)
	if eingabe_wort == de_fr_dict[wort]:
		print("Richtig!")
		punkte += 1
		del de_fr_dict[wort]
	else:
		print("Falsch, die Lösung wäre " + de_fr_dict[wort])
		del de_fr_dict[wort]

print(" ")
print("Sie haben " + str(punkte) + " von " + str(aufgaben) + " Wörtern richtig!")
print("Das wären " + str(100 / aufgaben * punkte) + "%")
input("Drücken sie Enter um zu Beenden")
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Magnetonstar: schau nochmal die letze Version von noisefloor genau an. de_worte ist überflüssig. Wenn Du das Sample von de_fr_dict.items nimmst, dann hast Du schon wort und übersetzung als Laufvariablen der for-Schleife. random.sample sorg schon dafür, dass es keine doppelten Einträge kommen, das del ist also überflüssig und aus meiner Sicht sogar schlecht. Benutze Stringformatierung anstatt Strings mit + zusammenzustückeln. Die letzte Zeile gehört weg. Starte Konsolenprogramme aus der Eingabeaufforderung, wie es sich gedacht ist.
Antworten