2013-01-05 2 views
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() 

Пожалуйста, помогите!

Это работает, если я набираю только одно из слов. Но это не работает, когда я пытаюсь найти целое сообщение для ключевого слова.

+1

'if ключевое слово в сообщении или ключевое слово1 в сообщении' и т. Д. – mmgp

+3

Остерегайтесь проблемы [Сканторпа] (http://en.wikipedia.org/wiki/Scunthorpe_problem). – kojiro

ответ

0

Вы в настоящее время ищете конкретное сообщение:

«bombnuclearterroristgordon коричневый»

То, что вы хотите использовать 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(), который возвращает индекс к месту первого матча:

position = message.find(keyword) 
if position > -1: 
    #Bad message 
+0

Хорошо. И большое спасибо за помощь. – PythonNovice

+1

Просто любопытно: Любая конкретная причина, по которой вы предпочитаете 'find' over' in'? – kojiro

+0

Нет, просто сила привычки. 'in' лучше (поскольку он не требует позиции подстроки), поэтому я поменяю его в своем ответе. –

0
message == keyWord + keyWord1 + keyWord2 + keyWord3 

Это будет справедливо тогда и только тогда message точно равен 'bombnuclearterroristgordon коричневый. Вероятно, вы хотите использовать оператора 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]: 
    … 
+0

Спасибо, что напомнили мне мой урок, который я когда-то имел в классе. Я помню, как я делал что-то подобное в своем классе. – PythonNovice

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.

+0

Да, я помню, как раньше делал что-то подобное. Спасибо за помощь. Это делает мою жизнь намного проще аха. :) – PythonNovice

+0

Рад помочь вам, продолжайте кодирование :-) – George

Смежные вопросы