如何使用条件判断终止Python的while True循环及代码问题排查
问题根因
你代码里有两个核心错误导致循环无法正常终止:
- 条件判断逻辑运算符使用错误
你写的if hex_num != "Stop" or hex_num != "stop"是永真条件:
无论输入什么内容,
不等于Stop和不等于stop两个条件总有一个成立,比如输入Stop时,不等于stop为真,输入stop时不等于Stop为真,所以永远不会进入else分支执行终止逻辑。
正确的逻辑应该用and连接两个判断,或者更简洁的统一转小写/大写判断:if hex_num.lower() != "stop"
- 不必要的递归调用导致循环嵌套
你在处理完合法/非法输入的分支里,都又调用了hex_to_words(),相当于每次处理一次输入就新开一层函数嵌套,每层函数都有自己的while True循环。就算后面触发了break,也只会终止当前最内层函数的循环,外层所有嵌套的函数循环还会继续运行,自然无法完全退出。你已经用了while True做循环,完全不需要额外递归调用函数。
另外代码里的allowed_characters、letArray两个变量没有提前定义,直接运行会抛出名称错误,需要补充定义。同时原代码没有做输入合法性校验,用户输入非十六进制内容时会直接崩溃,建议补充异常捕获逻辑。
修正后代码
# 提前补充缺失的变量定义,可根据需求调整允许的字符范围 allowed_characters = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') letArray = [] def hex_to_words(): while True: hex_num = input("Enter a Hex Number Watney: ") print(hex_num) # 优先判断终止条件,简化逻辑 if hex_num.lower() == "stop": print("Program shutting down...") break # 处理普通输入逻辑 if len(hex_num) <= 2: try: # 捕获非十六进制输入的异常 letter = chr(int(hex_num,16)) except ValueError: print("error: invalid hex number") continue print(letter) if any(x not in allowed_characters for x in letter): print("error: invalid number") else: letArray.append(letter) print(letArray) else: print("Keep the number to two digits Watney!") hex_to_words()
内容的提问来源于stack exchange,提问作者2009 Honda Civic
相关产品推荐
相关产品推荐

