Seite 2 von 2

Re: simpler Kopfrechner mit Pygame

Verfasst: Montag 7. Dezember 2020, 12:56
von Sam123
Hallo zusammen,
ich experimentiere wieder ein wenig mit dem Kopfrechner rum, und verstehe wieder nicht, warum er das macht, was er macht, bzw. wie ich es besser hinkriege. Nach dem dem ENTER wird das Ergebnis ausgewertet, und er stellt sofort wieder eine neue Aufgabe und als Eingabe wird dann wohl nichts eingelesen, weil es viel zu schnell geht?

Und es kommt folgende Fehlermeldung:

text = "richtig!" if ergebnis == int(eingabe) else "falsch!"
ValueError: invalid literal for int() with base 10: ''

Hat jeman ein Tip, wie mans richtig macht?

(Ich versuche es erstmal ohne die Funktionen, weil es für mich momentan so einfacher zu verstehen ist.)

Code: Alles auswählen

import pygame
import random

WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
BLUE = (0, 0, 128)

pygame.init()
pygame.display.set_caption("Kopfrechner")
font = pygame.font.Font('freesansbold.ttf', 50)
clock = pygame.time.Clock()
display = pygame.display.set_mode((800, 300))

status = None
while status != pygame.QUIT:

    zahl_1 = random.randint(1, 101)
    zahl_2 = random.randint(1, 101)
    ergebnis = zahl_1 + zahl_2
    aufgabe = "{0} + {1} = ".format(zahl_1, zahl_2)
    eingabe = ""
    print("aufgabe: ", aufgabe, ergebnis)

    while True:

        display.fill(WHITE)
        text = font.render(aufgabe, True, GREEN, BLUE)
        display.blit(text, (200, 50))

        for event in pygame.event.get():
            #print("event-for-Schleife: ", event)
            if event.type == pygame.QUIT:
                status = pygame.QUIT
                #print("status = pygame.QUIT", event)
                break
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    status = pygame.K_RETURN
                    #print("status = pygame.RETURN", event)
                    break
                elif event.key == pygame.K_BACKSPACE:
                    eingabe = eingabe[:-1]
                else:
                    eingabe = eingabe + event.unicode

        text = font.render(eingabe, True, GREEN, BLUE)
        display.blit(text, (450, 50))

        if status == pygame.K_RETURN:
            print("ergebnis: ", ergebnis)
            print("eingabe: ", eingabe)
            #print("if Abfrage, status = pygame.K_RETURN")
            text = "richtig!" if ergebnis == int(eingabe) else "falsch!"
            text = font.render(text, True, GREEN, BLUE)
            display.blit(text, (600, 50))
            pygame.display.flip()
            break

        pygame.display.flip()

        clock.tick(30)

        if status == pygame.QUIT:
            break
pygame.quit()

Re: simpler Kopfrechner mit Pygame

Verfasst: Montag 7. Dezember 2020, 13:46
von Sirius3
An welchen Stellen wird `status` gesetzt?

Re: simpler Kopfrechner mit Pygame

Verfasst: Montag 7. Dezember 2020, 14:44
von snafu
@Sam123
Wenn du innerhalb einer Schleife einen Wert veränderst, dann springt der Wert beim nächsten Durchlauf nicht wieder auf den Ursprungszustand zurück, sondern der bleibt dort, solange bis man ihn erneut verändert. In Verbindung mit dem Status geht dir da vielleicht ein Licht auf. :)

Re: simpler Kopfrechner mit Pygame

Verfasst: Montag 7. Dezember 2020, 16:40
von Sam123
Alles klar, danke euch! Ich war fälschlichweise davon ausgegangen, dass in der for-Schleife 'status' immer neu belegt wird.