0

Estoy tratando de hacer una función que redondee el resultado de x operación matemática, pero tengo un error de sintaxis que no logro entender

def calculo():
operacion = int(input('realiza una operacion matematica aquí')
if operacion == float:
    round(operacion)
    print(operacion)

print(operacion)

Los dos puntos luego de "float" están resaltado en rojo

Gianna Cardenas
  • 21
  • 1
  • 2
  • 3
  • ¿por qué tratas de convertir una cadena de texto a un entero?, pues veo que pasas lo que esta escrito en el `input` a la función `int` – BetaM Jul 28 '19 at 17:33
  • 2
    Te falta cerrar un un paréntesis en la linea anterior: `operacion = int(input('realiza una operacion matematica aquí')) `. de todas formas que prendes hacer con `if operacion == float:`? `operacion` es siempre un entero y si no has sobreescrito `float`, es una función builtin. Si intentas comparar si `operación` es un `float` lo haces mal (`isinstance()` sería lo apropiado). ¿ `operacion` se supone que es un escalar (float, int, etc) o una cadena representando uno? – FJSevilla Jul 28 '19 at 17:33
  • 2
    @FJSevilla también pareciera haber detalles de indentación con el código no?, además me queda la duda ¿en la última línea debería invocar el nombre de la función no? – BetaM Jul 28 '19 at 17:36
  • 2
    @Aprendiz si, todas las lineas bajo el def deben tener un nivel más de identación, aunque supongo que es producto de copiarlo aquí, porque si lo tuviera así le produciría un IndentationError, no un error de sintaxis. – FJSevilla Jul 28 '19 at 17:38
  • @Gianna el error que presentas como tal es simplemente un error tipográfico como he comentado antes. No obstante el código que muestras tiene más problemas como se ha mencionado. `input` en Python 3 retorna una cadena. Si pretendes que el intérprete evalúe una expresión debes usar `eval`: [Diferencia entre input() y raw_input()](https://es.stackoverflow.com/a/38303/15089). Aún así, el casting a `int` sobraría porque esto siempre truncaría el resultado. Además no se comprueba si un objeto es un float como haces tu en el condicional. Intenta explicar mejor que quieres hacer. – FJSevilla Jul 28 '19 at 17:50
  • Estás comparando un valor entero contra un tipo de dato, lo que siempre será falso. No tiene lógica. – Candid Moe Jul 31 '21 at 15:10

1 Answers1

3

Lo primero que cabe destacar es que la identacion de tu código no esta bien. Es decir, la identacion en python es como los corchetes {} de otros lenguajes, y ahora mismo python interpreta que la función no tiene nada dentro.

El segundo error es que estas comparando un numero concreto con un tipo de dato básico, como es el float.

Después hay que destacar que no guardas en ningún sitio el resultado de redondear operación. También te hace falta llamar al método, sino, tu programa no haría nada.

Un código correcto seria este:

def calculo():
    #Pedimos valores
    numero1 = float(input("Dame un numero: "))
    numero2 = float(input("Dame otro numero: "))

    #Efectuamos una operacion
    operacion = float(numero1 / numero2)

    #Redondeamos a 3 decimales
    operacion = round(operacion, 3)

    #Imprimimos la operacion
    print(operacion)

#Llamamos a la funcion
calculo()
BetaM
  • 30,571
  • 7
  • 32
  • 50
RuDaHee
  • 612
  • 1
  • 4
  • 20
  • Si me apuras incluso te diria de sustituir el ultimo `print(operacion)` por un `return operacion` y así poder aprovechar de forma más cómoda el resultado de la función. @Gianna ese cambio significa que si ejecutas la función en el terminal te aparece el resultado como texto igualmente, pero tambien puedes asignar el resultado de la funcion a una variable si te hiciera falta, por ejemplo `resultado = calculo()` o incluso `print(calculo())` si quieres formatear el texto, etc... – Jose Rodriguez Jul 29 '19 at 08:44