我正在写一段代码,其中的输出依赖于之前的输入。让我们想象一下,我选择了标有0和1的魔法石,然后从一个袋子里把它们拿出来。对于第一次选择,我得到0或1的机会是50/50,但是如果我选择了石头1,那么我接下来选择石头1的可能性是70%,选择石头0的可能性是30%。如果我选择石头0,那么下一次我选择石头0的可能性是60%,选择石头1的可能性是40%。
import random
ones = 0
zeros = 0
a = random.randint(0 , 100)
stone = 0
if a > 50:
stone = 1
else:
stone = 0
for i in range(100):
if stone == 1:
ones+= 1
a = random.randint(0 , 100)
if a > 30:
stone = 1
else:
stone = 0
if stone == 0:
zeros+= 1
a = random.randint(0 , 100)
if a > 40:
stone = 0
else:
stone = 1
print( ones)
print(zeros)
问题是1和0的总和不是100,但如果我将'if stone == 0‘替换为'else',一切都会正常工作。为什么会发生这样奇怪的事情呢?这两个条件不是一样的吗?
发布于 2020-12-06 21:49:01
for循环的第一部分如下所示:
if stone == 1:
ones+= 1
a = random.randint(0 , 100)
if a > 30:
stone = 1
else:
stone = 0
因此,如果stone
等于1,并且a
then不大于30,则stone
变为0。
然后,执行第二个if语句:
if stone == 0:
zeros+= 1
a = random.randint(0 , 100)
if a > 40:
stone = 0
else:
stone = 1
如果您改用else
,那么如果第一个条件为真,它就永远不会执行;如果第一个条件不为真,它总是会执行。
发布于 2020-12-06 21:50:26
不,实际上,如果在第一个if条件中,stone
的值变为0
,那么条件if stone == 0
变为True
,这导致在for循环的一次迭代中,两个计数器都可以加1。
使用
else
或
elif stone==0:
发布于 2020-12-07 19:55:25
感谢大家的回复。我终于找到了问题所在。似乎当我编写if和else时,由于if/else语句的结构,0和1的检查只发生一次,而如果我编写if,然后也写if,检查就会发生两次。这就是为什么1和0在同一次迭代中都会增加的原因。
https://stackoverflow.com/questions/65173421
复制