Notación de ingeniería en python

Notación De Ingeniería En Python

Sí has estado leyendo mi blog sabrás que actualmente me encuentro estudiando ingeniería y que me gustan las calculadoras mi favorita la CASIO fx-CG50, esta calculadora cuenta con un intérprete de micro-python bastante limitado, pero con un poco de cabeza podemos explotar su máximo potencial.

Código

Antecedente

La notación de ingeniería es una forma de abreviar números muy grandes, es parecida a la notación científica, pero su característica más notable es que usa letras para representar valores.

Mi solucion

Lookup table

La solucion más sencilla para los problemas es por lo general la mejor solucion y en este caso no fue la exepcion, una lookup-table para almacenar los exponentes es mas que suficiente:

_suffix_lookup = {
    'T': 1e12,
    'G': 1e9,
    'M': 1e6,
    'k': 1e3,
     '': 1e0,
    'm': 1e-3,
    'u': 1e-6,
    'n': 1e-9,
    'p': 1e-12,
    'f': 1e-15,
    'a': 1e-18,
}

Captura del numero

La solución más sencilla para los problemas es por lo general la mejor solución y en este caso no fue la excepción, una lookup-table para almacenar los exponentes es más que suficiente:

Sencilla

Solución con redundancia mínima, es más sencilla pero menos robusta:


def input_ing2():
    x = input().split();
    if len(x) > 0:
	if len(x) > 1 and x[1] in _suffix_lookup:
	    return float(x[0]) * _suffix_lookup[x[1]]
	else:
	    return float(x[0])
    else:
	return None

óptima

Solución óptima (en mi opinión), más compleja pero es más robusta


def input_ing(message=""):
    x = input(message).split();
    try:
        if len(x) > 0:
            if len(x) > 1 and x[1] in _suffix_lookup:
                return float(x[0]) * _suffix_lookup[x[1]]
            else:
                return float(x[0])
    except ValueError:
        print((
            "El valor ingresado\n"
            "no es valido, ej:\n"
            "       10 M \n"
            "debe llevar espacio"
        ))
        input()
    return None