Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

196
Vistas
¿Cómo escribir una función que tenga 2 funciones anidadas dentro y permita calcular la suma / diferencia para cualquier número de elementos dados?

Tengo que escribir una función que tenga 2 funciones anidadas dentro y calcule solo la suma o la diferencia de tantos números como queramos. Cada ecuación termina con "=". Escribí algo así pero todavía no funciona. ¿Que estoy haciendo mal?

 def calculator(x: int): def operation(operator: str): def calculation(y: int): while operator != "=": if operators[i] == "=": result -= digits[j] elif operators[i] == "+": result += digits[j] else: break return result return operator return calculator(result)

La función debería funcionar así:

 calculator(1)('+')(4)('-')(2)('=')

El resultado es 3. No puedo usar ninguna importación de paquetes o variables globales.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

También puede usar un diccionario para definir sus operaciones y hacer una función muy legible y simple con espacio para expansión:

 def calc(a: int): return lambda op: { '+': lambda b: calc(a+b), '-': lambda b: calc(ab), '/': lambda b: calc(a/b), '*': lambda b: calc(a*b), }.get(op, a) print(calc(2)('+')(3)('-')(10)('/')(10)('*')(-100)('='))
over 4 years ago · Santiago Trujillo Denunciar

0

Deduciendo de la forma de la entrada, debe devolver "funciones" cada vez. Una forma de hacerlo es usar lambda :

 def calculator(x: int): def operation(op: str, x: int): if op == '=': return x else: return lambda _: calculation(_, op, x) def calculation(y: int, op: str, x: int): if op == '+': return lambda _: operation(_, x + y) else: return lambda _: operation(_, x - y) # mind the order of x & y return lambda _: operation(_, x) print(calculator(1)('+')(4)('-')(2)('=')) # 3 print(calculator(3)('-')(10)('+')(6)('=')) # -1

Por ejemplo, considere calculator(1)('+')(4)('-')(2)('=') . La primera parte calculator(1)('+') significa que calculator(1) en sí misma es una función, que luego se aplica con un argumento ('+') . Entonces la calculator(x) necesita devolver una operation de función.

También es posible que desee registrar el resultado ( 1 en este caso), pasándolo a operation ; es por eso que agregué un parámetro x (que significa el resultado actual) a la operation . Luego usé lambda x: operation(_, x) para devolver una "función parcial".

Por el mismo razonamiento, operation devuelve calculation , que a su vez devuelve operation y así sucesivamente, hasta que se da operation con '=' .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda