Fehlermeldung Type Error

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.
Antworten
Boggel
User
Beiträge: 23
Registriert: Samstag 15. Dezember 2018, 12:56

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
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14032
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten