Python 奇怪的行为?
我不明白为什么下面的陈述不起作用Python 奇怪的行为?,python,python-3.x,Python,Python 3.x,我不明白为什么下面的陈述不起作用 randomKey = random.choice(list(topic.keys())) randomValue = random.choice(topic[randomKey]) current = "-" * len(randomValue) while current != randomValue: (statements) else: (statements) 但是,如果我将第1行更改为 while current == rando
randomKey = random.choice(list(topic.keys()))
randomValue = random.choice(topic[randomKey])
current = "-" * len(randomValue)
while current != randomValue:
(statements)
else:
(statements)
但是,如果我将第1行更改为
while current == randomValue:
“else”后面的语句执行正确。否则,“else”后面的语句将不执行。知道为什么会有这种奇怪的行为吗?完整代码已被排除,因为它将贯穿整个页面。它是Python语法的一部分。发件人: 这个[a
while
语句]反复测试表达式,如果是真的,则执行第一个套件;如果表达式为false(可能是第一次测试),则执行else
子句的套件(如果存在),循环终止
因此,在第一种情况下,while条件的计算结果肯定不会为false,而在第二种情况下,它最终会为false。请注意,显式中断循环不会执行else子句。
else
与while
一起使用时,如果while循环结束时表达式为false,而不是被break
语句中断,则在while表达式计算为falsy值后运行(或通过返回
或引发
异常而离开函数的执行)。第二个示例中的while条件必须失败,因此没有机会发生中断
,函数返回或抛出异常,因此else
语句将始终运行
如果你不把它归结为一个简单的工作示例,我们没有办法做得比胡乱猜测更好。while条件永远不会为真,或者你在某个地方有一个
break
,谢谢,但我查看了整个代码&没有break关键字:(请查看我的编辑。是否想知道“随机”是否会导致这种奇怪的行为?谢谢,但我查看了整个代码,没有break关键字:(请查看我的编辑。是否想知道“随机”是否会导致这种奇怪的行为?谢谢,但我查看了整个代码,没有break关键字:(请查看我的编辑。是否想知道“随机”是否会导致这种奇怪的行为?@brainsfrying:答案仍然是一样的。可能是您的随机选择导致条件在一种情况下评估为假,而不是在另一种情况下评估为假。您是否可以提供一个具有固定值且始终为f的确定性示例来代替使用随机生病/成功?