Python'while'有两个条件:“and”或“or”

ghu*_*man 8 python boolean while-loop multiple-conditions

这是一个非常简单的掷骰子程序,它不断掷两个骰子,直到得到双 6。所以我的 while 语句结构如下:

while DieOne != 6 and DieTwo != 6:
Run Code Online (Sandbox Code Playgroud)

出于某种原因,该计划在DieOne获得 6 分后立即结束。DieTwo根本不考虑。

但是如果我将 while 语句中的theand改为 an or,程序就可以完美运行。这对我来说没有意义。

import random
print('How many times before double 6s?')
num=0
DieOne = 0
DieTwo = 0

while DieOne != 6 or DieTwo != 6:
    num = num + 1
    DieOne = random.randint(1,6)
    DieTwo = random.randint(1,6)
    print(DieOne)
    print(DieTwo)
    print()
    if (DieOne == 6) and (DieTwo == 6):
        num = str(num)
        print('You got double 6s in ' + num + ' tries!')
        print()
        break
Run Code Online (Sandbox Code Playgroud)

小智 10

TLDR 在底部。

首先,如果以下条件为真,while 循环就会运行,所以

DieOne != 6 or DieTwo != 6:
Run Code Online (Sandbox Code Playgroud)

简化时必须返回 true,以便运行 while 函数

运营商时返回true两个条件都满足,所以当它是while循环将只运行真时真

因此,例如,如果任一骰子掷出 6,则以下内容将不会运行:

while DieOne != 6 and DieTwo != 6:
Run Code Online (Sandbox Code Playgroud)

如果 DieOne 掷出 4 而 DieTwo 掷出 6,while 循环将不会运行,因为 DieOne != 6 为真,而 DieTwo != 6 为假。我把这个思路放到了下面的代码中。

while DieOne != 6 and DieTwo != 6:
while True and False:
while False: #So it won't run because it is false
Run Code Online (Sandbox Code Playgroud)

操作员的工作方式不同,该操作返回时真一个条件是真实的,所以当它是while循环将运行真或真真或假,或_False或真。所以

while DieOne != 6 or DieTwo != 6:
Run Code Online (Sandbox Code Playgroud)

如果只有两个骰子掷出 6,则将运行。例如:

如果 DieOne 掷出 4 而 DieTwo 掷出 6,while 循环将运行,因为 DieOne != 6 为真,而 DieTwo != 6 为假。我把这个思路放到了下面的代码中。

while DieOne != 6 or DieTwo != 6:
while True or False:
while True: #So it will run because it is true
Run Code Online (Sandbox Code Playgroud)

TLDR/评论:

while True: #Will run
while False: #Won't run
Run Code Online (Sandbox Code Playgroud)

和:

while True and True: #Will run
while True and False: #Won't run
while False and True: #Won't run
while False and False: #Won't run
Run Code Online (Sandbox Code Playgroud)

或者:

while True or True: #Will run
while True or False: #Will run
while False or True: #Will run
while False or False: #Won't run
Run Code Online (Sandbox Code Playgroud)