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

408 просмотра
0
0 Комментариев

У меня есть файлик palindromes.txt с исходными данными, нужно проверить является ли строки в нем палиндромами

def remove_signs(s):
    s = s.lower()
    signs = "?!. \'\"`,:;-_/()[]~"
    s_without_signs = ""
    for letter in s:
        if letter not in signs:
            s_without_signs += letter
    return s_without_signs
 
 
with open('palindromes.txt', 'r')as f:
    for line in f:
        text = remove_signs(line)
        if text == text[::-1]:
            print('Y', ' ')
        else:
            print('N', ' ')

Все время выдает N


Добавить комментарий

3 Answers

Python Опубликовано 16.12.2018
0

Всё практически правильно. Дело в том, что вместе с нужными строками, из файла вы читаете и символ конца строки \n. Это можно заметить, если преобразовать в list считанную строку. Всё, что Вам нужно — убрать и этот символ из строки, добавив его в signs.

signs = "?!. \'\"`,:;-_/()[]~\n"

Добавить комментарий
0

вариант с генератором списков и pythonic-функцией reversed

def def_palindrom(phrase):
    phrase_1 = [x.lower() for x in phrase if x.isalpha()]
    phrase_2 = list(reversed(phrase_1))
    if phrase_1 == phrase_2:
        print(phrase, '- ПАЛИНДРОМ')
    else:
        print(phrase, ' - НЕ ПАЛИНДРОМ')

Добавить комментарий
0

нужно использовать string.punctuation и strip

import string
 
unwanted_char = string.punctuation + '\n'
with open('palindromes.txt', 'r') as f:
    for line in f:
        stripped_line = line.strip(unwanted_char).lower()
        if stripped_line == stripped_line[::-1]
            print('Y', ' ')
        else:
            print('N', ' ')


Пример:

>>> import string
>>> unwanted_char = string.punctuation + '\n'
>>> unwanted_char
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~\n'
>>> line = "Пап[],.{}\@#$\n"
>>> stripped_line = line.strip(unwanted_char).lower()
>>> stripped_line == stripped_line[::-1]
True


Если символы пунктуации будут где-то в середине лучшее исползовать регулярные выражения.

>>> import re
>>> line = "&%$#   Пап[],.{}\@#$\n"
>>> re.sub(r'\W+', '', line)
'Пап'
>>> s = re.sub(r'\W+', '', line).lower()
>>> s == s[::-1]
True

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up