【发布时间】:2019-06-07 08:35:39
【问题描述】:
这是一个非常简单的掷骰子程序,它不断掷出两个骰子,直到得到双六。所以我的 while 语句结构如下:
while DieOne != 6 and DieTwo != 6:
由于某种原因,程序在DieOne 得到一个 6 时立即结束。 DieTwo 根本不考虑。
但是,如果我在 while 语句中将 and 更改为 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
【问题讨论】:
-
如果
DieOne是 6,那么声明DieOne != 6 and DieTwo != 6是错误的,因为这不是真的,两个骰子都不等于 6。 -
这对我来说很有意义,所以不清楚你在问什么。您希望循环在 两个 检查都为假时结束,所以 or 是正确的组合。
-
问题是这样的。你想要
NOT(die 1 is 6 AND die 2 is 6).等价的条件变成die 1 is NOT 6 OR die 2 is NOT 6.这是一个你需要解决的逻辑问题。当您说“die 1 is not 6 AND die 2 is not 6”时,当其中一个变为 6 时,条件将立即失败,因为 AND 需要确保满足两个条件。 -
简化:
while DieOne+DieTwo != 12:... 或简单地将while True:与您的break一起使用
标签: python while-loop boolean multiple-conditions