While 循环还是 If 代码?坚持这个功能

While loop or If code? Stuck with this function

我被要求编写一个函数 generate_palindrome() 接受给定的正整数 n 并应用以下过程:

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

(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()