[python] Calcular billetes

Iniciado por Meta, 3 Octubre 2010, 23:45 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

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.


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 (python) [Seleccionar]
# 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
   
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

Bueno, podría darte la solución pero creo que no es la idea no? ;D
Para empezar no uses tantas variables, utiliza una tupla o una lista.
Una vez tengas la lista, en pseudocodigo sería algo así.
CitarSe ingresa valor
Se toma primer item de la lista
Se divide valor por item
Si resultado >= 1, guardas parte entera del resultado por un lado, y sustituyes valor original por el resto
Pasas al siguiente item

Basicamente lo mismo que dice la letra :P

Saludos

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

leogtz

Una cosa más aparte de lo añadido por mi compañero.

Los nombres de las variables deben hacer alusión a su propósito. Tratar de omitir por ejemplo "a, b, c, d, e", resulta mejor:

moneda_1, moneda_2, etc.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Meta

Hola:

Lo he hecho así fijándome en el for con array. En este caso no es la idea aunque por fin funcione.

Código (python) [Seleccionar]

# 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


La idea es usar sólo IF- ELSE y nada de array como hice arriba ni tampoco usar While. ¿A qué ahora ya no es tan fácil?
El código será más largo y pesado, pero hay que aprender hacer las cosas complejas también.

Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

#4
Bue, yo tengo el mio :P
Código (python) [Seleccionar]
capital= int(input('Ingrese capital: '))
dinero = (500,200,100,50,20,10,5,2,1)
for i in dinero:
   tipo, plural = ' billete', ''
   temp = capital/i
   if temp >= 1:
       if i < 5: tipo = ' moneda'
       if int(temp) > 1: plural = 's'
       #-- Solo a efectos esteticos --
       
       print(str(int(temp))+' '+tipo+plural+' de '+str(i)+' euros')
       capital %= i


La idea es hacerlo solo con IF? Es que me resulta muy pesado :P
Y por cierto, no soy quien para juzgar a nadie, pero diciendo que ese código lo has hecho tu no haces más que engañarte a ti mismo ;)

Saludos
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

Meta

#5
No no lo he hecho yo.  Será que no aprendo ni a de tres. No es que estés juzgando, sólo opinando y tienes razón.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

Ya he visto el libro que estas leyendo, página 89 de 399 :P (del pdf) ... igual no creo que el problema sea con la dificultad, sino que es un poco de lógica :-\
Volviendo a tu problema original y el tema de los IF ... podrías hacer algo así ...
Código (python) [Seleccionar]
# 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

if E/a >= 1:
print "%d Billetes de 500" % (E / a)
E = E % a
if E/b >= 1:
print "%d Billetes de 200" % (E / b)
E = E % b
#...


El >=1 es para que no salga "0 Billetes de x"

Saludos
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

Canariolp21

#7
Buenas Noches compañeros:

Este es mi primer Post y espero que no sea el último, jejejeje.

Bueno este ejercicio lo he realizado de la siguiente manera para que le echen un vistazo.

Ya me contaran que tal les parece:

Código (python) [Seleccionar]
# -*- coding: ISO-8859-1 -*-
#         Codificacion de caracteres. Al tener el programa caracteres no ASCII
#         hace falta indicarle el tipo de codificacion empleado.
#Programa:   Ejercicio_01.py
#Proposito.- Programa que lee Numero Entero y lo descompone en los diferentes
#            Billetes y Monedas de Euros.
#Autor:      Luis Alberto Rouco Ramirez
#Fecha:      03 de Noviembre de 2010

# Importar librerias del sistema
import os

# Declarar variables e inicializarlas
sistema = (os.name)
contador=0

while True:
   
   try:
       
       if sistema=="nt":
           os.system("cls")
       else:
           os.system("clear")
           
       #Introduccion del Billete a descomprimir
       billetes=int(raw_input('Escribe una cantidad de Euros a descomponer: '))

       for des in [500,200,100,50,20,10,5,2,1]:
           division=billetes/des
           billetes=billetes%des
           if division!=0:
               if des>=5:
                   if division>1:
                       print '%d Billetes de' %division + '',des, 'Euros'
                   else:
                       print '%d Billete de' %division + '',des, 'Euros'
               else:
                   if division>1:
                       print '%d Monedas de' %division + '',des, 'Euros'
                   else:
                       if des>1:
                           print '%d Moneda de' %division + '',des, 'Euros'
                       else:
                           print '%d Moneda de' %division + '',des, 'Euro'
       raw_input()
       quit()
           
   except ValueError:
       for i in [1]:
           contador=contador+i
           #print 'Contador vale', contador
           if contador <3:
               print 'Debe introducir un numero entero.'
           else:
               print 'Eres bobo, que pasa que no viste Barrio Sesamo de pequenio...'
               raw_input()
               quit()
           break


Un saludo y hasta otra.

Meta

Hola:

Buen trabajo, está muy currado al detalle. Estás hecho un profesional. En mi caso estoy aprendiendo con un PDF de Python y de este mismo foro que me guían muy bien. Estoy haciendo recolector de códigos de Python gracias itra vez a este mismo foro. Toca aprender.

Un abrazo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Canariolp21

Wenas Meta:

Yo también estoy usando ese mismo PDF para aprender, es más ahora mismo voy por el tema del for in, y estoy haciendo esos ejercicios.

De momento me quedan 3 ejercicios por hacer que son los 2 del Maximo común divisor y el de el numero mas grande después de pulsar un número negativo.

Ya te contaré como voy, jejeje.

Si necesitas ayuda en python, yo todas las semanas aprendo algo nuevo así que si puedo ayudarte avisas compi.

Un Saludo.