【问题标题】: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()。整数没有“长度”,只有字符串和序列有长度。

标签: python string list main function


【解决方案1】:
def revers(num):
    rev = 0
    while num > 0:
        rem = num % 10
        rev = (rev * 10) + rem
        num = num // 10
    return rev  

【讨论】:

    【解决方案2】:

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

    1. 将整数转换为字符串。
    2. 使用 reverse 函数将字符串反转并加入。
    3. 使用 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))
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-11-05
                      • 2023-03-12
                      • 2022-12-30
                      • 2014-01-04
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-09-29
                      相关资源
                      最近更新 更多