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
相关产品推荐
相关产品推荐

