使用 Python,反转一个整数,并判断是不是回文

Posted

技术标签:

【中文标题】使用 Python,反转一个整数,并判断是不是回文【英文标题】:Using Python, reverse an integer, and tell if palindrome使用 Python,反转一个整数,并判断是否回文 【发布时间】:2012-10-15 02:27:42 【问题描述】:

使用 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 时遇到了一些麻烦。

【问题讨论】:

您的代码有什么问题?不行吗? 我也完成了 def main 部分,但它说我的输入没有 len。 哪一部分?发布错误的回溯。 您将一个整数传递给reverse()。整数没有“长度”,只有字符串和序列有长度。 【参考方案1】:
def revers(num):
    rev = 0
    while num > 0:
        rem = num % 10
        rev = (rev * 10) + rem
        num = num // 10
    return rev  

【讨论】:

【参考方案2】:

反转一个整数并确定它是否是回文:

    将整数转换为字符串。 使用 reverse 函数将字符串反转并加入。 使用 if else 条件检查倒序号码是否 = 原始号码。

见代码:

number = 1221

reverse = ''.join(reversed(str(number)))

print(reverse)

if (int(reverse) == number):
    print("number is Palindrome")
else:
    print("number is not Palindrome")

【讨论】:

【参考方案3】:

这是我的解决方案。

z=input('input number')
if int(z) == int(str(z)[::-1]):
    print('The number is palindrome')
else:
    print('The number is not palindrome')

【讨论】:

【参考方案4】:
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

【讨论】:

【参考方案5】:

此代码将 int 转换为 String,然后检查字符串是否为 pallindrome。优点是速度快,缺点是将 int 转换为 String 从而影响问题的完美解决方案。

它也处理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

【讨论】:

【参考方案6】:

长但可读:

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

【讨论】:

【参考方案7】:

这是一种不可读的单行递归实现,部分基于answer by 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)

它适用于整数i ≥ 0

请注意reverse(123) == reverse(1230) == 321。这不是问题,考虑到任何以 0 结尾的非零整数都不能是回文。

还要注意,整数的完全反转当然可能不是确定它是否是回文所必需的。如果确定该数字不是回文,则可以实施反转以便提前中止。

【讨论】:

【参考方案8】:
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 ":("

【讨论】:

虽然此代码可能有助于解决问题,但提供有关 why 和/或 如何 回答问题的额外上下文将显着改善其长期长期价值。请edit你的答案添加一些解释。【参考方案9】:

整数没有 len()。

测试一个数字是否是回文就像测试数字是否等于它的倒数一样简单(尽管如果你想要最大的效率,你可以比较字符串两端的字符,直到你到达中间)。

要找到一个整数的倒数,你可以用困难的方法来做(使用 mod % 和整数除法 // 找到每个数字并构造倒数):

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])

【讨论】:

您的第一个方法值得 +1,但指出如果数字以 0 结尾我们不能反转数字可能会很有用。例如,1230 将是 321。但是,对于事物就像 Project Euler 可以要求您寻找素数回文一样,这种方法效果很好。 @Akavall 感谢您的评论,但我不确定您是否暗示反转以 0 结尾的数字的概念未定义(我认为 321 == 0321 是一个很好的定义数字 1230 的反面),或者如果我的方法无法处理这些数字。如果是后者,我相信可以。如果您指的是使用它来测试回文性,那么以 0 结尾的数字不能是回文(0 本身除外),并且根据我的定义,这样一个数字的倒数总是与原始数字不同,所以我们'那里也很酷,对吧? @pedrosorio,我想我要解决的问题是 reverse(1230) == reverse(123),因为两者都返回 321。但这是每个方法都会出现的问题。所以我指出的缺点不是很相关。 我写了一个recursive implementation,部分来自这个答案。 我喜欢这个,因为您可以使用reverse(num) == num 来获取“是回文吗?”的 T/F 布尔值。例外情况是整数以 0 结尾(或开头?),如 cmets 中所述。【参考方案10】:
def palindrome(num):
    return str(num) == str(num)[::-1]

【讨论】:

如果是负数怎么办? @KeonKim 我不认为负数可以被视为回文【参考方案11】:
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"

【讨论】:

【参考方案12】:

我为这个程序使用了一个列表,也适用于字符串。

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

【讨论】:

【参考方案13】:

我尝试自己解决这个问题。

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))

【讨论】:

以上是关于使用 Python,反转一个整数,并判断是不是回文的主要内容,如果未能解决你的问题,请参考以下文章

java语言判断一个数字是否为回文数字

回文数

python编程,回文数判断?

回文数字

判断一个int 型整数 是否为回文数

LeetCode--回文数(简单)