Написание программы:
Кроме того, я нашел несколько других кодов в Интернете, но хочу работать только с этим кодом. Пожалуйста, сообщите мне об ошибке.
i = str(input())
for item in i:
print(item)
if int(i[item]) == int(i[-item]):
print('yes')
else:
print('no')
Здесь ожидается, что вы сообщите нам об ошибке.
Используйте фрагмент строки (i[::-1]
перевернет строку):
i = input()
if i == i[::-1]:
print("Yes")
else:
print("No")
Это примет ввод от пользователя и сравнит его с тем же вводом в обратном порядке.
Привет! Пожалуйста, сделайте ваш код синтаксически корректным и объясните, что делает ваш код. Спасибо!
попробуй это:
word = "TOT"
i=word[::-1]
if i==word:
print("palandrom")
Хотя 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)
Большое спасибо! Отличное объяснение!
Пожалуйста! Пожалуйста, рассмотрите возможность выбора моего ответа в качестве окончательного «выбранного» ответа на ваш вопрос.
Привет! Пожалуйста, отформатируйте проблему и сделайте ее не домашним заданием. Спасибо!