def pruefe_antwort(antwort, loesung):
global punkte
loesung_gefunden = False
versuch = O
while noch_rate and versuch < 3:
if rate.lower() == antwort.lower():
print('Richtige Antwort')
punkte = punkte + 1
noch_rate = False
else:
if versuch < 2:
rate = input('Falsch. Versuche es erneut ')
versuch = versuch + 1
if versuch == 3:
print ('Die richtige Antwort ist ' + antwort)
punkte = 0
print('Rate das Tier')
rate1 = input('Welcher Bär lebt am Nordpol? ')
pruef_rate(rate1, 'Eisbär')
rate2 = input('Was ist das schnellste Landtier? ')
pruef_rate(rate2, 'Gepard')
rate3 = input('Was ist das größte Tier? ')
pruef_rate(rate3, 'Blauwal')
print('Deine Punktzahl ist ' + str(punkte))
Was jemand den Fehler bei diesem kleinen Programm?
Bitte setze deinen Code in Code-Tags.
Die erscheinen automatisch, wenn du im vollständigen Editor den </>-Button drückst.
Zwischen die Tags gehört dein Code. Dann bleibt die Einrückung bestehen und die ist für Python nun mal unentbehrlich.
Und dann wäre es natürlich hilfreich, wenn du erzählst, _was_ der Fehler ist. Was geht nicht? was läuft anders als du erwartest?
Die erscheinen automatisch, wenn du im vollständigen Editor den </>-Button drückst.
Zwischen die Tags gehört dein Code. Dann bleibt die Einrückung bestehen und die ist für Python nun mal unentbehrlich.
Und dann wäre es natürlich hilfreich, wenn du erzählst, _was_ der Fehler ist. Was geht nicht? was läuft anders als du erwartest?
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Noah1379: Vergiss bitte gleich wieder, dass es ``global`` gibt. Das ist keine Lösung, sondern eine Quelle von Problemen. Funktionen bekommen alles was sie ausser Konstanten benötigen als Argumente und geben Ergebnisse als Rückgabewerte zurück. Die kommunizieren nicht über globale Variablen. Das ist sehr unübersichtlich und damit fehleranfällig, und erschwert es Code nachzuvollziehen und zu testen und Fehler zu finden.
Die Aufteilung was in der Funktion ist und was ausserhalb ist ungünstig, denn dadurch das der Benutzer ausserhalb der Funktion nach der Antwort gefragt wird, hat man den Code dafür dreimal, statt nur einmal in der Funktion. Das erste `input()` pro Frage gehört also *in* die Funktion.
In der Funktion ist auch einiges falsch. `loesung_gefunden` und `noch_rate` sind überflüssig wenn man den Code entsprechend schreibt. Wenn es maximal 3 Versuche geben soll, dann würde man eine ``for``-Schleife schreiben, die genau dreimal durchlaufen wird und in der ``for``-Schleife die Funktion mit ``return`` und einem passenden Rückgabewert verlassen falls richtig geraten wurde. Dann weiss man automatisch, dass die Antwort nicht gefunden wurde wenn der Programmfluss *hinter* der Schleife ankommt, und kann dort auch einfach ``return`` mit einem zu dieser Situation passenden Rückgabewert schreiben. Und schon braucht man keine Variablen mehr wo man sich merkt ob schon die Lösung gefunden wurde, oder ob man noch weiterraten muss.
Die Aufteilung was in der Funktion ist und was ausserhalb ist ungünstig, denn dadurch das der Benutzer ausserhalb der Funktion nach der Antwort gefragt wird, hat man den Code dafür dreimal, statt nur einmal in der Funktion. Das erste `input()` pro Frage gehört also *in* die Funktion.
In der Funktion ist auch einiges falsch. `loesung_gefunden` und `noch_rate` sind überflüssig wenn man den Code entsprechend schreibt. Wenn es maximal 3 Versuche geben soll, dann würde man eine ``for``-Schleife schreiben, die genau dreimal durchlaufen wird und in der ``for``-Schleife die Funktion mit ``return`` und einem passenden Rückgabewert verlassen falls richtig geraten wurde. Dann weiss man automatisch, dass die Antwort nicht gefunden wurde wenn der Programmfluss *hinter* der Schleife ankommt, und kann dort auch einfach ``return`` mit einem zu dieser Situation passenden Rückgabewert schreiben. Und schon braucht man keine Variablen mehr wo man sich merkt ob schon die Lösung gefunden wurde, oder ob man noch weiterraten muss.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari