2010-10-20 6 views
1
keepProgramRunning = True 

while keepProgramRunning: 
    print "Welcome to the Calculator!" 
    print "Please choose what you'd like to do:" 

    print "0: Addition" 
    print "1: Subtraction" 
    print "2: Multiplication" 
    print "3: Division"  


    #Capture the menu choice. 
    choice = raw_input() 

    #Capture the numbers you want to work with. 
    numberA = raw_input("Enter your first number: ") 
    numberB = raw_input("Enter your second number: ") 

    if choice == "0": 
     print "Your result is:" 
     print Addition(numberA, numberB) 
    elif choice == "1": 
     print "Your result is:" 
     print Subtraction(numberA, numberB) 
    elif choice == "2": 
     print "Your result is:" 
     print Multiplication(numberA, numberB) 
    elif choice == "3": 
     print "Your result is:" 
     print Division(numberA, numberB) 
    else: 
     print "Please choose a valid option." 



def Addition(a, b): 
    return a + b 

def Subtraction(a, b): 
    return a - b 

def Multiplication(a, b): 
    return a * b 

def Division(a, b): 
    return a/b 

Voici l'erreur:ne se trouve pas dans mon application Python

Traceback (most recent call last): 
    File "C:\Users\Sergio.Tapia\Documents\NetBeansProjects\Tutorials\src\tutorials.py", line 23, in <module> 
    print Addition(numberA, numberB) 
NameError: name 'Addition' is not defined 

Merci pour l'aide!

Ps. Je réalise que la boucle ne se terminera jamais, je n'ai pas encore ajouté l'option de menu. : P

Répondre

4

ReOrder votre code, de sorte que les fonctions seront définies avant qu'ils ne soient utilisés:

def Addition(a, b): 
    return a + b 

def Subtraction(a, b): 
    return a - b 

def Multiplication(a, b): 
    return a * b 

def Division(a, b): 
    return a/b 

keepProgramRunning = True 

while keepProgramRunning: 
    print "Welcome to the Calculator!" 
    print "Please choose what you'd like to do:" 

    print "0: Addition" 
    print "1: Subtraction" 
    print "2: Multiplication" 
    print "3: Division"     


    #Capture the menu choice. 
    choice = raw_input() 

    #Capture the numbers you want to work with. 
    numberA = raw_input("Enter your first number: ") 
    numberB = raw_input("Enter your second number: ") 

    if choice == "0": 
        print "Your result is:" 
        print Addition(numberA, numberB) 
    elif choice == "1": 
        print "Your result is:" 
        print Subtraction(numberA, numberB) 
    elif choice == "2": 
        print "Your result is:" 
        print Multiplication(numberA, numberB) 
    elif choice == "3": 
        print "Your result is:" 
        print Division(numberA, numberB) 
    else: 
        print "Please choose a valid option." 

Vous pouvez également utiliser la fonction main() pour le maintenir au-dessus de tout:

def main(): 
    keepProgramRunning = True 

    while keepProgramRunning: 
        print "Welcome to the Calculator!" 
     print "Please choose what you'd like to do:" 

        print "0: Addition" 
        print "1: Subtraction" 
        print "2: Multiplication" 
     print "3: Division"     


        #Capture the menu choice. 
     choice = raw_input() 

        #Capture the numbers you want to work with. 
        numberA = raw_input("Enter your first number: ") 
     numberB = raw_input("Enter your second number: ") 

        if choice == "0": 
            print "Your result is:" 
         print Addition(numberA, numberB) 
        elif choice == "1": 
            print "Your result is:" 
         print Subtraction(numberA, numberB) 
        elif choice == "2": 
            print "Your result is:" 
         print Multiplication(numberA, numberB) 
        elif choice == "3": 
            print "Your result is:" 
         print Division(numberA, numberB) 
        else: 
            print "Please choose a valid option." 

def Addition(a, b): 
    return a + b 

def Subtraction(a, b): 
    return a - b 

def Multiplication(a, b): 
    return a * b 

def Division(a, b): 
    return a/b 

if __name__ == '__main__': 
    main() 
+0

Je n'oublie pas que python est interprété et non compilé! Merci pour l'aide. :) –

+1

@Sergio Tapia: en fait Python est compilé en bytecode (similaire à Java/C#), et toutes les fonctions seraient déjà compilées avant le démarrage du programme, cependant la sémantique de la compilation est tardive (contrairement à Java/C#), et les objets de fonctions ne sont affectés à un nom pouvant être appelé que lorsque l'instruction def est exécutée (en Java/C#, les appels de fonctions sont résolus au moment de la compilation). –

+1

@Sergio: Même les langages compilés (C au moins) se plaindront si vous utilisez une fonction avant de l'avoir déclarée. –

8

Vous devez définir vos fonctions avant de les appeler.

Lorsque l'interpréteur lit la ligne où Addition() est appelé, il n'a pas encore atteint la ligne où Addition() sera défini. Il lance donc une exception.

1

Pour que cela fonctionne, vous devez avoir une définition d'Addition disponible au moment où l'exécution en a besoin. L'one-way est de placer vos définitions d'addition plus haut dans le dossier.

Une autre façon est tout simplement d'utiliser l'opérateur directement:

# was: print Addition(numberA, numberB) 
print numberA + numberB 

Une troisième voie est d'utiliser les fonctions du module opérateur:

import operator 
# ... 
print operator.add(numberA, numberB) 
+1

+1 pour 'operator' – Daenyth

+0

mis à jour pour être moins obtus sur l'endroit où définir vos fonctions – ianmclaury

1

Vous devez définir vos fonctions avant de les appeler . Les définitions de fonctions sont des instructions exécutables en Python et à cause de votre boucle infinie, elles n'ont pas de chance d'être définies.

Vous devez déplacer les quatre définitions au-dessus de la boucle et cette erreur disparaîtra. Sur une note plus stylistique, vous devriez structurer votre module d'une manière qui soit importable plutôt que simplement exécutable. L'astuce __name__ == "__main__" que les programmes Python utilisent est la manière canonique et this article par le fondateur de la langue offre quelques idées sur la façon de le construire correctement.

Questions connexes