Определить является ли слово палиндромом. Функция и цикл. 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 шт):
как вариант логики: в цикле перебираете буквы слова до середины длины (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")
Я думаю авторы задания подразумевали немного другое. Попытаюсь представить своё виденье "верного" решения
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') #выводим результат
Предлагаю просто перевернуть строку
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, '- не палиндром.')