Проблема с ошибкой типа 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'
Решение
Трассировка стека помогла бы, но, по-видимому, ошибка заключается в:
materials = 1 + (level * 1)
‘уровень’ - это строка, и вы не можете выполнять арифметические действия со строками.Python - это динамически типизированный язык, но не слабо типизированный.
level= raw_input('blah')
try:
level= int(level)
except ValueError:
# user put something non-numeric in, tell them off
В других частях программы вы используете input(), который будет оценивать введенную строку как Python, поэтому вместо "1” выдаст вам число 1.
Но!Это очень опасно — представьте, что произойдет, если пользователь введет “os.remove(имя файла)” вместо числа.Если пользователь - это только вы, и вам все равно, никогда не используйте input().Это исчезнет в Python 3.0 (поведение raw_input будет переименовано в input ).