0

我被要求编写一个函数generate_palindrome(),它采用给定的正整数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代码,但也许我是错的人。你怎么看?

4

3 回答 3

1

我认为您应该在while循环中添加一个损坏的功能,以便在达到特定条件时它会中断。而且我认为最后一个 return 语句的缩进是错误的。:)

于 2020-10-23T21:00:01.247 回答
0

干得好:

#!/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 
于 2020-10-23T21:05:00.013 回答
0

这是最好的解决方案:

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()
于 2020-10-23T22:05:30.817 回答