문제

저는 제가 회원 인 게임에 대한 주문을 생성하는 데 도움이되는 간단한 프로그램을 작성하고 있습니다. 그것은 실제로 필요하지 않은 프로그램의 애호가에 속합니다. 그러나 지금 나는 그것이 작동하기를 원했습니다. 그것은 모두 거의 매끄럽게 작동하지만 반쯤 지나가는 유형 오류를 막는 방법을 알 수는 없습니다. 코드는 다음과 같습니다.

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)

'레벨'은 문자열이며 문자열에서 산술을 할 수 없습니다. 파이썬은 동적으로 유형 된 언어이지만 약한 언어는 아닙니다.

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

프로그램의 다른 부분에서는 입력 된 문자열을 Python으로 평가하는 input ()을 사용하여 "1"을 위해 숫자 1을 제공합니다.

하지만! 사용자가 숫자 대신 "os.remove (filename)"를 입력하면 어떻게되는지 상상해보십시오. 사용자가 당신만이 아니라 신경 쓰지 않는 한, input ()를 사용하지 마십시오. Python 3.0에서 사라질 것입니다 (RAW_INPUT의 동작은 입력으로 이름이 바뀔 것입니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top