# Python program to count and
# print all palindrome numbers in a list.
def palindromeNumbers(list_a):
c = 0
# loop till list is not empty
for i in list_a:
# Find reverse of current number
t = i
rev = 0
while t > 0:
rev = rev * 10 + t % 10
t = t / 10
# compare rev with the current number
if rev == i:
print (i),
c = c + 1
print
print ("Total palindrome nos. are" + str(c))
print
def main():
list_a = [10, 121, 133, 155, 141, 252]
palindromeNumbers(list_a)
list_b = [ 111, 220, 784, 565, 498, 787, 363]
palindromeNumbers(list_b)
if __name__ == "__main__":
main() # main function call
此代码,从 https://www.geeksforgeeks.org/all-palindrome-numbers-in-a-list/,是用Python 2编写的。
当我在Python 3.6中运行该程序时,两个列表的返回值均为0。
有人可以告诉我如何更改它以使其与Python 3兼容吗?
答案 0 :(得分:3)
Python2和Python3之间的重要变化之一是整数除法,即Python2返回截断的整数结果,而Python3返回浮点数。要进行实数整数除法,必须使用双斜杠"//"
。
总而言之,将行t = t/10
更改为t = t//10
。
答案 1 :(得分:1)
好吧,所以我使用另一种方法对代码进行了一些更改,以检查数字是否相同。我尝试不对您的代码进行过多更改...
函数reverse()
只是返回给它的字符串颠倒了...
如果我没记错的话,该函数通过str
函数在split
中列出一个列表,那么[::-1]
给出的列表则相反...
def reverse(str):
return str[::-1]
def palindromeNumbers(list_a):
c = 0
# loop till list is not empty
for i in list_a:
# Find reverse of current number
t = i
t = int(reverse((str(t))))
if t == i:
c += 1
print ("Total palindrome nos. are " + str(c))
def main():
list_a = [10, 121, 133, 155, 141, 252]
palindromeNumbers(list_a)
list_b = [ 111, 220, 784, 565, 498, 787, 363]
palindromeNumbers(list_b)
if __name__ == "__main__":
main() # main function call
尝试一下!希望对您有帮助...
答案 2 :(得分:0)
我首先将数字转换为可迭代的字符串str(i)。然后,我仅通过将数字t [a]的前半部分与数字t [〜a]的后半部分进行比较,然后使用all()来检查所有比较是否成立,从而缩短了for循环。 (使用Python 3.6.8)
for i in list_a:
# convert interger to iterable string
t = str(i)
# compare first half of the number to second half of the number
if all([t[a]==t[~a] for a in range(len(t)//2)]):
print (i),
c = c + 1