数字回文的总和

问题描述 投票:0回答:3

我被困在一个问题测试中。 提示是:

回文是一个单词、数字、短语或其他字符序列 向后读和向前读一样,比如 madam、racecar 或 number 10801.

所有小于10,000的回文数之和是多少?

到目前为止我的代码是:

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

我已经尝试过,无论是否将单个数字计算为回文。

我得到 535041 或 534996,但两个选项都被拒绝了。

我做错了什么??

python palindrome
3个回答
0
投票

range

文档中,您可以看到最后一项被排除在外,因此 
upper_limit - 1
是一个错误,而且
is
是一个奇怪的运算符,它的行为与您预期的不同,请使用
==
代替大多数情况下,在您的情况下
!=
(不同于)是最佳选择。修复错误的两个可能来源后告诉我代码是否正确。


0
投票

试试这个,你的循环从 0 开始。

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(1, upper_limit):
        if is_numeric_palindrome(i):
            palindrome_sum += i

    return palindrome_sum

print(sum_numeric_palindromes(10000))

-1
投票

试试这个:

def is_palindrom(number):
    return str(number) == str(number)[::-1]

def sum_palindroms():
    sum = 0
    for i in range(10000):
        if is_palindrom(i):
            sum += i

    return sum

print(sum_palindroms())
© www.soinside.com 2019 - 2024. All rights reserved.