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

求小于10000的数字回文数之和的Python代码问题排查

问题排查:小于10000的数字回文数求和错误

用户需要计算所有小于10000的数字回文数之和(回文数定义为正读反读一致的数,如10801),但编写的Python代码无论是否统计单数字回文数,得到的535041和534996都不符合预期,以下是错误排查和修正方案:

用户原代码

def is_numeric_palindrome(number):
    """

    :param number: an integer
    :return: true if number is a numeric palindrome
    """
    number_as_string = str(number)
    number_digit_length = len(number_as_string)

    for i in range(0, int(number_digit_length / 2)):
        # print(i)
        # print(f"number_as_string[i]={number_as_string[i]},"
        #       f" number_as_string[:i]={number_as_string[number_digit_length - i - 1]}")
        if not number_as_string[i] is number_as_string[number_digit_length - i - 1]:
            return False

    return True


def sum_numeric_palindromes(upper_limit):
    """

    :param upper_limit: maximum number
    :return: the sum of all numeric palindrome between 0 and upper_limit (upper_limit not included)
    """

    palindrome_sum = 0
    # upper limit not included
    for i in range(0, upper_limit - 1):
        if is_numeric_palindrome(i):
            palindrome_sum += i

    return palindrome_sum

错误点分析

  1. 字符比较方式错误:
    is用于比较对象的身份而非值,虽然短字符串可能因Python的缓存机制偶然生效,但这不是正确的数值比较方式,应替换为==。

  2. 遍历范围错误:
    题目要求统计小于10000的数,即包含0到9999所有数。range(0, upper_limit - 1)会导致最后一个数9999被漏掉(因为range是左闭右开),正确的范围应该是range(0, upper_limit)。

修正后的代码

def is_numeric_palindrome(number):
    """
    判断整数是否为数字回文数
    :param number: 待判断的整数
    :return: 是回文数返回True,否则返回False
    """
    number_as_string = str(number)
    length = len(number_as_string)
    for i in range(length // 2):
        if number_as_string[i] != number_as_string[length - i - 1]:
            return False
    return True


def sum_numeric_palindromes(upper_limit):
    """
    计算0到upper_limit(不包含)之间所有回文数的和
    :param upper_limit: 上限值
    :return: 回文数总和
    """
    palindrome_sum = 0
    for i in range(upper_limit):
        if is_numeric_palindrome(i):
            palindrome_sum += i
    return palindrome_sum

# 测试:计算小于10000的回文数之和
print(sum_numeric_palindromes(10000))  # 正确输出:535050

正确结果验证

所有小于10000的回文数总和为535050,拆分计算如下:

  • 单数字回文数(0-9):和为45
  • 两位数回文数(11,22,...,99):和为495
  • 三位数回文数:和为49500
  • 四位数回文数:和为495000
  • 总和:45+495+49500+495000=535050

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:22:17