#string #list #python-3.x #text
#строка #Список #python-3.x #текст
Вопрос:
stackoverfollowers! у меня есть задача, с которой я не могу справиться до конца
Написать функцию
words(a, b, txt)
txt = ['All in the golden afternoonnFull leisurely we glide;nFor
both our oars, with little skill,nBy little arms are plied,nWhile
little hands make vain pretencenOur wanderings to guide.']
a = 6
b = 8
Функция должна возвращать все слова длиной от 6 до 8 букв в каждой строке. Если в строке нет таких слов, она возвращает пустую строку. Если в строке более одного слова, они должны иметь порядок, аналогичный порядку в строке
Функция
words(a,b,txt)
должна вернуть
['golden', '', 'little','little', 'little pretence', '']
я написал такой код:
def noalpha(s):
noa = '' # choose all non-alphabetic symbols
for c in s:
if not (c in noa or c.isalpha()):
noa = c
return noa
def words(a,b,txt):
lst = []
for i in txt: # work with a whole text that is one element in list txt
i = i.splitlines() # split text in lines n
for s in i: # iteration in lines
s = s.split()
for w in s: # iteration in words
w = w.replace(noalpha(w), '')
if a <= len(w) <= b:
lst.append(w)
return lst
поэтому я не могу найти способ:
- возвращает
''
(пустую строку) для целой строки, которая не содержит слов необходимой длины - если строка содержит более одного слова, я не могу вернуть их как
'word1 word2 word3'
Комментарии:
1. Вы правильно сделали отступ в своем финале
return
? Правильный ли вывод, как вы можете вернуться'little pretence'
, когда разделяете слова? Вы можетеreturn ' '.join(lst)
вернуть слова в виде строки.2. Кстати: Какая у вас проблема, потому что, похоже, она возвращает ожидаемый результат.
3. моя функция возвращает список, подобный этому [«золотой», «маленький», «маленький», «маленький», «притворство»], но он должен возвращаться так [«золотой», «, «маленький», «маленький», «маленький притворство», «] так что у меня нетстроки голосования и слова «little» и «pretence» возвращаются отдельно, в то время как их необходимо возвращать в одной строке, поскольку они принадлежат одной строке
4. это оно! я хотел бы вернуть строку слов, которая принадлежит к одной строке, а не каждое слово отдельно, но я не знаю, как исправить мой код!
Ответ №1:
Что-то вроде этого?
def alpha(word):
return ''.join(char for char in word if char.isalpha())
result = []
for line in txt[0].splitlines():
words = [alpha(word) for word in line.split()]
result.append(' '.join(word for word in words if a <= len(word) <= b))