1

所以我正在用“Learn Python The Hard Way”来学习 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
4

3 回答 3

1

你有:

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

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

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

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

于 2013-02-02T19:41:58.077 回答
0

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

它应该使您能够在游戏中添加诸如killlook等动词。

--

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

于 2013-02-02T20:01:47.910 回答
0

有几种方法可以处理这个问题。

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

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

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

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

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

于 2013-02-02T19:40:07.047 回答