You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用条件判断终止Python的while True循环及代码问题排查

问题根因

你代码里有两个核心错误导致循环无法正常终止:

  1. 条件判断逻辑运算符使用错误
    你写的if hex_num != "Stop" or hex_num != "stop"是永真条件:

无论输入什么内容,不等于Stop和不等于stop两个条件总有一个成立,比如输入Stop时,不等于stop为真,输入stop时不等于Stop为真,所以永远不会进入else分支执行终止逻辑。
正确的逻辑应该用and连接两个判断,或者更简洁的统一转小写/大写判断:if hex_num.lower() != "stop"

  1. 不必要的递归调用导致循环嵌套
    你在处理完合法/非法输入的分支里,都又调用了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:57:03