0

基本上我在 Python 中有一个任务集。它是在估算的消息中搜索这 4 个关键字:炸弹、核、恐怖分子和戈登布朗。然后我必须输出它是“ SAFE ”消息还是“ UNSAFE ”消息。

到目前为止,这就是我得到的(我在 Python 方面有点菜鸟。我还在学习这门语言。):

keyWord = "bomb"
keyWord1 = "nuclear"
keyWord2 = "terrorist"
keyWord3 = "gordon brown"

def textSearch():
    message = input("Input a message: ")
    if message == keyWord + keyWord1 + keyWord2 + keyWord3:
        print("This is message is UNSAFE!")
    else:
        print("This is a SAFE message.")

textSearch()

请帮忙!

如果我只输入一个单词,它就会起作用。但是当我尝试在整个消息中搜索关键字时它不起作用。

4

3 回答 3

0

您当前正在查找特定消息:

“炸弹核恐怖分子戈登布朗”

您想要使用的是in它将在您的字符串中找到一个子字符串。对每个关键字执行此操作:

if keyWord in message:
    #keyWord exists in message

如果您将关键字放在列表中会更容易,然后您可以循环它们:

keywords = ["bomb", "nuclear", "terrorist", "gordon brown"]

for keyword in keywords:
    if keyword in message:
        #Bad message!

更整洁的方法是使用列表理解和any()函数,它在一行中实现与上面相同的功能:

bad = any(keyword in message for keyword in keywords)

或者,如果您需要对子字符串的位置做一些事情,那么您可以使用find()which 返回第一个匹配位置的索引:

position = message.find(keyword) 
if position > -1:
    #Bad message
于 2013-01-05T15:44:15.880 回答
0
message == keyWord + keyWord1 + keyWord2 + keyWord3

这将是正确的,当且仅当message与“bombnuclearterroristgordon brown”完全相等时。您可能希望使用in运算符来检查成员资格。

keyWord in message or keyWord1 in message or keyWord2 in message or keyWord3 in message

……这显然很麻烦,但你有很好的 Python 替代品。首先列出关键字而不是单个名称:

keyWords = ["bomb", "nuclear", "terrorist", "gordon brown"]

然后,使用列表推导:

if [keyWord in message for keyWord in keyWords]:
    …
于 2013-01-05T15:47:01.780 回答
0

您可以像这样定义“禁止”关键字列表:

keywords = ["bomb", "nuclear", "terrorist"]

然后你可以迭代它们并检查它们是否包含在文本中,如下所示:

for keyword in keywords:
    if keyword in message:
        print "unsafe"
        break

break用于在找到其中一个关键字第一次出现后停止迭代关键字。

你也可以通过这样的列表理解来做到这一点:

if [keyword in message for keyword in keywords]...

但我认为对于 Python 初学者来说,前一种解决方案更容易理解。

于 2013-01-05T15:47:20.183 回答