Я все еще python любитель, поэтому, пожалуйста, потерпите меня. Я работаю над проблемой 3, и мне нужно реализовать подкласс PhraseTrigger, который срабатывает, когда заголовок новости содержит данную фразу. Я, честно говоря, даже не знаю, с чего начать и правильно ли то, что я уже сделал для проблемы 2. Для справки: это курс MTC OCW 6.0001, но я нигде не могу найти решение онлайн. Ниже приведен мой код (у каждого класса есть номер проблемы над ним. Я выполнил задачи 1 и 2, но не уверен, что они также являются правильными.)
# Problem 1
class NewsStory(object):
def __init__(self, guid, title, description, link, pubdate):
self.guid = guid
self.title = title
self.description = description
self.link = link
self.pubdate = pubdate
def get_guid(self):
return self.guid
def get_title(self):
return self.title
def get_description(self):
return self.description
def get_link(self):
return self.link
def get_pubdate(self):
return self.pubdate
#======================
# Triggers
#======================
class Trigger(object):
def evaluate(self, story):
"""
Returns True if an alert should be generated
for the given news item, or False otherwise.
"""
# DO NOT CHANGE THIS!
raise NotImplementedError
# PHRASE TRIGGERS
# Problem 2
class PhraseTrigger(Trigger):
def __init__(self,phrase):
self.phrase = phrase.lower()
def is_phrase_in(self,text):
if self.phrase in text.lower():
return True
else:
return False
# Problem 3
class TitleTrigger(PhraseTrigger):
def __init__(self,phrase):
self.phrase = phrase.lower()
А вот предоставленный тестовый код MIT:
class ProblemSet5(unittest.TestCase):
def setUp(self):
class TrueTrigger:
def evaluate(self, story): return True
class FalseTrigger:
def evaluate(self, story): return False
self.tt = TrueTrigger()
self.tt2 = TrueTrigger()
self.ft = FalseTrigger()
self.ft2 = FalseTrigger()
def test1TitleTrigger(self):
cuddly = NewsStory('', 'The purple cow is soft and cuddly.', '', '', datetime.now())
exclaim = NewsStory('', 'Purple!!! Cow!!!', '', '', datetime.now())
symbols = NewsStory('', 'purple@#$%cow', '', '', datetime.now())
spaces = NewsStory('', 'Did you see a purple cow?', '', '', datetime.now())
caps = NewsStory('', 'The farmer owns a really PURPLE cow.', '', '', datetime.now())
exact = NewsStory('', 'purple cow', '', '', datetime.now())
plural = NewsStory('', 'Purple cows are cool!', '', '', datetime.now())
separate = NewsStory('', 'The purple blob over there is a cow.', '', '', datetime.now())
brown = NewsStory('', 'How now brown cow.', '' ,'', datetime.now())
badorder = NewsStory('', 'Cow!!! Purple!!!', '', '', datetime.now())
nospaces = NewsStory('', 'purplecowpurplecowpurplecow', '', '', datetime.now())
nothing = NewsStory('', 'I like poison dart frogs.', '', '', datetime.now())
s1 = TitleTrigger('PURPLE COW')
s2 = TitleTrigger('purple cow')
for trig in [s1, s2]:
self.assertTrue(trig.evaluate(cuddly), "TitleTrigger failed to fire when the phrase appeared in the title.")
self.assertTrue(trig.evaluate(exclaim), "TitleTrigger failed to fire when the words were separated by exclamation marks.")
self.assertTrue(trig.evaluate(symbols), "TitleTrigger failed to fire when the words were separated by assorted punctuation.")
self.assertTrue(trig.evaluate(spaces), "TitleTrigger failed to fire when the words were separated by multiple spaces.")
self.assertTrue(trig.evaluate(caps), "TitleTrigger failed to fire when the phrase appeared with both uppercase and lowercase letters.")
self.assertTrue(trig.evaluate(exact), "TitleTrigger failed to fire when the words in the phrase were the only words in the title.")
self.assertFalse(trig.evaluate(plural), "TitleTrigger fired when the words in the phrase were contained within other words.")
self.assertFalse(trig.evaluate(separate), "TitleTrigger fired when the words in the phrase were separated by other words.")
self.assertFalse(trig.evaluate(brown), "TitleTrigger fired when only part of the phrase was found.")
self.assertFalse(trig.evaluate(badorder), "TitleTrigger fired when the words in the phrase appeared out of order.")
self.assertFalse(trig.evaluate(nospaces), "TitleTrigger fired when words were not separated by spaces or punctuation.")
self.assertFalse(trig.evaluate(nothing), "TitleTrigger fired when none of the words in the phrase appeared.")
Очевидно, что они хотят иметь единственный аргумент в конструкторе для TitleTrigger, но, честно говоря, я даже не знаю, что они имеют в виду под "триггер должен сработать". Я предполагаю, что они хотят, чтобы я возвратил True или False, но я даже не понимаю, как получить заголовок из объектов NewsStory. Если бы кто-то мог мне это объяснить, я был бы чрезвычайно признателен!