2008-11-26 2 views
1

Я пишу простую программу, которая поможет создавать заказы для игры, в которую я состою. Он попадает в категорию программ, которые мне действительно не нужны. Но теперь я начал, я хочу, чтобы он работал. Все это в значительной степени работает гладко, но я не могу понять, как остановить ошибку типа, возникающую примерно на полпути. Вот код;Проблема с ошибкой типа Python

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 

Может ли кто-нибудь помочь?

редактировать

Ошибка я получаю;

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' 
+0

Не могли бы вы высказать текущую ошибку? Я предполагаю, что вы в конечном итоге используете целую цепочку. – Draemon 2008-11-26 14:21:17

+0

мальчик, это плохой код ... – hop 2008-11-27 12:34:27

ответ

12

StackTrace бы помог, но по-видимому ошибка:

materials = 1 + (level * 1) 

«уровень» является строкой, и вы не можете выполнять арифметические операции над строками. Python - динамически типизированный язык, но не слабо типичный.

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

В других частях программы вы используете вход(), который будет оценивать введенную строку как Python, так что для «1» даст вам номер 1.

Но! Это очень опасно - представьте, что произойдет, если пользователь наберет «os.remove (filename)» вместо числа. Если пользователь не является только вами, и вам все равно, никогда не используйте input(). Он будет уходить в Python 3.0 (поведение raw_input будет переименовано в ввод).

Смежные вопросы