如何将此代码调整为python 3的回文数?

时间:2018-09-04 09:50:20

标签: python-3.x

# 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兼容吗?

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