Проблема кодирования палиндрома - PullRequest
0 голосов
/ 18 июня 2019

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

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

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

i = str(input())

for item in i:
  print(item)

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

Ответы [ 3 ]

1 голос
/ 18 июня 2019

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

word="TOT"
i=word[::-1]
if i==word:
    print("palandrom")
1 голос
/ 18 июня 2019

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

i = input()

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

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

0 голосов
/ 18 июня 2019

Хотя 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)
...