Seite 1 von 1

Hallo, weiß jemand was an diesem Programm falsch ist?

Verfasst: Samstag 15. Januar 2022, 11:17
von Noah1379
Hallo, weiß jemand was an diesem Programm falsch ist? :?:

<def pruef_rate(antwort, loesung):>
<global punkte>
< noch_rate = 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))

Wenn ich auf die erste Frage antworte kommt immer nur:
Rate das Tier
Welcher Bär lebt am Nordpol? Eisbär
Traceback (most recent call last):
File "/Users/noahhoffmann/Library/Mobile Documents/com~apple~CloudDocs/Programmieren/Tierquiz.py", line 22, in <module>
pruef_rate(rate1, 'Eisbär')
File "/Users/noahhoffmann/Library/Mobile Documents/com~apple~CloudDocs/Programmieren/Tierquiz.py", line 4, in pruef_rate
versuch = O
NameError: name 'O' is not defined

Ich bin neu in Python und kenn mich noch nicht so gut mit den Fehlermeldungen aus.
Ich würde mich über eine Antwort freuen. :D

Re: Hallo, weiß jemand was an diesem Programm falsch ist?

Verfasst: Samstag 15. Januar 2022, 11:19
von Noah1379
Ich hatte eigentlich versucht, dass die Zeilen die mit <> umklammert sind ihre Position behalten. Weiß jemand wie das funktioniert?

Re: Hallo, weiß jemand was an diesem Programm falsch ist?

Verfasst: Samstag 15. Januar 2022, 11:52
von nezzcarth
Im Editor gibt es den Button "</>" um Quelltext zu formatieren. Da bleibt dann auch die Einrückung erhalten.

Das eigentliche Problem steht ja ganz gut in der Fehlermeldung: Es wurde der Buchstabe O verwendet, obwohl da wohl eine Null stehen soll. Stell den formatierten Quelltext vielleicht noch mal ein; soweit ich das erkennen kann, gibt es noch mehr Verbesserungspunkte an dem Code, über die man dann besser reden kann.

Re: Hallo, weiß jemand was an diesem Programm falsch ist?

Verfasst: Samstag 15. Januar 2022, 13:16
von Sirius3
Der Fehler ist doch eindeutig. Die Variable `O` ist nicht definiert. `O` ist etwas anderes als `0` (null)

Vergiss gleich wieder, dass es `global` überhaupt gibt. Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. Eine Funktion `pruef_rate` sollte erst gar nicht Punkte zählen, sondern nur als Rückgabewert sagen, ob die Antwort richtig war, oder nicht.

Flags für while-Schleifen benutzt man selten, da man mit `break` viel klarer den Wunsch, die Schleife abzubrechen ausdrücken kann (oder hier gleich per `return`).
Dann ist die if-Abfrage am Ende auch nicht mehr nötig und die while-Schleife wird zu for-Schleife.
Statt Strings per + zusammenzustückeln benutzt man Formatstrings.

In `pruefe_rate` prüfst Du das falsche.
Statt Code zu kopieren und leicht anzupassen, benutzt man passende Datenstrukturen, hier eine Liste mit Fragen und Antwort.

Code: Alles auswählen

def pruef_rate(antwort, loesung):
    for versuch in range(3):
        if versuch > 0:
            antwort = input('Falsch. Versuche es erneut ')
        if loesung.lower() == antwort.lower():
            print('Richtige Antwort')
            return True

    print (f'Die richtige Antwort ist {antwort}.')
    return False


fragen = [
    ('Welcher Bär lebt am Nordpol? ', 'Eisbär'),
    ('Was ist das schnellste Landtier? ', 'Gepard'),
    ('Was ist das größte Tier? ', 'Blauwal'),
]

punkte = 0
print('Rate das Tier')
for frage, loesung in fragen:
    antwort = input(frage)
    if pruef_rate(antwort, loesung):
        punkte += 1

print(f'Deine Punktzahl ist {punkte}')