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