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

Python单词转数字程序Bug排查:输入特定短语输出错误值

英文单词转数字逻辑错误分析与修复

输入"three hundred fifty thousand four hundred twelve"时,程序输出35,000,412,与预期结果350412不符,问题核心在于大单位(thousand、million)的处理逻辑错误。

错误原因

原代码未区分hundred和高阶单位(thousand/million)的本质差异:

  • hundred是当前数值段内的乘数(比如three hundred是3×100),仅作用于当前累计的小数值;
  • thousand/million是量级分隔节点,需要将当前累计的数值作为整体乘以量级后加到最终结果,同时重置当前累计值,否则后续的低量级数值会被错误叠加到已放大的数值上。

原代码处理thousand后未重置current,导致后续的"four hundred twelve"被叠加到350000上,最终错误放大了100倍。

修复后的代码

word = input("What is the number  DON'T TYPE IN AND,-,_,or . ").lower().split()
wordnum = {
    "zero":0,
    "one":1,
    "two":2,
    "three":3,
    "four":4,
    "five":5,
    "six":6,
    "seven":7,
    "eight":8,
    "nine":9,
    "ten":10,
    "eleven":11,
    "twelve":12,
    "thirteen":13,
    "fourteen":14,
    "fifteen":15,
    "sixteen":16,
    "seventeen":17,
    "eighteen":18,
    "nineteen":19,
    "twenty":20,
    "thirty":30,
    "forty":40,
    "fifty":50,
    "sixty":60,
    "seventy":70,
    "eighty":80,
    "ninety":90,
    "hundred":100,
    "thousand":1000,
    "million":1000000
}

current = 0
final = 0

for number in word:
    if number not in wordnum:
        continue
    value = wordnum[number]
    
    if value < 100:
        current += value
    elif value == 100:
        current *= value
    else:
        # 处理thousand/million:将当前累计值乘量级后加入最终结果,重置current
        final += current * value
        current = 0

# 循环结束后,加入最后一段未遇到大单位的数值
final += current

formatted_result = f"{final:,}"
print(formatted_result)

关键修改说明

  1. 拆分单位处理逻辑:单独处理hundred和高阶单位,避免混淆量级计算;
  2. 遇到thousand/million时,将当前累计值乘量级后加入最终结果,并重置current,确保后续数值重新累计;
  3. 循环结束后补充加入最后一段未被大单位触发的数值(比如示例中的"four hundred twelve");
  4. 移除无用的mult变量,简化逻辑结构。

测试输入"three hundred fifty thousand four hundred twelve",最终输出350,412,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:02:34