Цикл while или код If? Застрял с этой функцией

Меня попросили написать функцию 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, но, возможно, я ошибаюсь. Что вы думаете?


person Dada    schedule 23.10.2020    source источник
comment
Как отлаживать небольшие программы. | Что такое отладчик и как он может помочь мне диагностировать проблемы? Просмотрите свой код и посмотрите, что он делает. Отладка является важным навыком для программиста, и чем раньше в вашей карьере программиста вы освоитесь с этим, тем лучше для вас будет.   -  person Pranav Hosangadi    schedule 23.10.2020


Ответы (3)


Ну вот:

#!/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 
person 777moneymaker    schedule 23.10.2020

Я думаю, что вы должны были добавить сломанную функциональность в свой цикл while, чтобы при достижении определенного условия он прерывался. И я думаю, что отступ последнего оператора возврата неверен. :)

person ahmetk5113    schedule 23.10.2020

Это лучшее решение:

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()
person Charles Floyd    schedule 23.10.2020