如何解决自动更正回文的 Python 代码
我在 python 中被分配了一个任务来编写一个代码,其中包含一个函数,该函数接收来自用户的输入数字,如果它不是回文 - 它会找到最近的(较低的)回文数字,例如:>
findprevpalindrom(100) 到 99
findprevpalindrom(99) 到 88
findprevpalindrom(11) 到 9
- 我们假设输入是 int 且大于 0,因此无需修复该部分。
- 单数是回文。
- 我需要使用另一个函数来查找正确的数字。
这是我迄今为止所做的。这是不正确的,我很难理解接下来会发生什么: screenshot
提前感谢所有帮助者!
解决方法
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) -> 99
findprevpalindrom(99) -> 88
findprevpalindrom(11) -> 9
,当心,你的例子是错误的。 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。