Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: lDanny en 8 Octubre 2010, 18:04 pm



Título: [Python] Calculadora
Publicado por: lDanny en 8 Octubre 2010, 18:04 pm
Hola, acabo de empezar hace un par de dias y he hecho esta calculadora:
Tiene algunas limitaciones ya que tienes que meter una secuencia de operaciones
ejemplo:
1+2+3+4 , es por eso que solo acepta numeros de 1 digito, y ademas es con parentesis
1+2*(3+4) daria un mal resultado, para que te de bien tendrias q poner 1+(2*(3+4))
Bueno aqui pongo el codigo para que lo vean, Si ven que puese hacerse mejoras o hacer un codigo mas pequeño ps genial, me lo comentan para seguir aprendiendo.

Código
  1.  
  2. def calcula(a):
  3. total=int(a[0])
  4. i=1
  5. while (i<len(a)):
  6. if (a[i]=='+'):
  7. if (a[i+1]=='('):
  8. M=calcula(a[i+2:len(a)-1])
  9. total = total+ M[0]
  10. i+=M[1]
  11. else:
  12. total=total+int(a[i+1])
  13. i=i+1
  14. elif (a[i]=='-'):
  15. if (a[i+1]=='('):
  16. M=calcula(a[i+2:len(a)-1])
  17. total = total- M[0]
  18. i+=M[1]
  19. else:
  20. total=total-int(a[i+1])
  21. i=i+1
  22. elif (a[i]=='*'):
  23. if (a[i+1]=='('):
  24. M=calcula(a[i+2:len(a)-1])
  25. total = total*M[0]
  26. i+=M[1]
  27. else:
  28. total=total*int(a[i+1])
  29. i=i+1
  30. elif (a[i]=='/'):
  31. if (a[i+1]=='('):
  32. M=calcula(a[i+2:len(a)-1])
  33. total = total/M[0]
  34. i+=M[1]
  35. else:
  36. total=total/int(a[i+1])
  37. i=i+1
  38. elif (a[i]==')'):
  39. break
  40. i+=1
  41. return [total,i+2]
  42. opcion=0
  43. while opcion!=2:
  44. print 'Las opciones de la Calculador son: '
  45. print '1)Calcular la secuencia de datos'
  46. print '2)Salir'
  47. opcion=input('Escoga la opcion q desea:  ')
  48. if (opcion==2):
  49. break
  50. else:
  51. a = list (raw_input('Dame la secuencia:   '))
  52. print 'El resultado de la secuencia es:   ',calcula(a)[0]
  53. opcion=input('Si desea salir pulse 2 en caso contrario cualquier tecla:   ')
  54. print 'Gracias por usar la Calculadora lDanny :)'
  55.  


Título: Re: [Python] Calculadora
Publicado por: Novlucker en 8 Octubre 2010, 18:09 pm
Mucho más corta :D
Código
  1. opera = raw_input('Ingrese cantidad de divisores: ')
  2. print('Resultado: ' + str(eval(opera)))
Naaaa, es broma, el tuyo realmente revisa la operación y este otro se lo tira a python

Se me ocurre hacerlo con un diccionario en lugar de los IF :D

Saludos


Título: Re: [Python] Calculadora
Publicado por: lDanny en 8 Octubre 2010, 18:16 pm
Novlucker, jejeje es verdad es mas corta, la mia es mas larga xDDDDDD
Bueno lo he probado y es verdad que es buena, pero la verdad por lo que yo hice este code era por esto
5+3+4*3(2+3)+5
aunque mi code lo hace, pero para ello ahi que meter parentesis
Y lo de diccionario no lo he mirado todavía, lo mirare para que se me hagan mas cortos los programas
Gracias Novlucker


Título: Re: [Python] Calculadora
Publicado por: Novlucker en 8 Octubre 2010, 18:23 pm
Claro, eso si no lo hace python :D

Mira: http://foro.elhacker.net/net/calculadora_por_jerarquia_c-t262744.0.html

Creo que en realidad con eso te lo estoy empeorando, además de que el code esta en C#, pero si lo entiendes ligeramente (creo que no vas a tener problemas) puedes tomar nuevas ideas ;)

Saludos


Título: Re: [Python] Calculadora
Publicado por: lDanny en 8 Octubre 2010, 18:34 pm
Gracias, lo voy a mirar, aunque este calculadora recien lo hice hace 2 horas, solo queria hacer mi calculadora ya que veo, q varios novatos hacen una, solo q  queria hacerla un poco mejor xDDD
Ahora estoy resolviendo los ejercicios de project euler, tratare de mejorar la calculadora (cuando aprenda mas cosas) y cuando la tengo mejorada lo volvere a poner el code para que vena q tal.
Gracias por responder y por las ayudas.


Título: Re: [Python] Calculadora
Publicado por: lDanny en 9 Octubre 2010, 14:25 pm
Hola, aqui pongo el codigo de la calculadora pero mejorada, aunque sigue teniendo la limitacion de que es solo para numeros de 1 digito, Gracias Novlucker, por el link que me pasaste ya que en ese link se discutia como podria mejorarse la calculadora y pusieron una idea sobre una pila, y de ahi he mejorado mi funcion.
Usando la lista como pila, ya que lo ultimo que entra es lo primero en salir.
Bueno mi codigo, si ven que se puede mejorar diganlo me ayudaran a mejorar.

Código
  1.  
  2. def Calculadora(L):
  3. cal=0
  4. M=[]
  5. while (len(L)>0):
  6. total=len(L)
  7. if (L[total-1]==')'):
  8. L=L[:total-1]
  9. M=Calculadora(L)
  10. L=M[1]
  11. cal = cal+M[0]
  12. elif (L[total-1]=='+'):
  13. cal=cal+int(L[total-2])
  14. L=L[:total-2]
  15. elif (L[total-1]=='-'):
  16. cal=cal-int(L[total-2])
  17. L=L[:total-2]
  18. elif (L[total-1]=='*'):
  19. cal=cal*int(L[total-2])
  20. L=L[:total-2]
  21. elif (L[total-1]=='/'):
  22. cal=cal/int(L[total-2])
  23. L=L[:total-2]
  24. elif (L[total-1]=='('):
  25. L=L[:total-1]
  26. break
  27. else:
  28. cal=cal+int(L[total-1])
  29. L=L[:total-1]
  30. return [cal,L]
  31. opcion=0
  32. while opcion!=2:
  33. print 'Las opciones de la Calculador son: '
  34. print '1)Calcular la secuencia de datos'
  35. print '2)Salir'
  36. opcion=input('Escoga la opcion q desea:  ')
  37. if (opcion==2):
  38. break
  39. else:
  40. a = list (raw_input('Dame la secuencia:   '))
  41. print 'El resultado de la secuencia es:   ',Calculadora(a)[0]
  42. opcion=input('Si desea salir pulse 2 en caso contrario cualquier tecla:   ')
  43. print 'Gracias por usar la Calculadora lDanny :)'
  44.