TransWikia.com

Python. Error al realizar un loop con while

Stack Overflow en español Asked by Adrián P.L. on February 17, 2021

Me gustaría tomar todos los valores de una compra y dar el valor total de la compra aplicandole el IVA.

    def get_factura ():
        factura=[]
        while factura != 'salir':
            producto = input('Producto: ')
            precio = float(input('Precio sin IVA: '))
            print(f'El producto {producto} tiene un precio sin IVA de {precio}')
            factura.append(precio)
        return factura
    listado_compra=get_factura()
    print(listado_compra)


    def factura_IVA(factura):
        total = 0.0
        for precio in factura:
            total+= precio
        precios=round(total+0.21*total,2)
        return precios

    precio_total = factura_IVA(listado_compra)
    print(f'La factura total con IVA es de {precio_total} €')

El problema es que estoy realizando un loop con while y no se corta cuando le escribo salir.
¿Cuál es mi error?

Gracias de antemano.

One Answer

Según el código que has adjuntado tienes varios errores.

  1. factura es una lista, por lo cual se usa el operador in para comprobar si el valor existe.
  2. La lista factura nunca va a contener el valor salir, ya que solo le estas añadiendo el precio.

La solución que te propongo seria usar un flag para comprobar si el valor introducido es igual a salir lo que hará salir del bucle y seguir con las siguientes instrucciones.

Código:

def get_factura ():
    factura=[]
    salir = True #Flag para indicar cuando salir
    
    while salir: 
        producto = input('Producto: ')
        if producto == 'salir':
            # Simplemente salimos del loop
            salir = False
        else:
            # Seguimos con el programa
            precio = float(input('Precio sin IVA: '))
            print(f'El producto {producto} tiene un precio sin IVA de {precio}')
            factura.append(precio)
            
    return factura
    
listado_compra=get_factura()
print(listado_compra)

Correct answer by Eugeni Bejan on February 17, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP