Autor
|
Tema: Valores incorrectos [python] (Leído 5,414 veces)
|
criskapunk
Desconectado
Mensajes: 277
|
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
|
|
« Última modificación: 16 Octubre 2010, 01:27 am por Leo Gutiérrez. »
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
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
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
criskapunk
Desconectado
Mensajes: 277
|
Si, debe ser por eso. No me había fijado cuanto devolvía la resta (Eso me pasa por suponer ) 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
|
|
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
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
|
|
|
En línea
|
|
|
|
Meta
|
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
|
|
|
En línea
|
|
|
|
[L]ord [R]NA
Desconectado
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
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
|
|
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
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)
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Sumar todos los valores entre el valor de inicio y del final [python]
Programación General
|
bichotg
|
4
|
3,208
|
19 Febrero 2012, 02:32 am
por RyogiShiki
|
|
|
Verificar si dos tuplas contienen los mismos valores [python]
Programación General
|
bichotg
|
5
|
4,995
|
23 Febrero 2012, 18:38 pm
por WaAYa HaCK
|
|
|
URGENTE!! Guardar valores del puerto serie con python
Scripting
|
carlos.foroelhaker
|
2
|
4,723
|
23 Mayo 2012, 20:08 pm
por carlos.foroelhaker
|
|
|
Introducir valores automáticamente con librería subprocess [Python]
Scripting
|
Lautrab
|
0
|
2,390
|
13 Abril 2013, 14:07 pm
por Lautrab
|
|
|
SPI_GETMOUSECLICKLOCKTIME cambia con valores incorrectos
Programación C/C++
|
patilanz
|
5
|
2,722
|
9 Noviembre 2014, 21:04 pm
por Eternal Idol
|
|