Удаление начальных + конечных пробелов и символов новой строки из строки Python, .strip () не работает? - PullRequest
0 голосов
/ 16 января 2020

Я в настоящее время на втором курсе Python, и в нашем обзоре разминки я озадачен, казалось бы, простой проблемой. Вот как это указано:

В этом упражнении ваша функция получит 1 параметр - имя текстового файла. Функция вернет строку, созданную путем объединения пятого символа из каждой строки в одну строку. Если строка содержит менее 5 символов, то строка должна быть пропущена. Перед поиском пятого символа во всех строках должны быть удалены начальные и конечные пробелы.

CodeGrinder затем оценивает его на основе случайно сгенерированных файлов .txt. Вот код, который у меня сейчас есть:

def fifthchar(filename):
    file = open(filename)
    fifthstring = ''
    for x in file:
        x.strip('\n ')
        if len(x) >= 5:
            fifthstring += x[4]
        else:
            pass
    fifthstring.strip('\n ')
    return fifthstring

И возвращаемая ошибка:

AssertionError: False неверно: пятый char (rprlrhya.txt) вернул mylgcwdnbi

dmou. Он должен был вернуть mylgcwdnbidmou. Проверьте свою логику c и попробуйте снова.

Кажется, что через мои .strip() пробиваются новые строки, и я не уверен, как их удалить. Я думал, что .strip() удалит \n, и я попробовал все от .rstrip() до fifthstring.join(fifthstring.split()), чтобы иметь избыточность при удалении как пятой строки, так и x в l oop. Как проходят эти новые строки?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Это должно работать:

def fifthchar(filename):
    with open(filename) as fin :
        return ''.join( line.strip()[4] if len(line.strip()) > 4 else '' for line in fin.readlines() )
0 голосов
/ 16 января 2020

Ваше решение не принимает во внимание несколько вещей:

  1. пустые строки, где его пятый символ - символ '\ n'.
  2. пробелы в начале и в конце каждой строки должны быть удалены.
  3. strip () не изменяет x, вам нужно переназначить выделенную строку.

Вот ваше решение:

def fifthchar(filename):
    file = open(filename)
    fifthstring = ''
    for x in file:
        x = x.strip()
        if len(x) >= 5:
            fifthstring += x[4]
        else:
            pass
    fifthstring.strip('\n ')
    return fifthstring

Вот другое:

def fifth(filename):
    with open(filename) as f:
        string = '' 
        for line in f.readlines():
            l = line.strip()
            string += l[4] if len(l) >= 5 else ''
        return ''.join(string)

То же, что и до использования списка:

def fifth(filename):
    with open(filename) as f:
        string = [line.strip()[4] if len(line.strip()) >= 5 else '' for line in f.readlines()]
        return ''.join(string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...