Определить является ли слово палиндромом. Функция и цикл. Python

Нужно определить является ли слово палиндромом. Обязательно через функцию, и если я понял правильно внутри функции должен быть цикл. Вот пример как должен выглядеть результат:

Enter a word: python

not a palindrome

Enter a word: java

not a palindrome

Enter a palindrome: auto

not a palindrome

Enter a palindrome: madam

madam is palindrome!

Вот мой вариант кода:

s=input("enter a word: ")
reverse=s[::-1]
def palindrom(s):
    while True:
        if s[::1]==reverse:
            print(s,"is palindrome ")
            break
        if s!=reverse:
            print(s,"not a palindrome !")
            continue 
            
print(palindrom(s))   

Спасибо


Ответы (5 шт):

Автор решения: Tina Gordienko_Drog

как вариант логики: в цикле перебираете буквы слова до середины длины (i < length / 2), сравниваете букву word[i] и word[word.length - i - 1]. если на каком-либо этапе буквы не равны - возращаете false из функции. если цикл закончился - true

→ Ссылка
Автор решения: Александр Рассказчиков

Самый простой и красивый вариант:

def palindrome(s):
    return s[::-1] == s

while True:
    s = input("Enter a palindrome: ")
    print(f"{s} is palindrome!" if palindrome(s) else "not a palindrome")
→ Ссылка
Автор решения: zaborschicov

Я думаю авторы задания подразумевали немного другое. Попытаюсь представить своё виденье "верного" решения

def pcheck(word: str): #задаём тип данных входного параметра, так что бы можно было передать аргумент только в формате строки
    iters = len(word)//2 #получаем количество итераций, необходимых для проверки (надо обойти все буквы кроме центральной)
    for i in range(iters): #проходим слово в цикле
        if word[i] != word[-i - 1]: #проверяем на сходство зеркальную букву слова
            return False #возращаем False, тем самым сообщая что слово не является палиндромом (оператор return при этом завершает выполнение функции)
    return True #в данном случае мы дошли до конца функции и точно знаем, что все зеркальные буквы совпадают

Как вы видите, функция просто обходит слово с двух сторон, проверяя совпадения букв с правого и левого края. Также надо заметить, что функция чувствительна к регистру. Данную "оплошность" можно устранить, применив к строке функцию lower()(она переведёт всю строку в нижний регистр).

Теперь сделаем проверку на палиндром в цикле

while True:
    word = input('Enter a word: ') #получаем слово на ввод
    print(f'{word} is palindrome' if pcheck() else 'not a palindrome') #выводим результат

Итоговый код:

def pcheck(word: str): #задаём тип данных входного параметра, так что бы можно было передать аргумент только в формате строки
    iters = len(word)//2 #получаем количество итераций, необходимых для проверки (надо обойти все буквы кроме центральной)
    for i in range(iters): #проходим слово в цикле
        if word[i] != word[-i - 1]: #проверяем на сходство зеркальную букву слова
            return False #возращаем False, тем самым сообщая что слово не является палиндромом (оператор return при этом завершает выполнение функции)
    return True #в данном случае мы дошли до конца функции и точно знаем, что все зеркальные буквы совпадают

while True:
    word = input('Enter a word: ') #получаем слово на ввод
    print(f'{word} is palindrome' if pcheck() else 'not a palindrome') #выводим результат
→ Ссылка
Автор решения: Easton

Предлагаю просто перевернуть строку

string_to_check = input("Enter a string")

if string_to_check == string_to_check[::-1]:
    print("This is a palindrome")
else:
    print("This is not a palindrome")
→ Ссылка
Автор решения: Роман
def palindrome(x):
    comp = ''.join(reversed(str(x)))
    return str(x) == str(comp)


num = int(input('Введите число для проверки на палиндром:'))
if palindrome(num):
    print('Число ', num, '- палиндром.')
else:
    print('Число ', num, '- не палиндром.')
→ Ссылка