[Python] Calculadora básica de consola

Iniciado por flacc, 23 Octubre 2012, 00:25 AM

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

flacc

Hola, esta es una calculadora que hice hace algún tiempo, y que creo les será útil a los que aprendan python sobre todo para aprender sobre string y listas, y a funciones, esta hecha bajo el paradigma estructurado estilo C, creo que se puede mejorar pero esta bien para que los que aprender python se entretengan un rato. Cabe decir que no soy un master en python y que con gusto aceptaré consultas y correcciones. La sintaxis puedes ser algo compleja para los que empiezan pero esta bastante comentada.
Espero le sirva a alguien. Saludos

Código (python) [Seleccionar]
#Programado por Mini_Nauta, protohey.blogspot.com
#Version 1.0
#Este software esta licenciado bajo GNU V3
#http://www.gnu.org/licenses/gpl-3.0.html
#El propósito de este software es aprender y deglosar el software

#Modulos ---------------------------------
import os

#Funciones ---------------------------------
def trozar_lista(lista, operador):
"""Didive la lista a partir del operador
ya sea +, -, /, * para procesar los valores.
Retorna una tupla con los valores de tipo matematico
en ambos lados de la expresion.
trozar_lista(list lista, str operador): return tuple(a, b)"""

#se dividen la lista de 2 trozos marcando como centro el operador
#el if corresponde a un parchepara cuando se ingresan 2 signos -
#este funciona mientras existan mas de 2 signos -, entonces al cortar
#con index el primer signo - que corresponde a un signo negativo y no de resta
#se corta el string a partir del segundo signo - que corresponde a la resta
if lista.count('-') > 1:
trozo_izquierda = ''.join( lista[0 : buscar(lista, 2, operador)] )
else:
trozo_izquierda = ''.join( lista[0 : lista.index(operador)] )
trozo_derecha = ''.join( lista[(lista.index(operador) + 1) : len(lista)] )

#tratado de numeros negativos
if '-' in trozo_izquierda:
#eliminacion de signo -
trozo_izquierda = float( trozo_izquierda[1:len(trozo_izquierda)] )
#conversion a negativo
trozo_izquierda = trozo_izquierda * -1

if '-' in trozo_derecha:
#eliminacion de signo -
trozo_derecha = float( trozo_derecha[1:len(trozo_derecha)] )
#conversion a negativo
trozo_derecha = trozo_derecha * -1

#conversion a float si fuera necesario
if type(trozo_izquierda) != float:
trozo_izquierda = float(trozo_izquierda)
if type(trozo_derecha) != float:
trozo_derecha = float(trozo_derecha)

#conversion a entero si fuese necesario
if (trozo_izquierda - int(trozo_izquierda)) == 0:
trozo_izquierda = int(trozo_izquierda)

if (trozo_derecha - int(trozo_derecha)) == 0:
trozo_derecha = int(trozo_derecha)

#retorno de los 2 trozos de la lista
return (trozo_izquierda, trozo_derecha)

def sumar(lista):
"""Operacion de suma."""
trozos = trozar_lista(lista, '+')
print trozos[0] + trozos[1]

def restar(lista):
"""Operacion de resta."""
trozos = trozar_lista(lista, '-')
print trozos[0] - trozos[1]

def dividir(lista):
"""Operacion de division."""
trozos = trozar_lista(lista, '/')
if(trozos[1] == 0):
               print "Math Error!"
       else:
               print trozos[0] / trozos[1]

def multiplicar(lista):
"""Operacion de multiplicar."""
trozos = trozar_lista(lista, '*')
print trozos[0] * trozos[1]

def Clear():
"""Limpia la consola."""
#windows
if os.name == "nt":
os.system("cls")
#unix
elif os.name == "posix":
os.system("clear")

def buscar(lista, index_num, to_index):
"""Busca el caracter indicado en una lista"""
a = 0
for i in lista:
if i == to_index:
a = a + 1
if a == index_num:
break
return a


#Programa ---------------------------------
#no se permiten operandos al principio
while(True):
#expresion a calcular
expresion = raw_input()

#mismo principio de las casio con el syntax error
if len(expresion) == 1:
if(expresion[0] == '+') or (expresion[0] == '-') or (expresion[0] == '/') or (expresion[0] == '*'):
print "Syntax error!"
else:
#in retorna true si encuentra lo que se busca en la lista

#no modificar orden de prescedencia de sentencias if-elif
#ya que estan en orden de prescedencia matematica para
#un correcto funcionamiento logico del programa.
#division
try:
if '/' in expresion:
dividir(expresion)
#multiplicacion
elif '*' in expresion:
multiplicar(expresion)
#suma
elif '+' in expresion:
sumar(expresion)
#resta
elif '-' in expresion:
restar(expresion)
#ayuda
elif ''.join(expresion) == "help":
Clear()
print "Basic Calculator by Mini_Nauta 1.0\n"
print "clear: clean the screen"
print "quit: close the calculator"
print "help: show the help menu"
#borrar pantalla
elif ''.join(expresion) == "clear":
Clear()
#salir
elif ''.join(expresion) == "quit":
break
else:
print "Invalid operation. You can write help for help menu!"
except:
print "Syntax Error!"