Pergunta

Eu estou escrevendo um programa simples para ajudar a gerar ordens para um jogo que eu sou um membro. Inscreve-se na catergory de programas que eu realmente não precisa. Mas agora eu comecei eu quero que ele funcione. Tudo muito bonito corra bem, mas eu não posso descobrir como parar um ocurring erro de tipo sobre a meio. Aqui está o 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

alguém pode ajudar?

editar

O erro que eu vejo é;

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

Solução

A stacktrace teria ajudado, mas provavelmente o erro é:

materials = 1 + (level * 1)

‘nível’ é uma string, e você não pode fazer aritmética em cordas. Python é uma linguagem dinamicamente digitado, mas não um fracamente tipado.

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

Em outras partes do programa que você está usando a entrada (), que irá avaliar a cadeia introduzida como Python, assim, por “1” irá dar-lhe o número 1.

Mas! Isso é super-perigosa - imagine o que acontece se o usuário digitar “os.remove (filename)” em vez de um número. A menos que o usuário é só você e você não se importa, nunca use input (). Ele vai estar indo embora em Python 3.0 (comportamento de raw_input será renomeado entrada).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top