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的确定性示例来代替使用随机生病/成功?