list = ["apples", "oranges", "jerky", "tofu"]
if "chew" in action and list[:] in action:
print "Yum!"
else:
print "Ew!"
¿Cómo tengo una verificación lógica donde verifica si hay "masticación" en acción y CUALQUIER valor en la lista? Por ejemplo, quiero imprimir "¡mmm!" si la acción es "masticar naranjas" o "masticar cecina".
5 respuestas
¿Por qué no utilizar la función any()
incorporada? Lo siguiente me parece bastante pitónico:
foods = ["apples", "oranges", "jerky", "tofu"]
if "chew" in action and any(f in action for f in foods):
print "Yum!"
else:
print "Ew!"
Por supuesto, solo buscar subcadenas simples puede dar algunos resultados extraños. Por ejemplo, "jerkeyblahchew"
aún coincidiría con la categoría "Yum!"
. Probablemente desee dividir action
en palabras y buscar nombres de alimentos que sigan inmediatamente a "chew"
(como sugiere @Peter Lyons en su respuesta para el caso simple donde las dos primeras palabras serían {{ X4}}).
Ignorando el orden, podría enfocarse solo en palabras separadas por espacios (e ignorar aún más las mayúsculas / minúsculas) usando algo como lo siguiente:
foods = ["apples", "oranges", "jerky", "tofu"]
action_words = set(word.lower() for word in action.split())
if "chew" in action_words and any(f in action_words for f in foods):
print "Yum!"
else:
print "Ew!"
x in y
significa "mirar cada uno de los elementos de y
a su vez; ¿alguno de ellos es igual a x
?" Entonces, la lógica obviamente no es correcta: list
(una mala idea para un nombre de variable, por cierto, ya que ese es el nombre del tipo) es una lista de cadenas, y action
es una cadena - los elementos de una cadena son letras, y ninguna letra puede ser igual a una lista de cadenas.
Parece que quiere hacer alguna operación de configuración aquí (intersección).
Suponiendo que action
es una cadena base que contiene palabras:
foods = set(["apples", "oranges", "jerky", "tofu"])
actionWords = set(action.split())
if "chew" in action and foods & actionWords:
print "Yum!"
else:
print "Ew!"
El operador &
en un conjunto significa intersección, consulte documento de Python.
if "chew" in action and action.split()[1] in list:
print "Yum!"
else:
print "Ew!"
En primer lugar, no use la lista como nombre de variable. Es una palabra clave en python.
_list = ["apples", "oranges", "jerky", "tofu"]
bools = [True for a in action.split() if a in (_list + ["chew"])]
if True in bools:
print "Yum!"
else:
print "Ew!"
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.