试图在while循环中设置“错误键按下”错误

时间:2013-02-02 19:35:48

标签: python python-2.7

所以我正在学习Python,学习'艰难学习Python', 我目前正在写一个简单的文字冒险。

我的问题出在代码的“战斗”部分(下面提供)。只有数字1和2意味着用户按下。如果按下一个不同的int,它会正确地抛出'抱歉不明白',但是如果按下一个字母,它会吓坏并退出说,(非常正确)它期待一个int。显然我的问题是,如何设置它以期望两者,并在按下一个字母时抛出错误?

提前致谢:)

        while True:
            player_dmg = randint(1, 10)
            enemy_dmg = randint(1, 10)

            if enemy_hp < 0:
                os.system('clear')
                print "[ENEMY NUTRALISED]"
                print
                print hit_e
                raw_input()
                return 'forth_area'
            elif player_hp < 0:
                return 'death'

            else:
                print "[COMBAT OPTIONS]"
                print "1. Attack"
                print "2. Defend"
                print
                choice = raw_input("*>>*")
                choice = int(choice)
                print
            if choice == 1:
                enemy_hp = enemy_hp - player_dmg
                print "[ENEMY STATUS: %d]" % enemy_hp
                print "[DAMAGE DONE: %d]" % player_dmg
                print
                player_hp = player_hp - enemy_dmg
                print "[DAMAGE RECIVED: %d]" % enemy_dmg
                print "[CURRENT STATUS: %d]" % player_hp
            elif choice  == 2:
                enemy_hp = enemy_hp - player_dmg / 2
                print "[ENEMY STATUS %d]" % enemy_hp
                print "[DAMAGE DONE %d]" % player_dmg
                print
                player_hp = player_hp - enemy_dmg
                player_hp = player_hp + 3
                print "[DAMAGE RECIVED: %d]" % enemy_dmg
                print "[CURRENT STATUS: %d]" % player_hp
                print
            else:
                print no_understand

3 个答案:

答案 0 :(得分:1)

你有:

choice = raw_input("*>>*")
choice = int(choice)
# . . .
if choice == 1:
# . . .
elif choice == 2:

最简单的解决方法是使用:

choice = raw_input("*>>*")
# . . .
if choice == '1':
# . . .
elif choice == '2':

raw_input返回一个字符串。为什么要将它转换为数字?只需测试文本'1''2'等。它还可以更轻松地添加字符命令(例如'q'以退出)。

答案 1 :(得分:0)

有几种方法可以解决这个问题。

我认为一个简单的解决方案是例外。

try:
    choice = int(choice)
except:
    choice = None

它只是尝试将choice转换为int类型。如果失败,则运行except块,并将choice设置为None,因此if / elif块将不会运行。

好吧,不是最简单的,@ jimhark有一个更简单的方法。

在这种情况下,将输入转换为整数几乎没有价值。

答案 2 :(得分:0)

我已经回答了类似的问题https://stackoverflow.com/a/14644220/1481060并建议使用处理这些命令循环的标准模块cmd

它应该让你能够在游戏中添加 kill look 等动词。

-

你可能还想把你的游戏建模为对象,这样你就不会留下太多的变量,因为我可以想象,当某些东西得到hit时,健康会下降,就像伤害和耐力等一样。