Хотя for item in i:
проходит через все символы в строке, с вашей строкой кода if int(i[item]) == int(i[-item]):
есть несколько проблем.Прежде всего, item
будет символом из вашей строки.Поэтому, если пользователь вводит «привет», i[item]
сначала ищет i['h']
.Поскольку 'h' является символом, а не числом, это заставляет Python думать, что i
является словарем, а не строкой, и, таким образом, говорит Python искать словарь с именем i
и возвращать значение, где ключ h
.Это не сработает, поскольку i
является вашей исходной строкой, а не словарем.
Похоже, что вы хотели здесь сделать, сравнить i[0]
(первый символ в строке) с i[-1]
(последний символ в строке), затем от i[1]
до i[-2]
и так далее.Но даже если вы перебрали номера позиций, i[-item]
математически не даст вам того, что вы хотите.
Еще одна проблема заключается в том, что вы проверяете каждый символ по одному и возвращаете «да»или "нет".Однако в конечном итоге вы хотите получить один простой ответ: является ли ваша строка палиндромом или нет.
Кроме того, нет необходимости помещать str()
вокруг input()
, поскольку input
в любом случае возвращает строку, даже если пользователь вводит только цифры.Кстати, даже если вы используете i
в качестве строковой переменной, обычное соглашение в программировании состоит в том, чтобы использовать i
для обозначения некоторого типа целого числа, например, того, которое вы повторяете в цикле for
,Но пока все нормально.
Как показали некоторые другие ответы, i[::-1]
- это быстрый способ вернуть обратную строку.Так что, если вы в порядке, увидев вывод, верните True
, если строка является палиндромом, и False
, если это не так, то вот чрезвычайно простой способ сделать это:
i = input()
print(i == i[::-1])
Еслистрока i
идентична обращенной к себе, тогда i == i[::-1]
возвращает True
.Если нет, возвращается False
.Затем оператор print
печатает, какой бы ответ ни был.
Однако, если вы действительно хотите проделать длинный путь, проверяя символ за символом в цикле, то вот один из способов сделать это.Вы можете создать функцию, которая принимает строку и выполняет всю работу:
def is_palindrome(mystring):
# The "//2" here divides by 2 and ignores the remainder. So if
# there are an even number of letters, we'll test each pair. If
# It's an odd number, then we don't care about the middle character
# anyway. Compare [0] to [-1], then [1] to [-2], [2] to [-3], and so on.
for position in range(0, len(mystring)//2):
# If we've found a mismatched pair of letters, then we can
# stop looking; we know it's not a palindrome.
if mystring[position] != mystring[(-1 * position) - 1]:
print("This is NOT a palindrome")
return # This breaks you out of the entire function.
# If we've gotten this far, then the word must be a palindrome.
print("This is a palindrome")
# Here's where we run the command to input the string, and run the function
mystring = input("Enter your string: ")
is_palindrome(mystring)