Python如何检测循环过程中变量是否曾被赋值为True
问题根源
你现有代码每次循环都会根据当前元素的值覆盖found的状态:只要当前元素不等于21,就会把found强制设为False。这就导致循环结束后found保存的只是最后一个元素的匹配结果,无法反馈整个遍历过程中是否出现过目标值21。
最小改动修复方案
核心逻辑是:一旦found被赋值为True(代表已经找到过目标值),后续循环就不要再把它改回False。如果要尽可能保留原有代码结构,只需要给else分支的赋值加一个判断条件即可,不需要大幅调整代码:
found = None print ('Before', found) for value in [ 41, 5, 77, 3, 21, 55, 6]: if value == 21: found = True elif found is not True: # 仅在之前从未找到过目标值时,才把found设为False found = False print (found, value) print ('After', found)
运行效果说明
- 遍历到21之前,
found会随着不匹配的元素持续被设为False - 遍历到21时,
found被设为True - 后续遍历55、6两个不匹配元素时,因为
found已经是True,不会再被覆盖回False - 最终
print('After', found)会正确输出True,反馈整个循环过程中确实存在目标值21
如果你不需要保留初始found = None的设定,还可以把代码写得更简洁,直接删掉else分支即可:
found = False print ('Before', found) for value in [ 41, 5, 77, 3, 21, 55, 6]: if value == 21: found = True print (found, value) print ('After', found)
内容的提问来源于stack exchange,提问作者FruitBoy
相关产品推荐
相关产品推荐

