Python while循环不按预期工作

Fea*_*ENT 2 python loops while-loop

当我在输入中键入"no"时,我希望它将"1"添加到"x",从而结束循环,但会发生的是忽略它并且不添加1 x.这是代码.

x = 1
password = ""

while x == 1:        
    # imagine there is some code here which works

    ans1 = input("\n\nTest a new password? ")
    ans1 = ans1.upper()

    print(ans1)

    if ans1 == ("Y" or "YES"):
        x = x
    elif ans1 == ("N" or "NO"):
        x = x + 10

    print(x)
Run Code Online (Sandbox Code Playgroud)

这是底部if/elif语句不起作用.它应该继续再次请求输入,直到用户说"不",但这不起作用.

Ale*_*eau 5

你应该使用或那样.

if ans1 == ("Y" or "YES"):
Run Code Online (Sandbox Code Playgroud)

可以替换为:

if ans1 == "Y" or ans1 == "YES": 
Run Code Online (Sandbox Code Playgroud)

要么:

if ans1 in ("Y", "YES"): 
Run Code Online (Sandbox Code Playgroud)

该错误来自or运营商的定义.当你执行"Y"或"YES"时,A or B如果A不为假,它将返回"Y",如定义为返回A. 这里,A是"Y",它不是假值.因此,它将返回A ="Y".如果你这样做if a == ("Y" or "YES"):,il将相当于if a == "Y":.好吧,这有点棘手,但这是python的工作原理.

而且,你的代码很奇怪.退出这样的循环是一个非常糟糕的习惯.通常,我们将一个布尔值"循环"设置为false,当我们想要离开循环时.

这是我如何做你的循环:

looping = True 
password = "" 

while looping: 

    ans1 = input("\n\nTest a new password? ")

    if ans1.upper() in ("NO", "N"): 
        looping = False
Run Code Online (Sandbox Code Playgroud)

您还可以使用具有无限循环(while True:)的构造.然后,调用指令break退出循环.