Título: Valores incorrectos [python]
Publicado por: criskapunk en 15 Octubre 2010, 22:29 pm
Buenas chicos, Estaba resolviendo este ejercicio y me surgió un problema: Dada una cantidad de dinero, indicar como repartir el vuelto de manera que se utilice la menor cantidad de monedas. Acá mi código: b = (100, 50, 20, 10, 5, 2, 1, .5, .25, .1, .05) v = float(raw_input("Ingrese vuelto: ")) i = 0 j = 0 l = len(b) while i != l: while v - b[i] >= 0: v -= b[i] j += 1 if j != 0: print j, " billetes/monedas de ", b[i] print "El valor restante es: ", v # Esta unicamente para comprobar los resultados j = 0 i += 1
La salida del script utlizando como valor 1807.35 es: 18 billetes/monedas de 100 El valor restante es: 7.35 1 billetes/monedas de 5 El valor restante es: 2.35 1 billetes/monedas de 2 El valor restante es: 0.35 1 billetes/monedas de 0.25 El valor restante es: 0.0999999999999 1 billetes/monedas de 0.05 El valor restante es: 0.0499999999999
Por qué después de hacer la resta 0.35-0.25 devuelve 0.09 y no 0.1? :-\ Un saludo y gracias ;)
Título: Re: Valores incorrectos
Publicado por: Novlucker en 15 Octubre 2010, 22:44 pm
No tengo idea, pero .... a mi también me pasa ;-) Tiene que ser tema de como python trata los valores de coma flotante, si ejecutas 0.35-0.25 te devuelve 0.099999999999999978 en lugar de 0.1, lo mismo pasa con otros valores pequeños.
Saludos
Título: Re: Valores incorrectos
Publicado por: criskapunk en 15 Octubre 2010, 23:40 pm
Si, debe ser por eso. No me había fijado cuanto devolvía la resta (Eso me pasa por suponer :P) Lo resolví así: b = (100, 50, 20, 10, 5, 2, 1, 0.5, 0.25, 0.1, 0.05) v = float(raw_input("Ingrese vuelto: ")) i = 0 j = 0 l = len(b) while i != l: while v - b[i] >= 0: # v -= b[i] v = (v * 10 - b[i] * 10) / 10 j += 1 if j != 0: print j, " billetes/monedas de ", b[i] j = 0 i += 1 if v != 0: print "Con %.2f centavos imposibles de devolver" % v
Muchas gracias Novlucker! Un saludo ;)
Título: Re: Valores incorrectos
Publicado por: [L]ord [R]NA en 16 Octubre 2010, 00:13 am
Utiliza la funcion round(valor,ndigitos) b = (100, 50, 20, 10, 5, 2, 1, .5, .25, .1, .05) v = float(raw_input("Ingrese vuelto: ")) i = 0 j = 0 l = len(b) while i != l: while v - b[i] >= 0: v -= b[i] v = round(v,2) j += 1 if j != 0: print j, " billetes/monedas de ", b[i] print "El valor restante es: ", v # Esta unicamente para comprobar los resultados j = 0 i += 1
Valores de salida: Ingrese vuelto: 1807.35 18 billetes/monedas de 100 El valor restante es: 7.35 1 billetes/monedas de 5 El valor restante es: 2.35 1 billetes/monedas de 2 El valor restante es: 0.35 1 billetes/monedas de 0.25 El valor restante es: 0.1 1 billetes/monedas de 0.1 El valor restante es: 0.0
Título: Re: Valores incorrectos [python]
Publicado por: Meta en 16 Octubre 2010, 02:59 am
bi = int(raw_input('Ingresa dinero: ')) for eu in [500, 200, 100, 50, 20, 10, 5, 2, 1]: print '%d billetes de %d' % ((bi / eu), eu) bil = bi % eu
Título: Re: Valores incorrectos [python]
Publicado por: [L]ord [R]NA en 21 Octubre 2010, 16:16 pm
bi = int(raw_input('Ingresa dinero: ')) for eu in [500, 200, 100, 50, 20, 10, 5, 2, 1]: print '%d billetes de %d' % ((bi / eu), eu) bil = bi % eu
te falto .5, .25, .1, .05, .01
Título: Re: Valores incorrectos [python]
Publicado por: Karcrack en 21 Octubre 2010, 17:49 pm
Lo hice el año pasado para el instituto. # coding: utf-8 # Obtiene el desglose en billetes y monedas de una cantidad de Euros # Creamos y obtenemos las variables iMoney = round(float(raw_input("Dame una cantidad de Euros con 2 decimales:")),2) # Recorremos la cantidad de posibles billetes o monedas for nCantidad in [500,200,100,50,20,10,5,2,1,0.5,0.2,0.1,0.10,0.05,0.02,0.01]: if (iMoney // nCantidad != 0): if nCantidad >= 5: sNombre = "billete(s)" if nCantidad < 5: sNombre = "moneda(s)" print "%d %s de %.2f Euros" % (iMoney // nCantidad, sNombre, nCantidad) iMoney -= (iMoney // nCantidad * nCantidad)
|