2017-04-04 8 views
-1

최종 프로젝트를 수행하기 위해 Python을 배웠습니다. 나는 간단한 계산기를 시작했다. 코드가 거의 끝났지 만 오류가 있습니다.계산기에서 오류가 발생했습니다. TypeError : 'float'객체를 호출 할 수 없습니다.

프로그램은 나에게 좋은 결과를 제공하지만, 내가 다른 작업 프로그램을 수행 할 때 나에게이 문제를 제공합니다

TypeError: 'float' object is not callable

프로그램은 연산자를 선택하는 메뉴를 보여줍니다. 값이 기능 데프 numero1에 의해 숫자가()데프 numero2() 인 경우 그 후, 사용자는

당신이 내가 그것을 해결하는 데 도움이 될하시기 바랍니다 번호 1 및 번호 2와 검사의 값을 물어?

프로그램 코드는 다음과 같은 : 당신은 이름을 작동하는 동일한 변수 이름을 사용해서는 안

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 변수 이름과 함수 이름이 달라야한다는 것을 알지 못했습니다. 함수의 이름을 변경했습니다. numero1은 이제 n1이고 numero2는 이제 n2입니다. 하지만 난 아직도 왜 하나의 작업 후 기능이 inaccesible 모르겠어요 ... –