Итак, я пытаюсь создать небольшую функцию, которая принимает имя файла в качестве аргумента и возвращает, сколько СЛОВ в файле заканчивается на «!», «?» или ".".
До сих пор я пробовал следующее:
def count_possible_sentences(file_name):
with open(file_name) as wordfile:
text_str = wordfile.read()
word_list = text_str.split()
count = 0
for ch in word_list:
if ch in "!?.":
count += 1
return count
но это не работает и не учитывает, сколько отдельных СЛОВ заканчиваются указанными символами в отдельном вызываемом файле. Я думал о разделении каждого слова и переборе каждого символа, и если он содержит один из символов, он добавляет +1 к счету, но я не уверен, как это сделать.
редактировать: также думали об использовании .count? это сработает? ваше здоровье
редактировать2: вот мои доктесты, которые я пытаюсь пройти:
def count_possible_sentences(file_name):
"""
>>> count_possible_sentences("frances_oldham_kelsey.txt")
45
>>> count_possible_sentences("ernest_rutherford.txt")
32
>>> count_possible_sentences("marie_curie.txt")
24
"""
и вот ссылка на .txt, который не работает: https://pastebin.com/raw/1NYPeY29
там написано ожидаемо: 45 получено: 52
Использовать:
def count_possible_sentences(file_name):
count = 0
with open(file_name) as wordfile: #Open file for read
for line in wordfile: #Iterate each line
for word in line.strip().split(): #Get words
if word.endswith(("!", "?", ".")): #Check if word ends with
count += 1
return count
Линия...
if ch in '?!.':
... не будет работать, как ожидалось. Вам нужно проверить каждый знак препинания отдельно:
if any(ch.endswith(punc) for punc in '?!.'):
# or
if any(punc in ch for punc in '?!.'):
заменив его на if '!?.' в ch: все еще не работает, возвращает 0, когда я запускаю его с doctests
Я бы предложил что-то подобное, используя регулярное выражение. Я думаю, это то, что вы хотите сделать.
import re
pattern = "[a-zA-Z]+(!|\?|\.)"
string = "This! sent contains? 3 of those! words !!"
a = len(re.findall(pattern, string))
print(a) # 3
Вам нужно изменить оператор if:
def count_possible_sentences(file_name):
with open(file_name) as word_file:
text_str = word_file.read()
word_list = text_str.split()
count = 0
for item in word_list:
if '!' in item or '?' in item or '.' in item:
count += 1
return count
Вы можете сделать это одной строкой, если предпочитаете понимание списка. w[-1] in '!?.'
проверяет последний символ слова.
def count_possible_sentences(file_name):
return len([w for w in open(file_name).read().split() if w[-1] in '!?.'])
print(count_possible_sentences('input_file.txt'))
Не знал
str.endwith
принимает на проверку кортеж суффиксов! Отличное решение.