Question

J'écris un programme simple pour aider à générer des commandes pour un jeu dont je suis membre. Cela entre dans la catégorie des programmes dont je n'ai pas besoin. Mais maintenant j'ai commencé je veux que ça fonctionne. Tout se passe plutôt bien, mais je ne vois pas comment arrêter une erreur de type survenue à mi-parcours. Voici le 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

Quelqu'un peut-il aider?

modifier

L’erreur que j’obtiens est;

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'
Était-ce utile?

La solution

Un stacktrace aurait aidé, mais l'erreur est probablement la suivante:

materials = 1 + (level * 1)

‘level’ est une chaîne et vous ne pouvez pas utiliser l’arithmétique sur les chaînes. Python est un langage typé dynamiquement, mais pas faiblement typé.

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

Dans d’autres parties du programme, vous utilisez input (), qui évaluera la chaîne entrée en Python. Ainsi, pour «1», vous obtiendrez le nombre 1.

Mais! C'est super dangereux - imaginez ce qui se passe si l'utilisateur tape «os.remove (nom du fichier)» au lieu d'un nombre. À moins que l'utilisateur ne soit que vous et que vous ne l'ayez pas fait, n'utilisez jamais input (). Il disparaîtra dans Python 3.0 (le comportement de raw_input sera renommé en entrée).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top