Трассировка стека помогла бы, но, вероятно, ошибка:
materials = 1 + (level * 1)
‘level’ - это строка, и вы не можете выполнять арифметику со строками. 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).