質問

私は、メンバーであるゲームの注文を生成するための簡単なプログラムを書いています。私が実際に必要としないプログラムのカテゴリに分類されます。しかし、今、私はそれを動作させたいと思っています。すべてがスムーズに実行されますが、途中で発生する型エラーを停止する方法はわかりません。コードは次のとおりです。

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

プログラムの他の部分では、入力された文字列をPythonとして評価するinput()を使用しているため、「1」の場合は1が返されます。

しかし!これは非常に危険です-ユーザーが数字ではなく「os.remove(filename)」と入力した場合に何が起こるか想像してください。ユーザーがあなただけで、気にしない限り、input()を使用しないでください。 Python 3.0では廃止されます(raw_inputの動作はinputという名前に変更されます)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top