@LevG0r

Как сделать правильную проверку на палиндром?

Здравствуйте, недавно начал изучать python по крижке и наткнулся на задние. Нужно сдлать проверку слова на полиндром, но так, чтобы не учитывались регистр, знаки препинания и пробелы. Программа ниже не работает. Скажите пожалуйста как почему и помогите с решением. Заранее спасибо.
def correction(text):
	for item in text:
		if item == ' ':
			del item
	text = text.lower()

def reverse(text):
	return text[::-1]
	
def is_palindrome(text):
	correction(text)
	if text == reverse(text):
		print("Слово является полиндромом")
	else:
		print("Слово не полиндром")

something = input("Введите текст: ")
is_palindrome(something)
  • Вопрос задан
  • 1465 просмотров
Решения вопроса 2
adugin
@adugin Куратор тега Python
# phrase = input('Введите фразу: ')
phrase = 'А роза упала на лапу Азора'
phrase = list(filter(str.isalpha, phrase.casefold()))
if phrase == phrase[::-1]:
    print('Палиндром')
else:
    print('Не палиндром')

А проблема у вас прежде всего здесь:
for item in text:
  if item == ' ':
    del item

1) Нельзя удалять что-то из набора, по которому итерируетесь;
2) Строка является неизменяемым объектом;
3) В вашем исполнении это в принципе не работает.
Ответ написан
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Та другого способа вроде как и нет. Ну только если сократить всё это как-то так:

# Проверка каждого слова из предложения на палиндром
def palindrome_sentence(text):
    for word in ["".join(filter(str.isalpha, w)) for w in text.split(" ")]:
        print("palindrome") if word.lower() == word.lower()[::-1] else print("not palindrome")


# Объединение строки в одно слово и его проверка
def palindrome_word(text):
    word = "".join(["".join(filter(str.isalpha, w)) for w in text])
    print("palindrome") if word.lower() == word.lower()[::-1] else print("not palindrome")


text = input("text: \n")
palindrome_word(text)

А то чет нагородили много лишнего.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы