0

次のステートメントが機能しない理由がわかりません。

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' の後のステートメントは実行されません。何が奇妙な動作を引き起こしているのか、何か考えはありますか? このページ全体で実行されるため、完全なコードは除外されています。

4

2 に答える 2

1

これは Python 文法の一部です。ドキュメントから:

この [whileステートメント] は式を繰り返しテストし、真の場合は最初のスイートを実行します。式が false の場合 (初めてテストされる場合があります)、else句のスイートが存在する場合は実行され、ループが終了します。

したがって、最初のケースでは while 条件が false に評価されることはありませんが、2 番目のケースでは最終的に false に評価されます。明示的にループを抜けても、else 句は実行されないことに注意してください。

于 2012-11-03T18:29:32.990 に答える
0

elseを とともに使用するとwhile、while 式が偽の値に評価された後に実行されます。式が false であることによって while ループが終了した場合は、ステートメントによって中断される (またはor -ing 例外breakを介して関数を終了する実行) のではありません。2 番目の例の while 条件は失敗する必要があるため、aが発生したり、関数が返されたり、例外がスローされたりする機会がないため、ステートメントは常に実行されます。returnraisebreakelse

しばらくの間のドキュメント

于 2012-11-03T18:30:31.287 に答える