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

Python字典反转程序故障:输入数字串123出现输出错误

问题分析与修复

错误原因

问题核心是循环末尾无条件执行的letters_output.append(item)语句:

  • 输入字母时,字母分支未向letters_output添加内容,循环末尾添加当前字母,最终列表长度为3,符合判断条件;
  • 输入数字时,数字分支已将映射字母加入letters_output,循环末尾又追加数字字符本身,导致列表长度变为6(3个映射字母+3个数字字符),触发了Error: More than three letters found.错误。

另外注意:你需求示例中输入123应输出s,e,m,但当前major_system里1对应t、2对应n,后续可根据需求调整字典映射。

修复后的代码

# Major systems dictionaries
major_system = {
    0: "s, z",
    1: "t",
    2: "n",
    3: "m",
    4: "r",
    5: "l",
    6: "g j",
    7: "k",
    8: "f, th",
    9: "b",
}

major_system_2 = {
    0: "oo",
    1: "a",
    2: "e",
    3: "i",
    4: "o",
    5: "u",
    6: "A",
    7: "E",
    8: "I",
    9: "O",
}

major_system_3 = {
    0: "s, z",
    1: "t",
    2: "n",
    3: "m",
    4: "r",
    5: "l",
    6: "g j",
    7: "k",
    8: "f, th",
    9: "b",
}

# 生成反转字典
reversed_major_system_1 = {value.strip(): key for key, values in major_system.items() for value in values.split(", ")}
reversed_major_system_2 = {value: key for key, value in major_system_2.items()}
reversed_major_system_3 = {value.strip(): key for key, values in major_system_3.items() for value in values.split(", ")}

user_input = input("Please enter 3 numbers or letter without spaces ")

if len(user_input) == 3:
    numbers_output = []
    letters_output = []
    valid_input = True

    for item in user_input:
        if item.isdigit():  # 处理数字输入
            number = int(item)
            letter1 = major_system.get(number, "Invalid")
            letter2 = major_system_2.get(number, "Invalid")
            letter3 = major_system_3.get(number, "Invalid")
            
            if letter1 != "Invalid" and letter2 != "Invalid" and letter3 != "Invalid":
                numbers_output.append(item)
                # 添加映射的第一个字母到letters_output
                letters_output.append(letter1.split(", ")[0])
            else:
                valid_input = False

        elif item.isalpha():  # 处理字母输入
            number1 = reversed_major_system_1.get(item, "Invalid")
            number2 = reversed_major_system_2.get(item, "Invalid")
            number3 = reversed_major_system_3.get(item, "Invalid")
            if number1 != "Invalid":
                numbers_output.append(str(number1))
            elif number2 != "Invalid":
                numbers_output.append(str(number2))
            elif number3 != "Invalid":
                numbers_output.append(str(number3))
            else:
                valid_input = False
            # 字母输入时添加原字母到letters_output
            letters_output.append(item)

        else:
            valid_input = False

    if valid_input:
        print(f'Input {user_input}')
        if numbers_output:
            print(f'Numbers output: {", ".join(numbers_output)}')
        if len(letters_output) == 3:
            print(f'Letters output: {", ".join(letters_output)}')
        else:
            print("Error: More than three letters found.")
    else:
        print("Error: One or more inputs do not have a valid mapping.")
else:
    print("Error: please enter exactly 3 characters (numbers or letters) without spaces.")

修复说明

  1. 移除循环末尾的letters_output.append(item),改为在对应分支内添加内容:
    • 数字输入分支:添加字典映射的字母到letters_output;
    • 字母输入分支:添加原字母到letters_output,同时补充了无效字母输入的valid_input = False判断(原代码此处遗漏)。
  2. 现在输入123时,letters_output为['t', 'n', 'm'],长度为3,可正常输出;输入klm时保持原有正确输出。
  3. 若要实现输入123输出s,e,m,只需调整major_system的映射,比如将1: "t"改为1: "s",2: "n"改为2: "e"。

内容的提问来源于stack exchange,提问作者user27867303

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:07:33