Проблема с кодировкой палиндрома

Написание программы:

  1. Входная строка от пользователя
  2. распечатать, является ли эта строка палиндромом или нет

Кроме того, я нашел несколько других кодов в Интернете, но хочу работать только с этим кодом. Пожалуйста, сообщите мне об ошибке.

i = str(input())

for item in i:
  print(item)

  if int(i[item]) == int(i[-item]):
    print('yes')
  else:
    print('no')

Привет! Пожалуйста, отформатируйте проблему и сделайте ее не домашним заданием. Спасибо!

MilkyWay90 18.06.2019 21:53

Здесь ожидается, что вы сообщите нам об ошибке.

Klaus D. 18.06.2019 21:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
62
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте фрагмент строки (i[::-1] перевернет строку):

i = input()

if i == i[::-1]:
    print("Yes")
else:
    print("No")

Это примет ввод от пользователя и сравнит его с тем же вводом в обратном порядке.

Привет! Пожалуйста, сделайте ваш код синтаксически корректным и объясните, что делает ваш код. Спасибо!

MilkyWay90 18.06.2019 21:54

попробуй это:

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)

Большое спасибо! Отличное объяснение!

user3804640 19.06.2019 00:29

Пожалуйста! Пожалуйста, рассмотрите возможность выбора моего ответа в качестве окончательного «выбранного» ответа на ваш вопрос.

Bill M. 19.06.2019 23:00

Другие вопросы по теме