Foros del Web » Programando para Internet » Python »

Calcular billetes

Estas en el tema de Calcular billetes en el foro de Python en Foros del Web. Hay un programa que se me resiste. un programa que calcule el desglose en billetes y monedas de una cantidad exacta de euros. Hay billetes ...
  #1 (permalink)  
Antiguo 03/10/2010, 18:24
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 6 meses
Puntos: 8
Calcular billetes

Hay un programa que se me resiste.

un programa que calcule el desglose en billetes y monedas de una cantidad exacta de euros. Hay billetes de 500, 200, 100, 50, 20, 10 y 5 euros y monedas de 2 y 1 euros. Por ejemplo, si deseamos conocer el desglose de 434 euros, el programa mostrará por pantalla el siguiente resultado:
2 billetes de 200 euros.
1 billete de 20 euros.
1 billete de 10 euros.
2 monedas de 2 euros.
(¿Que cómo se efectúa el desglose? Muy fácil. Empieza por calcular la división entera entre la cantidad y 500 (el valor de la mayor moneda): 434 entre 500 da 0, así que no hay billetes de 500 euros en el desglose; divide a continuación la cantidad 434 entre 200, cabe a 2 y sobran 34, así
que en el desglose hay 2 billetes de 200 euros; dividimos a continuación 34 entre 100 y vemos que no hay ningún billete de 100 euros en el desglose (cabe a 0); como el resto de la última división es 34, pasamos a dividir 34 entre 20 y vemos que el desglose incluye un billete de 20 euros y aún nos faltan 14 euros por desglosar. . . )


He guardado todos los billetes y moneda en cada variable. He intentado y sigo con ello usando los if-else con sus operadores ==, !=, <=, and, or, etc, etc, etc.

Este tipo de ejercicio es mucho para mi. Aún así sigo para aprender aunque sea un tocho de código que haga y ustedes muy pequeño. Sigo experimentando pero necesito ideas.

Código:
# Introducir datos a la variable.
E = int(raw_input('Ingresar Capital: '))

# Variables Billetes.
a = 500
b = 200
c = 100
d = 50
e = 20
f = 10
g = 5

# Variables Monedas.
h = 2
i = 1

#R = (a / 500 != 0) or (b / 200 != 0) or (c / 100 != 0) or (d / 50 != 0) or (e / 20 != 0) or (f / 10 != 0) or (g / 5 != 0) or (h / 2 != 0) or (i / 1 != 0)

#print R

if (E / a) == 0:
    a1 = E
    print a1
if (a1 / b) == 0:
    a2 = a1
    print a2
    
    etc.


print '%d billetes de 500 €uros.' % a1
print '%d billetes de 200 €uros.' % a2
print '%d billetes de 100 €uros.' % a3
print '%d billetes de 50 €uros.' % a4
print '%d billetes de 20 €uros.' % a5
print '%d billetes de 10 €uros.' % a6
print '%d billetes de 5 €uros.' % a7
print '%d monedas de 2 €uros.' % a8
print '%d monedas de 1 €uros.' % a9
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #2 (permalink)  
Antiguo 03/10/2010, 19:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Calcular billetes

Este tipo de problemas me recuerda a los problemas de conversión de base.

Te daré un consejo, usa el operador modulo junto con la división.

Tal vez gráficamente resulte mas placentero y fácil.



En la imagen hay 20 manzanitas si las divido entre 4 veras que caben exactamente 5 en cada huequito, si tuviera 21 manzanitas entonces en cada huequito me cabrían 5 y me sobraría una, si tuviera 22 manzanitas me sobrarían 2, 23 me sobraría 3, 24 ahora el numero de manzanitas en cada huequito es 6.

El resultado de la división es el numero de manzanitas en cada huequito. Y el modulo es el numero de manzanitas sobrantes.

En este caso si cambio manzanitas por dinero, si quiero representar una cantidad N en términos de billetes y monedas entonces tu objetivo es sacar cuantas veces esa cantidad cabe en la denominación mas alta hasta las baja. Ejemplo:

Código:
numero_de_billetes_de_500 = N / 500 #Cuantas veces cabe N en 500
N = N % 500 #Dinero restante

....

numero_de_monedas_de_2 = N / 2
N = N % 2

numero_de_monedas_de_1 = N / 1
Edito: La imagen la saque de wikipedia, no decía que fueran manzanitas pero que nadie me diga lo contrario ¬¬

Última edición por razpeitia; 03/10/2010 a las 20:03
  #3 (permalink)  
Antiguo 03/10/2010, 20:46
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 6 meses
Puntos: 8
Respuesta: Calcular billetes

Hola:

He llegado más o menos como me explica y está bien explicado. Aún me cuesta hacer cosas.

Código:
# Introducir datos a la variable.
N = int(raw_input('Ingresar Capital: '))

# Variables Billetes.
a = 500
b = 200
c = 100
d = 50
e = 20
f = 10
g = 5

# Variables Monedas.
h = 2
i = 1

numero_de_billetes_500 = N / 500
N = N % 500

numero_de_billetes_200 = N / 200
N = N % 200

numero_de_billetes_100 = N / 100
N = N % 100

numero_de_billetes_50 = N / 50
N = N % 50

numero_de_billetes_20 = N / 20
N = N % 20

numero_de_billetes_10 = N / 10
N = N % 10

numero_de_billetes_5 = N / 5
N = N % 5

numero_de_billetes_2 = N / 2
N = N % 2

numero_de_billetes_1 = N / 1
N = N % 1


Un cordial saludo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #4 (permalink)  
Antiguo 03/10/2010, 20:53
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Calcular billetes

Veo que has dado con la solución ahora vamos a pythonizarlo un poco ;)
Código:
# Introducir datos a la variable.
N = int(raw_input('Ingresar Capital: '))

# Variables Billetes.
denominaciones = [500, 200, 100, 50, 20, 10, 5, 2, 1]

for denominacion in denominaciones:
    print "%d Billetes de %d" % ((N / denominacion), denominacion)
    N = N % denominacion
  #5 (permalink)  
Antiguo 04/10/2010, 03:58
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 6 meses
Puntos: 8
Respuesta: Calcular billetes

Cita:
Iniciado por razpeitia Ver Mensaje
Veo que has dado con la solución ahora vamos a pythonizarlo un poco ;)
Código:
# Introducir datos a la variable.
N = int(raw_input('Ingresar Capital: '))

# Variables Billetes.
denominaciones = [500, 200, 100, 50, 20, 10, 5, 2, 1]

for denominacion in denominaciones:
    print "%d Billetes de %d" % ((N / denominacion), denominacion)
    N = N % denominacion
Gracias.

He probado tu código y funciona bien con este resultado.

Cita:
0 Billetes de 100
0 Billetes de 50
1 Billetes de 20
1 Billetes de 10
0 Billetes de 5
2 Billetes de 2
0 Billetes de 1
Sólo que las dos última listas no se llaman billetes sino monedas. Ahí ya es algo más complejo de hacer. ¿Verdad?

Muy bueno y rápido. Ya que estoy sólo con if-else. ¿Aunque sea el código más largo, puedes hacerlo sólo con if-else? Aún no he llegado la parte de los array y no debo usarlo, tampoco los while?

Ahora es más complejo. ¿Verdad?

Puede ser que funciona con

if

elif

elif

else

así todo el rato.

Saludo.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar

Última edición por REHome; 04/10/2010 a las 04:43

Etiquetas: calculadora
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:09.