2017-04-04 34 views
-1

我學習Python來完成我的最終項目。我已經開始做一個簡單的計算器。代碼幾乎完成,但我有一個錯誤。計算器中的錯誤:TypeError:'float'對象不可調用

計劃給我造成很好,但是當我嘗試做其他操作計劃給了我這個問題:

TypeError: 'float' object is not callable

計劃顯示菜單選擇操作。在此之後,詢問用戶數字1和數字2和檢查的值,如果值是一個數字由功能高清numero1()高清numero2()

請你能幫助我解決這個問題?

程序代碼如下:

import os #Importamos librerias que se usan en el programa 
import sys 
import time 

def menu(): #Funcion para crear el menu 
    os.system('cls') 
    print ("********** Menu de la calculadora **********") 
    print ("\t1 - Sumar") 
    print ("\t2 - Restar") 
    print ("\t3 - Multiplicar") 
    print ("\t4 - Dividir") 
    print ("\t9 - Salir") 

def numero1(): #Funcion para introduir un numero como primer valor 
    while True: 
     try: 
      numero1 = float(input("Inserta el primer valor: ")) 
     except ValueError: 
      print("Introduce un número") 
     else: 
      return numero1 

def numero2(): #Funcion para introducir un numero como segundo valor 
    while True: 
     try: 
      numero2 = float(input("Inserta el segundo valor: ")) 
     except ValueError: 
      print("Introduce un número") 
     else: 
      return numero2 

#Definimos 2 variables que vamos a usar 
operador = 0 
i = 1 

#Mientas que la variable i sea mayor que cero se ejecuta el bucle (SIEMPRE) 
while i > 0 : 
    # Mostramos el menu 
    menu() 
    #Preguntamos que operacion quiere realizar 
    operador = input("¿Que operación quieres realizar?: ") 
    while operador != "1" and operador != "2" and operador != "3" and operador != "4" and operador != "9": 
     os.system('cls') 
     menu() 
     print("Introduce un operador correcto") 
     operador = input("¿Que operación quieres realizar?: ") 

    if operador == "9": #Si es 9 cerramos el programa 
     os.system('cls') 
     print("SALIENDO.") 
     time.sleep(1) 
     os.system('cls') 
     print("SALIENDO..") 
     time.sleep(1) 
     os.system('cls') 
     print("SALIENDO...") 
     time.sleep(1) 
     sys.exit() 


    #Realizamos una operacion u otra 
    if operador == "1": 
     numero1 = numero1() 
     numero2 = numero2() 
     resultado = numero1 + numero2   
    elif operador == "2": 
     numero1 = numero1() 
     numero2 = numero2() 
     resultado = numero1 - numero2  
    elif operador == "3": 
     numero1 = numero1() 
     numero2 = numero2() 
     resultado = numero1 * numero2 
    elif operador == "4": 
     numero1 = numero1() 
     numero2 = numero2() 
     resultado = numero1/numero2  

    #Mostramos el resultado en pantalla y preguntamos si realizamos otra operación  
    print("El resultado es: ",resultado) 
    salir =(input("Pulsa cualquier tecla para realizar otra operación o 9 para salir...")) 
    if salir == "9": 
     os.system('cls') 
     print("SALIENDO.") 
     time.sleep(1) 
     os.system('cls') 
     print("SALIENDO..") 
     time.sleep(1) 
     os.system('cls') 
     print("SALIENDO...") 
     time.sleep(1) 
     sys.exit() 
+0

請完整回溯,並嘗試打印'type(float)',您可能已經通過別的東西遮蔽了該類型。 –

+0

當你檢查operador是否等於「1」,「2」,「3」或「4」時,你不必要地在每種情況下重複相同的代碼行。只需將它們放在該部分的第一個「if」語句之上,以提高代碼的清晰度。 –

回答

1

你不應該使用的變量名是相同的函數名。一個會覆蓋另一個。如果您執行numero1 = numero1(),那麼該範圍內的numero1將永久變爲浮點數,並且該函數對象將不再可訪問。

更改變量名稱,以便它們都不是numero1numero2

+0

哦,謝謝你!這是工作:D我不知道變量的名稱和函數的名稱必須不同。我已經改變了函數numero1的名字,現在是n1,而numero2現在是n2。但是我仍然不知道爲什麼在一次手術後這些功能是不可能的。 –

相關問題