While循环还是If代码?被这个功能卡住了



我被要求编写一个函数generate_parindrome((,该函数接受给定的正整数n,并对其应用以下过程:

(i( 检查数字是否为回文。如果是,则返回,否则继续下一步。

(ii(将数字倒过来,计算原始数字与倒过来的数字之和。

(iii(从(i(开始重复(直到找到回文。(

我写了这个函数:

def generate_palindrome(n):
numbers = list(str(n))
for i in range(len(numbers)):
if numbers[i] == numbers[-i-1]:
return n
else:
while numbers[i] != numbers[-i-1]:
rev = list(reversed(numbers))
rev_num = int(''.join(rev))
n = n + rev_num
return n

我不知道是什么原因,当我尝试一个还不是回文的随机数时,代码没有响应,它仍然在运行,直到不确定的时间。我试着用if代码更改它,但它没有迭代我的函数,所以我认为我唯一的机会是用while代码,但也许我错了。你觉得怎么样?

我认为您应该在while循环中添加一个中断的功能,这样当达到特定条件时,它就会中断。我认为最后一个return语句的缩进是错误的。:(

开始:

#!/usr/bin/env python3
def generate_palindrome(num: int):
if str(num) == str(num)[::-1]:
return num
else:
while str(num) != str(num)[::-1]:
rev = int(str(num)[::-1])
num += rev
return num
if __name__ == '__main__':
print(generate_palindrome(212)) # prints 212
print(generate_palindrome(12)) # prints 33
print(generate_palindrome(43)) # prints 77 

这是最好的解决方案:

def  generate_palindrome(n):
while True:
number = list(str(n))
num = ''
if number[::-1] == number:
for i in number:
num = num + i
print(num)
break
print(a)
else:
for i in number:
num = num + i
n = int(num) + int(num[::-1])

generate_palindrome()

最新更新