使用 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,反转一个整数,并判断是不是回文的主要内容,如果未能解决你的问题,请参考以下文章