Python技术问题:无法彻底跳出while循环,求非函数解法
问题描述
用户提供的代码片段:
while True: result = random.randint(1, 100) for i in range(len(my_names)): my_name = my_names[i] my_rd = my_round(my_name, mys_hands[i], result) if my_rd == False: break else: for i in range(len(my_names)): if not mys_hands[i]: print("OK!") break
用户问题:
我无法在不修改程序其他代码的情况下彻底跳出这个while循环(当前程序只会回到while循环顶部重新执行)。我知道原因是最后一个break仅能跳出内层for循环,而非while循环。我尝试调整该break的缩进位置,但会导致程序出错;也参考相关教程尝试使用continue和break,但程序运行逻辑改变,仍无法解决问题。请问不使用函数的前提下,如何跳出这个while循环?感谢!
解决方案
不使用函数的话,最直接的解决方式是用标志变量控制while循环的退出,同时修正内层循环的变量覆盖问题(原代码内外层for循环都用i,会导致逻辑混乱),具体实现如下:
方法一:标志变量控制退出
exit_while = False while True: if exit_while: break result = random.randint(1, 100) for i in range(len(my_names)): my_name = my_names[i] my_rd = my_round(my_name, mys_hands[i], result) if my_rd == False: break # 检查所有mys_hands是否为空 all_empty = True for j in range(len(my_names)): if mys_hands[j]: all_empty = False break if all_empty: print("OK!") exit_while = True break
- 定义
exit_while作为退出标志,初始为False - 当检测到所有
mys_hands为空时,将标志设为True,跳出外层for循环后,while循环会检测到标志并退出 - 把内层循环变量改成
j,避免和外层的i冲突,防止逻辑出错
方法二:用all()简化判断逻辑
可以用Python内置的all()函数简化“检查所有元素是否为空”的逻辑,代码更简洁:
while True: result = random.randint(1, 100) need_exit = False for i in range(len(my_names)): my_name = my_names[i] my_rd = my_round(my_name, mys_hands[i], result) if my_rd == False: break # 一行判断所有mys_hands是否为空 if all(not hand for hand in mys_hands): print("OK!") need_exit = True break if need_exit: break
all(not hand for hand in mys_hands)会遍历mys_hands的所有元素,只有当全部为空时才返回True- 触发条件后设置
need_exit为True,直接跳出外层for循环,再break掉while循环
内容的提问来源于stack exchange,提问作者xXSnowieXx
相关产品推荐
相关产品推荐

