即使不再满足条件,如何解决永远重复的while循环?

时间:2019-09-10 07:26:44

标签: python while-loop

作为学校评估的一部分,我正在使用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',但是无论输入什么,它都会一直循环。

4 个答案:

答案 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,即使您输入westchamber.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: ")