2008-11-26 115 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

堆栈跟踪会一直帮助,但据推测错误是:

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的行为将被重命名为输入)。