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.

Programa de Python – devolviendo todas las respuestas de un ciclo en lugar de solo la deseada.

Tengo el siguiente programa de Python y quiero que el programa simplemente devuelva el precio del artículo correspondiente en la lista ‘items’ . En cambio, como puede ver, no funciona correctamente y se rompe o devuelve “No hay tal artículo” y luego el número. He intentado varias cosas y no puedo obtener la secuencia correcta de salida.

https://trinket.io/python/77909a6574

Salida deseada:

El usuario ingresa: Alitas de pollo
Salida: 5

El usuario ingresa: Arroz Jollof
Salida: 7

y así sucesivamente.

¿Alguien puede sugerir una solución además de las mejores prácticas para usar una declaración if dentro de un bucle for y salir en el momento adecuado?

def salestracker():
print(“—Rastreador de ventas—“)
print(“—MENÚ—“)
print(“””
1. Encontrar el precio de un artículo
2. Ingresar ventas de un artículo
3. Encontrar el total del día

“””)

items = [“Alitas de pollo”, “Arroz Jollof”, “Arroz frito tailandés”, “Empanadillas”]
precios = [5, 7, 8, 5]
findprice(items, precios)

def findprice(items, precios):
print(“—Encontrar precio—“)
item = input(“Ingrese el artículo:”)
for i in range(len(items)):
if item == items[i]:
print(precios[i])
break
else:
break
print(“No hay tal artículo”)

salestracker()

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Un problema con el código actual es que el mensaje “No existe ese artículo” siempre se imprime después del ciclo for, incluso si se encontró el artículo. Para solucionar esto, podemos usar una variable de bandera para hacer un seguimiento de si se encontró o no el artículo, e imprimir el mensaje de error solo si la bandera todavía es Falsa después del ciclo.

    Otro problema es que la instrucción “else” en el ciclo for es innecesaria y en realidad hace que el ciclo se interrumpa prematuramente si el primer artículo no es una coincidencia. Podemos eliminar la instrucción else para permitir que el ciclo continúe verificando el resto de los artículos.

    Aquí hay una versión actualizada del código con estos cambios:

    def salestracker():
        print("---Rastreador de ventas---")
        print("---MENÚ---")
        print("""
        1. Encontrar el precio de un artículo
        2. Ingresar ventas de un artículo
        3. Encontrar el total del día
        """)
    
        items=["Alitas de pollo","Arroz Jollof", "Arroz frito tailandés", "Empanadillas"]
        price=[5,7,8,5]
        findprice(items,price)
    
    
    
    def findprice(items,price):
        print("---Encontrar precio---")
        item=input("Ingrese el artículo:")
        found = False
        for i in range(len(items)):
            if item==items[i]:
                print(price[i])
                found = True
                break
        if not found:
            print("No existe ese artículo")
    
    salestracker()
    

    En cuanto a las mejores prácticas, usar una variable de bandera para hacer un seguimiento del estado es un patrón común en programación, especialmente cuando se trata de ciclos o flujos de lógica complejos. En general, es una buena idea evitar el uso de las instrucciones break dentro de los ciclos si es posible, ya que pueden hacer que el código sea más difícil de entender y razonar. En cambio, intente estructurar el ciclo de una manera que termine naturalmente cuando se cumpla la condición deseada.

Comments are closed.