es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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:

    def resultados_comida():
        puntos = 0
        for comida in comidas:
            coincidencia = False
            for item in comida:
                if item in favoritos:
                    coincidencia = True
                    puntos += 1
            if coincidencia:
                print(f"{comida[0]} {comida[1]}: ¡Has encontrado algo que te gusta, buen trabajo! +1 punto")
            elif comida == favoritos:
                print("¡Wow, no podría haberlo disfrutado más! +2 puntos")
                puntos += 2
            else:
                print("No le gustó mucho...")
        print(f"Total de puntos: {puntos}")
    

    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, establecemos coincidencia en True. Al final del bucle sobre los elementos, verificamos el valor de coincidencia 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.

Comments are closed.