Используя Python, переверните целое число и скажите, если палиндром

используя Python, переверните целое число и определите, является ли оно палиндромом. Вот мое определение реверса и палиндрома. Есть ли у меня правильная логика?

def reverse(num):
    s=len(num)
    newnum=[None]*length
    for i in num:
        s=s-1
        newnum[s]=i
        return newnum

def palindrome(num):
    a=str(num)
    l=len(z)/2
    if a[:1]==a[-1:][::-1]:
        b=True
    else:
        b=False

у меня возникли некоторые проблемы писать def main.

10 ответов


def palindrome(num):
    return str(num) == str(num)[::-1]

целые числа не имеют len ().

тестирование, если число является палиндромом, так же просто, как тестирование, если число равно его обратному (хотя, если вы хотите максимальную эффективность, вы можете просто сравнить символы с обоих концов строки, пока не достигнете середины).

чтобы найти обратное целое число, вы можете сделать это сложным способом (используя mod % и integer division //, чтобы найти каждую цифру и построить обратное число):

def reverse(num):
  rev = 0
  while num > 0:
    rev = (10*rev) + num%10
    num //= 10
  return rev

или простой способ (превращение числа в строку, используя нотацию среза, чтобы изменить строку и превратить ее обратно в целое число):

def reverse(num):
  return int(str(num)[::-1])

это нечитаемая однострочная рекурсивная реализация, основанная частично на ответ pedrosorio.

def reverse(i):
    return int(i!=0) and ((i%10)*(10**int(math.log(i,10))) + reverse(i//10))

def is_palindrome(i):
    return i == reverse(i)

он работает для integer i ≥ 0.

отметим, что reverse(123) == reverse(1230) == 321. Это не проблема, учитывая, что любое ненулевое целое число, заканчивающееся на 0, все равно не может быть палиндромом.

обратите внимание также, что полное обращение целого числа может, конечно, не быть необходимым для определения, является ли это палиндром. Разворот может быть осуществлен таким образом, чтобы: прервано рано, если определено, что число не является палиндромом.


длинный, но читаемый:

def palindrome(x):
    a=""
    x=str(x)
    for i in range(len(x),0,-1):
        a+=x[i-1]
        print a
    if a==x:
        return True
    else:
        return False

def revers(num): 
  rev = 0    
  while(num > 0):    
      rem = num %10    
      rev = (rev *10) + rem    
      num = num //10    

  return num

я использовал список для этой программы, также работает со строками.

print('Enter Something')
a = list(input())
for i in range ((len(a)),0,-1):
   print (a[i-1],end='')

import math

a = raw_input("Enter number:")
n = -1

reverse = 0    
for i in a:
        n += 1
        digit = math.pow(10,n)
        reverse = int(i)*digit + reverse

print int(reverse)  

if int(reverse) == int(a):
        print "Palindrome"
else:
        print ":("

этот код преобразует int в String, а затем проверяет, является ли строка pallindrome. Преимущество заключается в том, что он быстрый, недостатком является то, что он преобразует int в строку, тем самым компрометируя идеальное решение вопроса.

обработки negative int Как хорошо.

class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        s = str(x)
        if x >=0 :
            if s == s[::-1]:
                return True
            else:
                return False
        else:
            return False

Я пытаюсь сам с этим разобраться.

def number():

    n = int(input("Enter a number: "))
    return n

def reverse(n):


    total = ""
    while n > 0:
        a = n % 10

        n//= 10


        total+= str(a)

    return total


def palindrome (n):

    total = 0
    while n > 0:
        a = n % 10

        n//= 10


        total+= a

    if total == n:
        x = "This number has a palindrome"

    else:
        x = ""

    return x

n = number()
print (reverse(n))
print (palindrome(n))

original = raw_input("Enter a no = ")   #original = number entered by user
rev = original[::-1]     #rev = reverse of original by useing scope resolution 
print 'rev of original no =',rev
if original == rev:
    print "no's are equal"
else:
    print "no's are not equal"