为什么我的回文集输出正确,而正则数却没有输出?

时间:2018-10-21 05:03:25

标签: python python-2.7 palindrome

我正在尝试检查数字是否是回文。为此,我计算第k个元素等于第(n-k)个元素的次数。如果该数字等于字符串的长度,则为回文。我确实获得了正确的回文输出,但是当数字不是回文时,绝对没有输出(k)。参考代码:

T = int(raw_input())
L = []
for i in range(0,T):
    alpha = int(raw_input())
    L.append(alpha)
print L

for i in range(0,len(L)):
    L[i] = str(L[i])
print L

for i in range(0,len(L)):
    k = 0
    while k < len(L[i]) :
        if L[i][k] == L[i][len(L[i])-(k)-1]:
            k = k + 1
    print k

4 个答案:

答案 0 :(得分:3)

不要使用这种复杂的逻辑。使用简单的pythonic [::-1]反转字符串。

In [1]: a = 1234554321

In [2]: def pal(a):
   ...:     if a == a[::-1]:
   ...:         return True
   ...:     else:
   ...:         return False
   ...:

In [3]: pal(str(a))
Out[3]: True

答案 1 :(得分:3)

也许您可以尝试一些更简洁的方法。怎么样:

def is_palindrome(n):
    return str(n) == str(n)[::-1]

n = int(raw_input("Enter a number: "))

print(is_palindrome(n))

答案 2 :(得分:1)

您应该听取其他答案中有关如何正确解决此问题的建议。

但是,没有人回答您提出的实际问题:为什么我的回文集输出正确,而常规数却没有输出?

看看这个while循环:

k = 0
while k < len(L[i]) :
    if L[i][k] == L[i][len(L[i])-(k)-1]:
        k = k + 1

如果L不是回文,则if语句中的条件为假,并且k永远不会增加。因此k保持为零,而while循环中的条件始终为真。

您有一个无限的while循环!

答案 3 :(得分:0)

我对您的建议是首先了解python的基础知识。此外,看看python3。它是如此容易。您的算法还不错,并且实现不正确。这是您想做的。 (在python3中)

L = input('Enter a word: ')        

print ('Your word is:', L)

# As per your algorithm
count = 0
size = len(L)

for i in enumerate(L):
#   since if the size is 7, then the last index will be 6(=  7-1)
    if L[i] == L[size -1 -i]:
            count += 1


if count == size:
    print(L, 'is palindrome')
else:
    print(L, 'is not palindrome')