Pregunta

Estoy escribiendo un programa simple para ayudar a generar pedidos para un juego del que soy miembro. Cae en la categoría de programas que realmente no necesito. Pero ahora que empecé, quiero que funcione. Todo funciona sin problemas, pero no puedo encontrar la manera de detener un error de tipo a mitad de camino. Aquí está el código;

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

¿Alguien puede ayudar?

edit

El error que obtengo es;

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'
¿Fue útil?

Solución

Un seguimiento de pila hubiera ayudado, pero presumiblemente el error es:

materials = 1 + (level * 1)

‘nivel’ es una cadena, y no puede hacer aritmética en cadenas. Python es un lenguaje de tipo dinámico, pero no de tipo débil.

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

En otras partes del programa está utilizando input (), que evaluará la cadena ingresada como Python, por lo que para "1" le dará el número 1.

Pero! Esto es súper peligroso: imagine lo que sucede si el usuario escribe "os.remove (nombre de archivo)" en lugar de un número. A menos que el usuario sea solo usted y no le importe, nunca use input (). Desaparecerá en Python 3.0 (el comportamiento de raw_input cambiará de nombre a entrada).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top