Aprendiendo Python ejercicio sobre desgloce de dinero con sentencia if [RESUELT]

Iniciado por jesslandero2, 22 Octubre 2017, 03:44 AM

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

jesslandero2

Hola buen dia

Hace unos dias empece aprender python, apenas voy en las primeras paginas de un par de libros, recien empiezo con las estructuras de control, en este caso con la sentencia IF. Bien el ejercicio en el que estoy es un scrip que pida un numero (dinero), el codigo tiene que hacer el desgloce de acuerdo al valor de algunos billetes y monedas, en este caso de billetes de 500, 200, 100, 50, 20, 10 y monedas de 5, 2, 1

Se que deben de haber varias formas para hacerlo, yo sin mucha experiencia en programacion se me ocurrio de esta manera:

Código (python) [Seleccionar]

#Este programa simula es desgloce de caja
#El usuario va a introducir una cantidad de dinero cualquiera, el desgloce se debe hacer
#con billetes de 500 200 100 50 20 10 y modenas de 5 y 2

#b500, b200, b100.... son los billetes y sus denominaciones
#m5, m2, m1... son las variables que representan monedas.

print(" C A J A ")
print(" ")

dinero=int(input("Entre la cantidad total de dinero: "))  #Leer la cantidad total de dinero


if dinero > 0 :
b500=dinero//500 #Se divide el total de dinero entre el billete mas alto
b200=(dinero%500)//200
b100=((dinero-(b500*500)-(b200*200))%200)//100  #apartir de aqui restare los billetes
b50=((dinero-(b500*500)-(b200*200)-(b100*100))%100)//50 #que ya desgloce para que con el
b20=((dinero-(b500*500)-(b200*200)-(b100*100)-(b50*50))%50)//20 #resto siga obteniendo
b10=((dinero-(b500*500)-(b200*200)-(b100*100)-(b50*50)-(b20*20))%20)//10 #valores
m5=((dinero-(b500*500)-(b200*200)-(b100*100)-(b50*50)-(b20*20)-(b10*10))%10)//5
m2=((dinero-(b500*500)-(b200*200)-(b100*100)-(b50*50)-(b20*20)-(b10*10)-(m5*5))%5)//2
m1=((dinero-b500-b200-b100-b50-b20-b10-m5-m2)%2)//1 #Todo lo que sobre seran las unidades

if b500>=1:
print("b500 ",b500)
if b200>=1:
print("b200 ",b200)
if b100>=1:
print("b100 ", b100)
if b50>=1:
print("b50 ", b50)
if b20>=1:
print("b20 ", b20)
if b10>=1:
print("b10 ", b10)
if m5>=1:
print("m5 ", m5)
if m2>=1:
print("m2 ", m2)
if m1>=1:
print("m1 ", m1)

if dinero < 0:
print("El numero tiene que ser positivo")

if dinero == 0:
print("El numero que escribio es CERO")



Me podrian compartir que tan bien o que tan mal esta mi codigo, o alguna otra forma de poder llegar al resultado.

Gracias.
"La física es el sistema operativo del Universo"

                                        Steven R Garman

engel lex

 vas bien, pero puedes ser màs eficiente y legible si haces

Código (python) [Seleccionar]
b500=dinero//500
dinero = dinero - b500
b200=dinero//200


así te ahorras instrucciones matemáticas y haces el código muchisimo más legible


los if sería mejor que fueran

Código (python) [Seleccionar]
if dinero > 0 :
  #codigo si es mayor que cero
elif dinero < 0:
  #codigo si es menor que cero
else:
  #si no cumple las condiciones anteriores


el //1 es innecesario (todo entre 1 es 1 y aquí solo manejas enteros


hay algunas cositas que podrìas hacer adicional para resumir el código, pero es manejo un poco más avanzado de strings
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jesslandero2

Gracias por lo de las sentencias ELIF

Tengo una duda con esto:
Citar
Citar
    b500=dinero//500
    dinero = dinero - b500
    b200=dinero//200

por ejemplo si mi total es 850 donde b500=1 luego en:
dinero=dinero-b500
quedaria:
dinero=850-1

solo se le restaria 1 no los 500 como tal, o lo estoy entendiendo mal??
"La física es el sistema operativo del Universo"

                                        Steven R Garman

engel lex

estás entendiéndolo bien! era para probarte (XD mentira XD me equivoqué yo)

Código (python) [Seleccionar]
    b500=dinero//500
    dinero = dinero*500 - b500
    b200=dinero//200

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jesslandero2

Disculpa pero:

Citar
b500=dinero//500
dinero = dinero*500 - b500
b200=dinero//200

con el ejemplo de dinero=850
seria dinero=850*500-1

no tendría por que multiplicar la variable inicial por el valor de 500
"La física es el sistema operativo del Universo"

                                        Steven R Garman

engel lex

XD sorry ando super distraido hoy


lo que tienes que restar del dinero es los billetes de 500 XD así que es la cantidad de billetes de 500 multiplicado por 500 (que es su valor)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jesslandero2

"La física es el sistema operativo del Universo"

                                        Steven R Garman

ak437

Cuales son los libros que utilizas? estoy interesado en aprender python y hay demasiada informacion que al principio marean un poco jaja