2017-04-04 35 views
-1

最終プロジェクトを行うためにPythonを学んでいます。私は簡単な電卓を始めました。コードはほぼ終了しましたが、エラーがあります。電卓のエラー:TypeError: 'float'オブジェクトが呼び出せません

プログラムは私が罰金結果与えるが、私は別の動作プログラムを実行しようとするときは、私にこの問題を与える:

TypeError: 'float' object is not callable

プログラムは、演算子を選択するメニューが表示されます。その後、)ユーザーに値が関数によってデフnumero1(番号であれば数値1と数値2とチェックの価値を尋ねデフ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が永続的に浮動小数点数になり、関数オブジェクトにアクセスできなくなります。

変数名をnumero1またはnumero2に変更しないでください。

+0

ありがとうございます!それは働いている:D私は変数の名前と関数の名前が異なる必要があることを知っていませんでした。私は関数の名前を変更しましたnum0現在はn1でnum0は現在n2です。しかし、私はまだ機能が1つの操作の後に不可能である理由を知りません... –

関連する問題