Почему я получаю правильные выходные данные для палиндромов, но не для обычных чисел? - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь проверить, является ли число палиндромом или нет.Для этого я считаю, сколько раз k-й элемент равен (nk) -ому элементу.Если это число равно длине строки, то это палиндром.Я получаю правильный вывод для палиндромов, но абсолютно не вывод (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 голосов
/ 21 октября 2018

Вам следует прислушаться к советам из других ответов о том, как правильно решить эту проблему.

Однако никто не ответил на реальный вопрос, который вы задали: Почему я получаю правильный вывод для палиндромов, но нетвывод для обычных чисел?

Взгляните на этот цикл 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!

0 голосов
/ 21 октября 2018

Может быть, вы можете попробовать что-то более лаконичное.Как насчет этого:

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

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

print(is_palindrome(n))
0 голосов
/ 21 октября 2018

Мой совет для вас - сначала пройтись по основам 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')
0 голосов
/ 21 октября 2018

Не используйте такую ​​сложную логику.Используйте простой 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
...