2010-10-09 10 views
6

Digamos que le pido a un usuario que ingrese sin procesar y me dijeron: "Este es un mensaje". Si esa entrada en bruto contenía la palabra "mensaje", realizaría una acción después de eso. ¿Podría ver cómo se puede hacer esto?¿Cómo puedo verificar si una oración contiene una palabra determinada en Python y luego realizar una acción?

+2

Si intenta generar un filtro de contenido, considere esto: la palabra "clásico" tiene "culo" en ella (., Que, por cierto es otro término para el burro) . Esto es, por supuesto, solo una muestra: – knitti

Respuesta

7

Going basa en la observación de @knitti, el problema es que se necesita para dividir la frase en palabras en primer lugar, a continuación, comprobar:

term = "message" #term we want to search for 
input = raw_input() #read input from user 

words = input.split() #split the sentence into individual words 

if term in words: #see if one of the words in the sentence is the word we want 
    do_stuff() 

De lo contrario, si usted tenía la frase "Eso es un clásico "y trataste de comprobar si contenía la palabra" culo ", devolvería Verdadero incorrectamente.

Por supuesto, esto todavía no es perfecto porque entonces puede que tenga que preocuparse por cosas como eliminar la puntuación y lo que no (como, etc.) porque de lo contrario la frase "Ese es un clásico". aún devolvería False para una búsqueda de "clásico" (debido al período al final). En lugar de reinventar la rueda, aquí hay un buen puesto en pelar puntuacion de una sentencia en Python:

Best way to strip punctuation from a string in Python

Hay mayúsculas y minúsculas que considerar también, así que es posible que desee cambiar el resultado raw_input y el término de búsqueda para minúsculas antes de hacer una búsqueda. Puede hacerlo fácilmente simplemente usando la función lower() en la clase str.

Estos problemas siempre parecen simples ...

0
if "message" in sentence: 
    do_action() 
+0

¡Gracias amte! Me siento algo estúpido después de darme esta respuesta. –

+2

Esto no funcionará, debido al caso de la coincidencia de subcadenas. – DehengYe

1

Esto es, por supuesto, un ejemplo muy sencillo:

if "message" in raw_input(): 
    action() 

Si usted está obligado a asignar palabras diferentes para diferentes acciones, entonces se podría hacer algo como esto:

# actions 
def action(): 
    print "action" 

def other_action(): 
    print "other action" 

def default_action(): 
    print "default action" 

# word to action translation function 
def word_to_action(word): 
    return { 
     "message": action, 
     "sentence": other_action 
    }.get(word, default_action)() 

# get input, split into single words 
w = raw_input("Input: ").split() 

# apply the word to action translation to every word and act accordingly 
map(word_to_action, w) 

Tenga en cuenta que esto también define una acción predeterminada para el caso cuando la entrada no contiene ninguna de las palabras de activación.

Consulte here para obtener más detalles sobre la expresión de mapeo anterior, que en realidad es la forma de Python de lograr 'declaración de cambio'.

Cuestiones relacionadas