Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 3 Octubre 2010, 23:45 pm



Título: [python] Calcular billetes
Publicado por: Meta en 3 Octubre 2010, 23:45 pm
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
  1. # Introducir datos a la variable.
  2. E = int(raw_input('Ingresar Capital: '))
  3.  
  4. # Variables Billetes.
  5. a = 500
  6. b = 200
  7. c = 100
  8. d = 50
  9. e = 20
  10. f = 10
  11. g = 5
  12.  
  13. # Variables Monedas.
  14. h = 2
  15. i = 1
  16.  
  17. #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)
  18.  
  19. #print R
  20.  
  21. if (E / a) == 0:
  22.    a1 = E
  23.    print a1
  24. if (a1 / b) == 0:
  25.    a2 = a1
  26.    print a2
  27.  
  28.    etc.
  29.  
  30.  
  31. print '%d billetes de 500 €uros.' % a1
  32. print '%d billetes de 200 €uros.' % a2
  33. print '%d billetes de 100 €uros.' % a3
  34. print '%d billetes de 50 €uros.' % a4
  35. print '%d billetes de 20 €uros.' % a5
  36. print '%d billetes de 10 €uros.' % a6
  37. print '%d billetes de 5 €uros.' % a7
  38. print '%d monedas de 2 €uros.' % a8
  39. print '%d monedas de 1 €uros.' % a9
  40.  
  41.  


Título: Re: [python] Calcular billetes
Publicado por: Novlucker en 4 Octubre 2010, 03:47 am
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í.
Citar
Se 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



Título: Re: [python] Calcular billetes
Publicado por: leogtz en 4 Octubre 2010, 06:40 am
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.


Título: Re: [python] Calcular billetes
Publicado por: Meta en 4 Octubre 2010, 14:02 pm
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
  1. # Introducir datos a la variable.
  2. N = int(raw_input('Ingresar Capital: '))
  3.  
  4. # Variables Billetes.
  5. denominaciones = [500, 200, 100, 50, 20, 10, 5, 2, 1]
  6.  
  7. for denominacion in denominaciones:
  8.    print "%d Billetes de %d" % ((N / denominacion), denominacion)
  9.    N = N % denominacion
  10.  

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.


Título: Re: [python] Calcular billetes
Publicado por: Novlucker en 4 Octubre 2010, 14:07 pm
Bue, yo tengo el mio :P
Código
  1. capital= int(input('Ingrese capital: '))
  2. dinero = (500,200,100,50,20,10,5,2,1)
  3. for i in dinero:
  4.    tipo, plural = ' billete', ''
  5.    temp = capital/i
  6.    if temp >= 1:
  7.        if i < 5: tipo = ' moneda'
  8.        if int(temp) > 1: plural = 's'
  9.        #-- Solo a efectos esteticos --
  10.  
  11.        print(str(int(temp))+' '+tipo+plural+' de '+str(i)+' euros')
  12.        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


Título: Re: [python] Calcular billetes
Publicado por: Meta en 4 Octubre 2010, 14:28 pm
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.


Título: Re: [python] Calcular billetes
Publicado por: Novlucker en 4 Octubre 2010, 14:50 pm
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
  1. # Introducir datos a la variable.
  2. E = int(raw_input('Ingresar Capital: '))
  3.  
  4. # Variables Billetes.
  5. a = 500
  6. b = 200
  7. c = 100
  8. d = 50
  9. e = 20
  10. f = 10
  11. g = 5
  12.  
  13. if E/a >= 1:
  14. print "%d Billetes de 500" % (E / a)
  15. E = E % a
  16. if E/b >= 1:
  17. print "%d Billetes de 200" % (E / b)
  18. E = E % b
  19. #...

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

Saludos


Título: Re: [python] Calcular billetes
Publicado por: Canariolp21 en 5 Noviembre 2010, 04:27 am
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
  1. # -*- coding: ISO-8859-1 -*-
  2. #         Codificacion de caracteres. Al tener el programa caracteres no ASCII
  3. #         hace falta indicarle el tipo de codificacion empleado.
  4. #Programa:   Ejercicio_01.py
  5. #Proposito.- Programa que lee Numero Entero y lo descompone en los diferentes
  6. #            Billetes y Monedas de Euros.
  7. #Autor:      Luis Alberto Rouco Ramirez
  8. #Fecha:      03 de Noviembre de 2010
  9.  
  10. # Importar librerias del sistema
  11. import os
  12.  
  13. # Declarar variables e inicializarlas
  14. sistema = (os.name)
  15. contador=0
  16.  
  17. while True:
  18.  
  19.    try:
  20.  
  21.        if sistema=="nt":
  22.            os.system("cls")
  23.        else:
  24.            os.system("clear")
  25.  
  26.        #Introduccion del Billete a descomprimir
  27.        billetes=int(raw_input('Escribe una cantidad de Euros a descomponer: '))
  28.  
  29.        for des in [500,200,100,50,20,10,5,2,1]:
  30.            division=billetes/des
  31.            billetes=billetes%des
  32.            if division!=0:
  33.                if des>=5:
  34.                    if division>1:
  35.                        print '%d Billetes de' %division + '',des, 'Euros'
  36.                    else:
  37.                        print '%d Billete de' %division + '',des, 'Euros'
  38.                else:
  39.                    if division>1:
  40.                        print '%d Monedas de' %division + '',des, 'Euros'
  41.                    else:
  42.                        if des>1:
  43.                            print '%d Moneda de' %division + '',des, 'Euros'
  44.                        else:
  45.                            print '%d Moneda de' %division + '',des, 'Euro'
  46.        raw_input()
  47.        quit()
  48.  
  49.    except ValueError:
  50.        for i in [1]:
  51.            contador=contador+i
  52.            #print 'Contador vale', contador
  53.            if contador <3:
  54.                print 'Debe introducir un numero entero.'
  55.            else:
  56.                print 'Eres bobo, que pasa que no viste Barrio Sesamo de pequenio...'
  57.                raw_input()
  58.                quit()
  59.            break

Un saludo y hasta otra.


Título: Re: [python] Calcular billetes
Publicado por: Meta en 5 Noviembre 2010, 13:16 pm
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.


Título: Re: [python] Calcular billetes
Publicado por: Canariolp21 en 6 Noviembre 2010, 01:23 am
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.


Título: Re: [python] Calcular billetes
Publicado por: Meta en 6 Noviembre 2010, 02:31 am
Buena campeón:

Llevo un par de meses con Python día a día porque sino no aprendo. jejeje. Por supuesto que aceptaré ayudas.

Saludo.


Título: Re: [python] Calcular billetes
Publicado por: CIUDADANO Z en 11 Junio 2019, 11:28 am
Te tengo la solucion amigo, despues de revisar tu codigo me he dado cuenta de que tienes algunas cosas mal como por ejemplo pones variables que  no defines y mas cosas que te faltan como la division entera entre el numero exacto insertado y la cantidad de monedas y billetes, aqui te dejo como yo lo solucione gracias a parte de tu trabajo.

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.


Solucion. Este es el codigo correcto


def deglosar():
   t = int(input('Ingrese una cantidad de euros: '))
   a = 500
   b = 200
   c = 100
   d = 50
   e = 20
   f = 10
   g = 5
   h = 2
   i = 1

   a1 = t//a
   a2 = t//b
   a3 = t//c
   a4 = t//d
   a5 = t//e
   a6 = t//f
   a7 = t//g
   a8 = t//h
   a9 = t//i


   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)

deglosar()