Скрипт возвращает нужные строки, но с ‘ n’, помещенным после него

#python #string #function #append #break

#python #строка #функция #добавить #перерыв

Вопрос:

Я написал этот фрагмент кода для скрипта, который должен проверять, содержит ли слово все гласные (so, e, u, i, o, a) без учета регистра:

 def words_all_vowels(filename):
    """Returns a list of all words that contain all vowels, as found in the file with the given name."""
    result = []
    
    e = False
    a = False
    i = False
    o = False
    u = False
    
    with open(filename, 'r') as f:
        for line in f:
            for r in range(len(line.lower())-1):
                if line.lower()[r:(r 1)] == "e":
                    e = True
                if line.lower()[r:(r 1)] == "a":
                    a = True
                if line.lower()[r:(r 1)] == "i":
                    i = True
                if line.lower()[r:(r 1)] == "o":
                    o = True
                if line.lower()[r:(r 1)] == "u":
                    u = True
            if e == True and a == True and i == True and o == True and u == True:
                print(line)
                result.append(line)
            
            #resetting for next word
            e == False
            a == False
            i == False
            o == False
            u == False
            
    return result
    
    pass  # TODO
  

Странно то, что скрипт возвращает не только строку, заключенную в моей переменной line, но и n после нее. Это возврат для произвольного списка потенциальных слов со всеми гласными:

 ['Aboideausn',
 'seagulln',
 'multidirectionaln',
 'lifeguardn',
 'complaintn',
 'overqualifiedn']
  

Это неверно, так как он также содержит слова, которые не содержат всех гласных, но я исправлю это позже. Все, что я хотел бы знать, это откуда берется это ‘ n’. Это похоже на разрыв, который каким-то образом включается в строку. В исходном документе, содержащем эти слова, слова разделены строкой, так что, возможно, именно оттуда они и берутся. У меня это было и в другом скрипте, так что, должно быть, что-то не так с тем, как я читаю эти строки.

Комментарии:

1. Используйте result.append(line.strip()) для удаления символа новой строки.

2. это неэффективно. Попробуйте: for line in f: if all(vowel in line.lower() for vowel in "aeiou"): и .strip() n

Ответ №1:

используйте line.strip() для удаления символа новой строки при добавлении результата.

 def words_all_vowels(filename):
    """Returns a list of all words that contain all vowels, as found in the file with the given name."""
    result = []
    
    e = False
    a = False
    i = False
    o = False
    u = False
    
    with open(filename, 'r') as f:
        for line in f:
            for r in range(len(line.lower())-1):
                if line.lower()[r:(r 1)] == "e":
                    e = True
                if line.lower()[r:(r 1)] == "a":
                    a = True
                if line.lower()[r:(r 1)] == "i":
                    i = True
                if line.lower()[r:(r 1)] == "o":
                    o = True
                if line.lower()[r:(r 1)] == "u":
                    u = True
            if e == True and a == True and i == True and o == True and u == True:
                print(line)
                result.append(line.strip()) # add strip
            
            #resetting for next word
            e == False
            a == False
            i == False
            o == False
            u == False
            
    return result
  

Ответ №2:

проблема в том, что строка имеет значение по умолчанию n в конце, чтобы перейти к новой строке, когда вы читаете из файла, который вы можете использовать line.strip() или вы можете использовать line.replace('n','')