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

Python数字转英文单词代码无法输出十位和百位内容,该如何修复?

数字转英文单词代码修复方案

核心问题梳理

  • 基础字典错误:tens字典中40拼写错误,正确值为forty而非fourty;80值错误,正确值为eighty而非eight;hundred字典仅覆盖100、200两个值,无法支持300及以上的百位转换
  • 函数逻辑与参数脱节:函数定义接收problem参数,但内部逻辑全部调用全局变量digit,参数完全失效
  • 两位数逻辑缺陷:未处理个位为0的场景(如20、90),使用不必要的全局变量存储临时结果,若数值未匹配字典会出现变量未定义报错
  • 三位数逻辑完全失效:判断逻辑错误使用整数 == 字典.keys()的写法,该判断永远为假;未处理十位为0的场景(如101、205),循环逻辑无实际作用,仅做了无用的重复赋值

修复后代码

digit = input("Enter a number to convert to words: ")
# 校验输入为正整数
if not digit.isdigit():
    print("请输入有效的正整数")
    exit()
num = int(digit)
units = {
    1:"one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine",
    10:"ten", 11:"eleven", 12:"twelve", 13:"thirteen", 14:"fourteen", 15:"fifteen", 16:"sixteen",
    17:"seventeen", 18:"eighteen",19:"nineteen"
}
tens = {
    20:"twenty", 30:"thirty", 40:"forty", 50:"fifty", 60:"sixty", 70:"seventy",
    80:"eighty", 90:"ninety"
}
def number_to_words(n):
    # 处理0-19
    if n < 20:
        return units[n]
    # 处理20-99
    elif n < 100:
        ten_part = n // 10 * 10
        unit_part = n % 10
        if unit_part == 0:
            return tens[ten_part]
        else:
            return f"{tens[ten_part]}-{units[unit_part]}"
    # 处理100-999
    elif n < 1000:
        hundred_part = n // 100
        remainder = n % 100
        if remainder == 0:
            return f"{units[hundred_part]} hundred"
        else:
            return f"{units[hundred_part]} hundred and {number_to_words(remainder)}"
    else:
        return "暂不支持1000以上的数字转换"
print(number_to_words(num))

功能验证

输入对应数字即可得到正确结果:

  • 输入20 输出 twenty
  • 输入25 输出 twenty-five
  • 输入105 输出 one hundred and five
  • 输入123 输出 one hundred and twenty-three
  • 输入999 输出 nine hundred and ninety-nine

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:36:03