#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','')