web-dev-qa-db-fra.com

En utilisant Python, inversez un entier et dites si palindrome

En utilisant Python, inversez un entier et déterminez s'il s'agit d'un palindrome. Voici ma définition de l'inverse et du palindrome. Ai-je une logique correcte?

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

J'ai du mal à écrire def main.

14
YXH
def palindrome(num):
    return str(num) == str(num)[::-1]
48
Peter Hull

Les nombres entiers n'ont pas len ().

Tester si un nombre est un palindrome est aussi simple que tester si le nombre est égal à son inverse (bien que si vous voulez une efficacité maximale, vous pouvez simplement comparer les caractères des deux extrémités de la chaîne jusqu'à ce que vous atteigniez le milieu).

Pour trouver l'inverse d'un entier, vous pouvez soit le faire à la dure (en utilisant mod% et division entière // pour trouver chaque chiffre et construire le nombre inverse):

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

Ou la manière la plus simple (transformer le nombre en une chaîne, utiliser la notation par tranche pour inverser la chaîne et la retourner en entier):

def reverse(num):
  return int(str(num)[::-1])
16
pedrosorio
def revers(num): 
  rev = 0    
  while(num > 0):    
      rem = num %10    
      rev = (rev *10) + rem    
      num = num //10    

  return num
1
rashedcs

Long mais lisible:

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
1
elon007

Il s'agit d'une implémentation récursive d'une ligne illisible basée en partie sur le réponse de 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)

Cela fonctionne pour l'entier i ≥ 0.

Notez que reverse(123) == reverse(1230) == 321. Ce n'est pas un problème, étant donné que tout entier non nul qui se termine par 0 ne peut pas être un palindrome de toute façon.

Notez également que l'inversion complète de l'entier peut bien sûr ne pas être nécessaire pour déterminer s'il s'agit d'un palindrome. L'inversion peut être mise en œuvre de manière à être interrompue tôt s'il est déterminé que le nombre n'est pas un palindrome.

1
Acumenus

Ce code convertit int en chaîne et vérifie ensuite si la chaîne est pallindrome. L'avantage est qu'il est rapide, l'inconvénient étant qu'il se convertit en String en compromettant ainsi la solution parfaite à remettre en question.

Il gère negative int ainsi que.

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
0
casillas

J'ai utilisé une liste pour ce programme, fonctionne aussi avec des chaînes.

print('Enter Something')
a = list(input())
for i in range ((len(a)),0,-1):
   print (a[i-1],end='')
0
Ryan
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 ":("
0
Devzzone
t=int(input("enter nos of test cases= "))
while t>0:
    n=int(input("enter number="))
    rev=0
    while n>0:
        digit=n%10
        rev=rev*10+digit
        n=n//10
    print(rev)
    t-=1
0
Shehreen Khan