我正在学习Python在线课程,并陷入了这个练习中(很抱歉自动翻译,我英语不好):
考虑一下检查电子邮件中的垃圾邮件或过滤邮件中禁止使用的单词的任务。
让
is_spam_words
函数接受字符串(参数
text
),检查列表中禁止使用的单词的内容(参数
spam_words
),并返回检查结果:
True
,如果列表中至少有一个单词,并且
False
,如果在文本中找不到停止词。
中的单词
文本
参数在任何情况下都可以,这意味着
is_spam_words
函数在搜索禁止的单词时,是独立于大小写的,并且所有文本都必须小写。为了简单起见,我们假设行中只有一个禁止使用的单词。
提供第三个参数
space_around
函数,默认为
错误
。它将负责功能是否搜索单个单词。如果单词左侧有空格符号,或者位于文本开头,并且单词右侧有空格或句点符号,则该单词被认为是独立的。
例如,我们在文本中寻找“雨”这个词。因此,在“彩虹”这个词中,挑战和结果如下:
print(is_spam_words("rainbow", ["rain"])) # True
print(is_spam_words("rainbow", ["rain"], True)) # False
也就是说,在第二种情况下,这个词不是单独的,而是另一个词的一部分。
在本例中,函数将返回
正确
在这两种情况下。
print(is_spam_words("rain outside.", ["rain"])) # True
print(is_spam_words("rain outside.", ["rain"], True)) # True
我的代码是:
def is_spam_words(text, spam_words, space_around=False):
if space_around:
text = text.lower()
for char in spam_words:
char.lower()
if text.find(spam_words) != -1 or text.startswith(spam_words):
return True
else:
return False
return False
问题是:
函数返回了两个参数的错误结果:
错误
。必须是
is_spam_words('rain outside.', ['rain']) == True
我尝试过更改主循环(如示例1:
if spam_words in text is True
或示例2:
if (" " + spam_word + " ") in (" " + text + " ")
),但我仍然不明白为什么它不起作用。我预计,如果在单词/文本中发现垃圾邮件,结果将是
正确
和
错误
如果没有找到。