作为学校评估的一部分,我正在使用python创建一个基于文本的游戏。我需要使用一个while循环,该循环重复直到变量等于“ west”或“ east”。
我尝试了两种方法,但都没有用。
这是我使用过的两种方法。
1:
chamber = input("Enter 'east' or 'west' to choose a chamber: ")
while 'west' not in chamber.lower() or 'east' not in chamber.lower():
chamber = input("Enter 'east' or 'west' to choose a chamber: ")
2:
chamber = input("Enter 'east' or 'west' to choose a chamber: ")
while chamber.lower() != 'west' or 'east':
chamber = input("Enter 'east' or 'west' to choose a chamber: ")
我希望它会一直循环直到变量'chamber'等于'west'或'east',但是无论输入什么,它都会一直循环。
答案 0 :(得分:4)
第一个代码段不起作用,因为子条件始终是True
,并且使用or
会评估整个条件True
第二个片段等同于while chamber.lower() != 'west' or True
,因此条件将始终被评估为True
使用while chamber.lower() not in ('west', 'east'):
或:
while True:
chamber = input("Enter 'east' or 'west' to choose a chamber: ")
if chamber.lower() in ('west', 'east'):
break
请注意,您可以使用集合{'west', 'east'}
来代替元组('west', 'east')
,如果元素数量很多,可能会提高性能。仅2个元素就没有实际差异。
答案 1 :(得分:0)
您可以简单地检查用户输入是“东方”还是“西方”,我不认为如果提示他们输入特定的内容,他们不会输入长字符串。
In [29]: def something():
...: s = raw_input("enter ")
...: while "east" != s and "west" != s:
...: something()
...:
In [30]: something()
enter east
答案 2 :(得分:0)
您必须分别评估每个条件; Python不是AI。 进行第二次尝试更改:
chamber = input("Enter 'east' or 'west' to choose a chamber: ")
while chamber.lower() != 'west' and chamber.lower() != 'east':
chamber = input("Enter 'east' or 'west' to choose a chamber: ")
您的第二个代码段将始终评估为True
,即使您输入west
,chamber.lower() != 'east'
也将是正确的。
答案 3 :(得分:-1)
您可以执行以下操作:
test = 1
chamber = input("Enter 'east' or 'west' to choose a chamber: ")
while test != 0:
if chamber == 'east' or chamber == 'west':
test = test - 1
else:
chambers = input("Enter 'east' or 'west' to choose a chamber: ")