我无法弄清楚为什么以下陈述不起作用。
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'之后的语句不会执行。知道为什么可能导致奇怪的行为吗?已排除完整代码,因为它将贯穿整个页面。
答案 0 :(得分:1)
它是Python语法的一部分。来自the documentation:
这个[a
while
语句]重复测试表达式,如果是,则执行第一个套件;如果表达式为false(可能是第一次测试),则else
子句的套件(如果存在)将被执行并且循环终止。
所以在第一种情况下,必须是while条件从不评估为false,而在第二种情况下它最终会评估为false。请注意,明确地断开循环将不执行else子句。
答案 1 :(得分:0)
else
与while
一起使用时,如果while循环以表达式为假,则表达式计算为假值,而不是被{{1语句(或执行通过break
或return
离开函数 - 例外)。第二个示例中的while条件必须失败,因此没有机会发生raise
,返回函数或抛出异常,因此break
语句将始终运行。