Problema de anidamiento de bucle, Elementos no referenciados correctamente.
He escrito un programa que toma la tupla de tres objetos de muestra (no estoy seguro si realmente son objetos, pero los he etiquetado como tales aquí), y compara ya sea la tupla o los elementos dentro de ella con la tupla de “favoritos”. Sin embargo, cuando lo ejecuto, sucede lo siguiente:
import random
favorite_food = ['sushi', 'spaghetti', 'pizza', 'hamburgers', 'sandwiches']
favorite_taste = ['spicy', 'sweet', 'savory', 'sour', 'bitter', 'salty']
chosen_ff = random.choice(favorite_food)
chosen_ft = random.choice(favorite_taste)
test_food1 = ('salty', 'pizza')
test_food2 = ('sweet', 'sandwiches')
test_food3 = ('sour', 'sushi')
foods = (test_food1, test_food2, test_food3)
favorites = (chosen_ft, chosen_ff)
def foodresults():
points = 0
for food in foods:
for item in food:
print(food[0], food[1])
if item in favorites:
print("¡Hubo una coincidencia, buen trabajo! +1 punto")
points = points + 1
elif food == favorites:
print("¡Wow, no podría haberlo disfrutado más! +2 puntos")
points = points + 2
else:
print("No le gustó mucho...")
foodresults()
Sin embargo, cuando lo hago, siempre imprime el mensaje esperado dos veces, una vez para el primer elemento y otra vez para el segundo.
salty pizza
¡Hubo una coincidencia, buen trabajo! +1 punto
salty pizza
No le gustó mucho...
sweet sandwiches
No le gustó mucho...
sweet sandwiches
No le gustó mucho...
sour sushi
No le gustó mucho...
sour sushi
¡Hubo una coincidencia, buen trabajo! +1 punto
Si utilizo continue
cada vez que llega al segundo elemento, lo excluye del sistema de puntuación y solo verifica el primer elemento, y viceversa. ¿Existe alguna manera de verificar que ambos elementos cumplan con la condición if item in favorites
y que solo imprima una línea?
davy.ai
Sí, puedes modificar el código para imprimir el mensaje solo una vez por comida, en lugar de una vez por elemento. Puedes usar una variable para mantener un seguimiento de si al menos un elemento en la comida está en los favoritos, y luego imprimir el mensaje en consecuencia. Aquí tienes un ejemplo de código:
En esta versión del código, inicializamos una variable booleana
coincidencia
en False antes de iterar sobre los elementos de la comida. Si encontramos un elemento que está en los favoritos, establecemoscoincidencia
en True. Al final del bucle sobre los elementos, verificamos el valor decoincidencia
e imprimimos el mensaje apropiado.Ten en cuenta que también movimos el incremento de puntos fuera del bucle de elementos, para que solo incremente los puntos una vez por comida, en lugar de una vez por elemento. Y al final de la función, imprimimos el total de puntos obtenidos.