Python循环未按预期运行:为何无法生成直到出现5和3的随机数?
问题分析:循环条件的逻辑错误
嗨,我来帮你拆解这段代码为啥没达到预期效果~
你的核心需求是循环生成随机数,直到rolla等于5且rollb等于3时才停止,但问题出在循环的判断条件上:
原代码的循环条件是:
while rolla != 5 and rollb != 3:
这个条件的逻辑是:只有当rolla不等于5,并且rollb不等于3的时候,循环才会继续执行。换句话说,只要其中一个条件不成立(比如rolla等于5,不管rollb是什么;或者rollb等于3,不管rolla是什么),循环就会直接停止——这显然和你想要的“必须同时满足5和3才停止”完全相反!
举个例子:如果某次随机出rolla=5、rollb=4,这时候rolla !=5是False,整个and条件的结果就是False,循环会立刻停止,但这时候并没有满足你要的“5和3同时出现”的停止条件。
修正方案
你需要把循环条件改成只要不同时满足rolla=5和rollb=3,就继续循环,有两种等价的写法:
写法一:用not包裹目标条件
import random rolla = 0 rollb = 0 while not (rolla == 5 and rollb == 3): rolla = random.randint(1, 10) rollb = random.randint(1, 11) print(rolla, ' - ', rollb)
写法二:利用德摩根定律转换为or
根据逻辑运算的德摩根定律,not (A and B)等价于not A or not B,所以也可以写成:
import random rolla = 0 rollb = 0 while rolla != 5 or rollb != 3: rolla = random.randint(1, 10) rollb = random.randint(1, 11) print(rolla, ' - ', rollb)
这两种写法都能实现你的需求:只有当rolla等于5且rollb等于3时,循环才会停止。
内容的提问来源于stack exchange,提问作者Dom Wujek
相关产品推荐
相关产品推荐

