def sumar_digitos(xs): longitud = 0 suma = 0 for x in xs: if x.inf() < 10: longitud += 1 suma = suma * 10 + x.inf() elif x.inf() < 100: longitud += 2 suma = suma * 100 + x.inf() else: longitud += 3 suma = suma * 1000 + x.inf() return TNumero(suma / frac(10 ** longitud, 1))
def accion_sumar_final(lista): millones = lista[0] miles, decimales, unidad_de_medida, resto_todo_vacio = lista[1] algo_mas = lista[2] if millones is None and resto_todo_vacio and algo_mas == (): return unidad_de_medida elif millones is None: millones = TNumero(0) numero = millones + miles + decimales if algo_mas == ('medio',): numero = numero + TNumero(frac(1, 2)) return envolver(numero, unidad_de_medida)
def __init__(self, numero=None, pico=0, a=None, b=None, *args, **kwargs): "Representa un número inexacto con aritmética de intervalos." TerminoConstante.__init__(self, *args, **kwargs) if numero is not None: assert isinstance(numero, int) or \ isinstance(numero, long) or \ isinstance(numero, fractions.Fraction) assert a is None and b is None assert pico >= 0 if not isinstance(numero, fractions.Fraction): numero = frac(numero, 1) if pico == 0: a, b = numero, numero elif numero >= 0: a, b = numero, numero + pico else: a, b = numero - pico, numero else: assert a is not None and b is not None self._a, self._b = a, b