【问题标题】:Function to generate a palindrome生成回文的函数
【发布时间】:2020-10-24 15:09:13
【问题描述】:

我有以下问题,我似乎无法正确解决。 我必须编写一个函数,将正整数 n 作为输入并检查它是否是回文(一个前后相同的数字)。如果是,我必须返回这个号码。如果不是,我必须计算原始数字与反转数字的总和。重复此步骤,直到结果为回文。这是我到目前为止的代码:

x = input("Enter a positive integer: ")

def generate_palindrome(n):
    if n == n[::-1]:
        return n
    else:
        while n != n[::-1]:
            r = n[::-1]
            int(n) += int(r)
    return n

generate_palindrome(x)

当然这会返回一个错误,因为int(n) += int(r) 是不可能的。但是,当不使用int时,它会将其添加为字符串,这也是不正确的。

我不确定我离解决方案还有多远。我怎样才能正确地实现它?

【问题讨论】:

    标签: python function palindrome


    【解决方案1】:

    你很接近。你只需要另一个变量作为你的字符串的整数版本。然后清楚哪个包含一个字符串,哪个包含一个整数:

    def generate_palindrome(n):
        if n == n[::-1]:
            return n
        else:
            while n != n[::-1]:   # n needs to be a string for this to work
                r = int(n[::-1])  # r and s need to be numbers for correct addition
                s = int(n)
                n = str(r + s)    # n needs to still be a string for the next loop iteration
        return n
    
    generate_palindrome("989")
    # '989'
    
    generate_palindrome("98")
    # '8813200023188'
    

    FWIW,我不知道this is always guaranteed to return a reasonably sized number for every input。比如我放弃了generate_palindrome("5798")

    【讨论】:

    • 目前,没有经过验证的 base-10 Lychrel Numbers(尽管有很多可能的候选者)。严格来说,5798 不是真正的候选者,因为它的迭代序列[5798, 14773, 52514, ...] 与最低的真正候选者(即[196, 887, 1675, 7436, 13783, 52514, ...])收敛。几年前,196 在没有找到回文的情况下被迭代到十亿位。
    • 有趣,谢谢@ekhumoro。 5798 只是我的一个不幸的猜测。似乎我是一个很好的伙伴,因为我不知道这是否总是会产生回文。
    • 非常感谢您的回答!现在我知道了解决方案,它看起来很简单,但我可能永远不会想出它。
    猜你喜欢
    • 2022-08-16
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2013-04-29
    • 1970-01-01
    相关资源
    最近更新 更多