Проблема в кодировании с функцией в python: Base 2 & 10 integer palindrome - PullRequest
0 голосов
/ 02 апреля 2020

Возник вопрос, в котором предлагалось написать код для получения непрерывного целочисленного ввода от пользователя до тех пор, пока не будет введено отрицательное целое число, и для каждого ввода я должен оценить, является ли он палиндромом как в основаниях 10, так и в 2. Если да, выведите «Да», иначе выведите «Нет».

Например: 99 = (1100011) base2, обе версии имеют палиндром, поэтому он печатает «Да»

Это обычный элементарный метод.

while 1:
    num = int(input('Input: '))
    if num > 0:
        num1 = str(num)
        if num1 == num1[::-1]:
            list1 = list(bin(num))
            list1.pop(0)
            list1.pop(0)
            n = ''.join(list1)
            if n == n[::-1]:
                print('Yes')
            else:
                print('No')
        else:
            print('No')
    else:
        break

Но когда я попытался набрать код, используя определение новой функции, это не сработало. Вот следующий код. Можете ли вы заметить, что с этим не так.

def palindrome(n):
    n = str(n)
    if n == n[::-1]:
        return True
    else:
        return False


def b2_palindrome(n):
    list1 = list(bin(n))
    list1.pop(0)
    list1.pop(0)
    n = ''.join(list1)
    palindrome(n)


while 1:
    num = int(input('Input: '))
    if num > 0:
        if b2_palindrome(num) and palindrome(num):
            print('Yes')
        else:
            print('No')
    else:
        break

@ dspencer: отредактировал отступы

1 Ответ

0 голосов
/ 02 апреля 2020

Вы не возвращаете значение вызова palindrome в b2_palindrome

, см. Ниже:

def b2_palindrome(n):
    list1 = list(bin(n))
    list1.pop(0)
    list1.pop(0)
    n = ''.join(list1)
    return palindrome(n)  # <-- added return here
...