为什么回文输出正确,常规数字输出没有?



我正在尝试检查一个数字是否是回文。为此,我计算第 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

不要使用如此复杂的逻辑。使用简单的 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

也许你可以尝试一些更简洁的东西。这个怎么样:

def is_palindrome(n):
return str(n) == str(n)[::-1]
n = int(raw_input("Enter a number: "))
print(is_palindrome(n))

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

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

看看这个while循环:

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

如果L不是回文,则 if 句子中的条件计算结果为 false,并且k永远不会递增。因此,k保持为零,while 循环中的条件始终为真。

你有一个无限的while循环!

我给你的建议是先了解一下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')

最新更新