Frage

Ich schreibe ein einfaches Programm, um Aufträge zu generieren für ein Spiel, das ich bin Mitglied. Es fällt in die catergory der Programme, die ich nicht wirklich brauchen. Aber jetzt habe ich begonnen, ich will arbeiten. Das alles ziemlich reibungslos läuft, aber ich kann nicht herausfinden, wie ein Typ-Fehler etwa auf halbem Weg durch ocurring zu stoppen. Hier ist der Code;

status = 1

print "[b][u]magic[/u][/b]"

while status == 1:
    print " "
    print "would you like to:"
    print " "
    print "1) add another spell"
    print "2) end"
    print " "
    choice = input("Choose your option: ")
    print " "
    if choice == 1:
        name = raw_input("What is the spell called?")
        level = raw_input("What level of the spell are you trying to research?")
        print "What tier is the spell: "
        print " "
        print "1) low"
        print "2) mid"
        print "3) high"
        print " "
        tier = input("Choose your option: ")
        if tier == 1:
            materials = 1 + (level * 1)
            rp = 10 + (level * 5)
        elif tier == 2:
            materials = 2 + (level * 1.5)
            rp = 10 + (level * 15)
        elif tier == 3:
            materials = 5 + (level * 2)
            rp = 60 + (level * 40)
        print "research ", name, "to level ", level, "--- material cost = ",
                materials, "and research point cost =", rp
    elif choice == 2:
        status = 0

Kann mir jemand helfen?

Bearbeiten

Der Fehler, den ich bekommen ist;

Traceback (most recent call last):
  File "C:\Users\Mike\Documents\python\magic orders", line 27, in <module>
    materials = 1 + (level * 1)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
War es hilfreich?

Lösung

Ein stacktrace habe geholfen, aber vermutlich der Fehler:

materials = 1 + (level * 1)

‚Ebene‘ ist eine Zeichenfolge, und Sie können Arithmetik auf Strings nicht. Python ist eine dynamisch typisierte Sprache, aber nicht schwach typisierte ein.

level= raw_input('blah')
try:
    level= int(level)
except ValueError:
    # user put something non-numeric in, tell them off

In anderen Teilen des Programms Eingabe verwenden (), die die eingegebene Zeichenkette als Python auswerten wird, so für „1“ gibt Ihnen die Nummer 1.

Aber! Das ist super-gefährlich - vorstellen was passiert, wenn der Benutzer „os.remove (Dateiname)“ geschieht anstelle einer Zahl. Es sei denn, der Benutzer nur Sie ist und Sie sich nicht, nie Eingang () verwenden. Es wird in Python weggeht wird 3,0 (raw_input Verhalten Eingang wird umbenannt).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top