0

我无法弄清楚为什么以下陈述不起作用。

randomKey = random.choice(list(topic.keys()))
randomValue = random.choice(topic[randomKey])

current = "-" * len(randomValue) 
while current != randomValue: 
   (statements)
else:
   (statements)

但是,如果我将第一行更改为

while current == randomValue:

'else' 之后的语句正确执行。否则,'else' 后面的语句不会执行。知道为什么会导致奇怪的行为吗?完整代码已被排除,因为它将贯穿整个页面。

4

2 回答 2

1

它是 Python 语法的一部分。从文档中

这个 [a whilestatement] 重复测试表达式,如果为真,则执行第一个套件;如果表达式为假(可能是第一次测试)else,则执行子句套件(如果存在)并终止循环。

所以在第一种情况下,必须是 while 条件永远不会评估为假,而在第二种情况下它最终会。请注意,显式跳出循环不会执行 else 子句。

于 2012-11-03T18:29:32.990 回答
0

else, 当与 一起使用时,如果 while 循环因表达式为假而结束,而不是被语句中断(或执行通过 a或-ing 异常离开函数)while,则在 while 表达式计算为假值之后运行。您在第二个示例中的 while 条件必须失败,因此没有机会发生 a、返回函数或抛出异常,因此语句将始终运行。breakreturnraisebreakelse

一段时间的文档

于 2012-11-03T18:30:31.287 回答