所以我正在学习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
答案 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
时,健康会下降,就像伤害和耐力等一样。