Mi primer programita: modenas.py

Chema Cortés py en ch3m4.org
Vie Oct 8 10:06:48 CEST 2004


On Friday 08 October 2004 08:53, david _ wrote:

> Abajo pongo el codigo. Me gustaria saber si la utilizacion de
> diccionarios es correcta, asi como si alguien me podria proporcionar
> otra forma alternativa de hacerlo.

Los diccionarios están bien, pero ya que la clave 
("quinientos","doscientos",...) luego no aparecen en el resultado, casi sería 
mejor que usaras como clave el valor monetario (500,200,...), así, como 
números enteros, y el código se simplificará bastante.

> El codigo que he escrito es el siguiente:
>
> # Programa Monedas.py
>
> # Solicito una cantidad
> # con la funcion 'int' la paso a enteros
>
> valor = int( raw_input("Euros: "))
>
> # Me creo un Diccionario con todas las monedas
> monedas = {"quinientos":0, "doscientos":0, "cien":0, "cincuenta":0,
> "veinte":0, "diez":0, "cinco":0}
>
> # Imprimo la Cantidad a pagar
> print 'Pagar: %s' % valor
>
> # Billetes de 500
> miv = 500
> if valor >= miv:
>     quinientos = valor / miv
>     valor = valor - quinientos * miv
>     monedas["quinientos"] = quinientos

Esta estructura la estás repitiendo para cada valor, por lo que es una buena 
candidata para pasar a ser una función.

Al calcular el resto, emplea mejor el operador módulo '%'. Incluso mejor, 
emplea la función divmod y se quedaría todo en:

   monedas[miv],valor=divmod(valor,miv)

>
> #Billetes de 200
> miv = 200
> if valor >= miv:
>     doscientos = valor / miv
>     valor = valor - doscientos * miv
>     monedas["doscientos"] = doscientos
>
> #Billetes de 100
> miv = 100
> if valor >= miv:
>     cien = valor / miv
>     valor = valor - cien * miv
>     monedas["cien"] = cien
>
> # Billetes de 50
> miv = 50
> if valor >= miv:
>     cincuenta = valor / miv
>     valor = valor - cincuenta * miv
>     monedas["cincuenta"] = cincuenta
>
> # Billetes de 20
> miv = 20
> if valor >= miv:
>     cincuenta = valor / miv
>     valor = valor - cincuenta * miv
>     monedas["veinte"] = cincuenta
>
> # Billetes de 10
> miv = 10
> if valor >= miv:
>     cincuenta = valor / miv
>     valor = valor - cincuenta * miv
>     monedas["diez"] = cincuenta
>
> # Billetes de 5
> miv = 5
> if valor >= miv:
>     cincuenta = valor / miv
>     valor = valor - cincuenta * miv
>     monedas["cinco"] = cincuenta
>
> # Ahora imprimo el resultado
> print '%s de 500 €' % monedas["quinientos"]

No está mal, aunque en lugar de %s deberías haber usado %d. También se podría 
haber usado la cadena de formatos para diccionarios:

print '%(quinientos)s de 500 €' % monedas

> print '%s de 200 €"' % monedas["doscientos"]
> print '%s de 100 €' % monedas["cien"]
> print '%s de 50 €' % monedas["cincuenta"]
> print '%s de 20 €"' % monedas["veinte"]
> print '%s de 10 €' % monedas["diez"]
> print '%s de 5 €"' % monedas["cinco"]
> # Imprimo el resto de monedas
> print '%s de calderilla' % str(valor)


Ya que pides una forma alternativa, te la pongo a continuación. No te asustes 
si no la entiendes (resulta poco didáctica):

billetes=(500, 200, 100, 50, 20, 10, 5)
monedas={}
valor = int( raw_input("Euros: "))

for b in billetes:
  monedas[b],valor=divmod(valor,b)
else:
  monedas["calderilla"]=valor

for b in billetes:
  if monedas[b]>0:
    print '%d de %d' % (monedas[b],b)
else:
  print '%d de calderilla' % monedas["calderilla"]
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: application/pgp-signature
Size: 189 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20041008/5051a14a/attachment.pgp>
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es