自动更正回文的Python代码

2024-09-27 21:33:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我被赋予了一项任务,即编写一段代码,其中包含一个函数,该函数从用户处接收一个输入数字,如果它不是回文,它将查找最近的(较低的)回文数字,例如:

findprevpalindrom(100)到99

findprevpalindrom(99)到88

findprevpalindrom(11)到9

  • 我们假定输入为int且大于0,因此无需修复该部分
  • 单数是回文的
  • 我需要使用另一个函数来查找正确的数字

这就是我到目前为止所做的。这是不正确的,我很难理解接下来会发生什么: screenshot

提前感谢所有帮助者


Tags: 函数代码用户数字intscreenshot单数帮助者
2条回答
def findprevpalindrom(numb):
    s = str(numb - 1)
    l = len(s)
    if s[:l//2][::-1] > s[(l+1)//2:]:
        top = str(int(s[:(l+1)//2])-1)
    else:
        top = s[:(l+1)//2]
    if len(top) < l/2:
        return int(top + '9' + top[:l//2][::-1]) #tricky part
    else:
        return int(top + top[:l//2][::-1]) #the generic return

上述方法应能提供所需的输出

findprevpalindrom(100)->;九十九

findprevpalindrom(99)——>;88

findprevpalindrom(11)——>;九,

注意,你的例子是错误的。99和11都是回文,因此函数(根据具体情况)应该分别返回99和11

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


def findprevpalindrom(number: int):
    assert number > 0, "Cannot find non-positive palindrome!"
    if is_palindrome(number):
        return number
    else:
        return findprevpalindrom(number - 1)

这些断言传递时不会引发异常:

assert findprevpalindrom(100) == 99
assert findprevpalindrom(99) == 99
assert findprevpalindrom(98) == 88
assert findprevpalindrom(11) == 11
assert findprevpalindrom(10) == 9

相关问题 更多 >

    热门问题