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

Python数字转字符串迭代替换问题:无法得到预期最终结果

Python数字转字符串迭代替换问题:无法得到预期最终结果

我来帮你分析下问题所在,你的代码逻辑在迭代替换部分出现了几个关键错误,导致无法得到最终的'four'结果,咱们一步步拆解问题并修正:

原代码的核心问题

  • 循环条件完全错误:你写的while len(empty) not in arr.values(),这里arr.values()是像'zero'、'one'这类字符串,而len(empty)是数字,数字永远不可能出现在字符串集合里,这个循环要么直接不执行,要么陷入无限循环。正确的循环条件应该是当前字符串不等于它长度对应的英文单词。
  • 迭代逻辑没有更新核心变量:你在循环里用了modi但从来没更新empty的值,而且还错误地用了固定的k=0,完全没用到当前字符串的长度,导致迭代没有任何进展。
  • 初始迭代的启动问题:第一次转换后的empty需要作为迭代的起始值,然后不断用它的长度去获取对应的单词,直到满足终止条件。

修正后的完整代码

class Solution(object):
    def numbers_of_letters(self, n):
        # 数字到英文单词的映射
        num_map = {0:'zero',1:'one',2:'two',3:'three',4:'four',
                   5:'five',6:'six',7:'seven',8:'eight',9:'nine'}
        
        # 第一步:把输入数字的每一位转换成英文单词并拼接
        digits = list(map(int, str(n)))
        current_str = ''.join([num_map[d] for d in digits])
        
        # 第二步:迭代替换,直到字符串等于其长度对应的单词
        while True:
            # 获取当前字符串的长度对应的英文单词
            length_word = num_map[len(current_str)]
            # 如果当前字符串和长度单词一致,终止循环
            if current_str == length_word:
                break
            # 否则更新当前字符串为长度对应的单词
            current_str = length_word
        
        return current_str

if __name__ == "__main__":
    n=60
    print(Solution().numbers_of_letters(n))  # 输出:four

代码逻辑解释

  1. 初始转换:把输入数字拆成单个数字,遍历每个数字从映射表中取出对应的单词,用join拼接成初始字符串(比如60→'sixzero')。
  2. 迭代替换循环:
    • 每次获取当前字符串的长度,从映射表中拿到对应的英文单词。
    • 检查当前字符串是否和这个长度单词相等,相等就停止循环(比如'four'的长度是4,对应的单词也是'four',满足终止条件)。
    • 如果不相等,就把当前字符串更新为这个长度单词,继续循环。

这样运行代码后,输入60就会得到预期的'four'结果啦~

备注:内容来源于stack exchange,提问作者user20502753

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:58:11