Seite 1 von 1

Fehlermeldung Type Error

Verfasst: Freitag 28. Dezember 2018, 17:19
von Boggel
Hallo,

ich bin immernoch neu in Python und habe letzt ein mini Spiel angefangen zu schreiben doch schon wenn man Level 1 spielen will kommt eine Fehlermeldung die ich nicht ganz zuordnen/beheben kann.
Der Code für Level 1 sieht bisher so aus:

Code: Alles auswählen

if levelEingabe == "1":
    zahl11 = random.randint(0,50)
    zahl21 = random.randint(0,50)
    erg11 = zahl11 + zahl21
    timeout = 5


    print ("Dies ist Level 1 es ist sehr einfach.")   #erg11 = input(zahl11 "+" zahl21)
    time.sleep(2)
    t = Timer(timeout, print, ['Schade die Zeit ist abgelaufen.'])
    t.start()
    prompt = "Du hast %d Sekunden Zeit um die folgende Rechnung zu lösen:", zahl11, "+ ", zahl21, "\n" % timeout 
    answer = input(prompt)
    t.cancel()
    if answer == erg11:
        print("Gut gemacht das ist Richtig!")
    else:
        print("Schade das ist leider falsch.")
Die Fehlermeldung lautet: TypeError: not all arguments converted during string formatting
Wahrscheinlich habe ich nur etwas dummes übersehen oder falsch geschrieben.

Mfg Nils

Re: Fehlermeldung Type Error

Verfasst: Freitag 28. Dezember 2018, 17:25
von Sirius3
In `prompt` erzeugst Du ein Tupel, dessen letztes Element der String '\n' mit % formatiert werden soll, was halt nicht geht. Du willst wohl einen String mit %-ten für jeden der drei Variablen schreiben?

Das Timeout hat keinen Einfluß auf die Eingabe.

Re: Fehlermeldung Type Error

Verfasst: Freitag 28. Dezember 2018, 17:27
von __blackjack__
Der Fehler passiert hier:

Code: Alles auswählen

In [43]: "\n" % timeout
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-43-6c06d4c3895f> in <module>()
----> 1 "\n" % timeout

TypeError: not all arguments converted during string formatting
Die Kommata in der Zeile erzeugen ein Tupel bei dem das letzte Element eben genau der Ausdruck ist.

Warum überhaupt diese “Mischversuch“ `zahl1` und `zahl2` anders zu behandeln als `timeout`? Alle drei Werte sollten in *eine* Zeichenkette mit drei Platzhaltern formatiert werden. Und vielleicht auch mit der `format()`-Methode und nicht mit ``%``. Oder in aktuellen Python 3-Versionen gleich eine f-Zeichenkette.