2011-10-24 4 views
0
def subtract(num): 
    string = str(num) 
    a = string[0] 
    b = string[1] 
    c = string[2] 
    large = max(a, b, c) 
    small = min(a,b,c) 
    summation = int(a) + int(b) + int(c) 
    mid = summation - int(large) - int(small) 
    mid2 = str(mid) 
    ascend = large + mid2 + small 
    descend = small + mid2 + large 
    print('The digits in ascending order are', ascend) 
    print('The digits in descending order are', descend) 
    value = int(descend) - int(ascend) 
    return value 
def main(): 
    dummy = input('Type a three digit integer, please.\n') 
    if not len(dummy) == 3: 
     print('Error!') 
     main() 
    elif not dummy.isdigit(): 
     print('Error!') 
     main() 
    if len(dummy) == 3 and dummy.isdigit(): 
     subtract(dummy) 
     print('The value of the digits in descending order minus the digits in ascending order is', value) 
main() 

Quand je nombre aa d'entrée comme 123, je reçois:Comment corriger ce retour/erreur globale?

Type a three digit integer, please. 
123 
The digits in ascending order are 321 
The digits in descending order are 123 
Traceback (most recent call last): 
File "/Users/philvollman/Documents/NYU/Freshman /Fall Semester/Intro to Computer Programming/Assignments/Homework5PartA.py", line 29, in <module> 
main() 
File "/Users/philvollman/Documents/NYU/Freshman /Fall Semester/Intro to Computer Programming/Assignments/Homework5PartA.py", line 28, in main 
print('The value of the digits in descending order minus the digits in ascending order is', value2) 
NameError: global name 'value2' is not defined 
>>> 

Je ne sais pas pourquoi je reçois ce parce que ma première fonction ne fonctionne que si l'instruction if sont vraies et la valeur retournée doit être retourné dans l'instruction if.

+0

Le code que vous avez collé n'a pas de valeur2, donc je vais dire que ce code n'est pas identique au code que vous utilisez actuellement. – Useless

Répondre

4

Dans l'appel à print à la fin de main vous faites référence à une variable nommée value qui n'a pas été défini dans main. D'où l'erreur. Peut-être que vous vouliez dire de conserver la valeur retournée par l'appel à subtract:

value = subtract(dummy) 
print('The value ... is', value) 

Je dois admettre que de trouver votre code un peu difficile à suivre, notamment parce que le message d'erreur que vous avez affichée ne correspond pas tout à fait le code affiché . Je pense que votre incompréhension de base concerne la façon dont les fonctions renvoient des valeurs. Lorsque vous appelez une fonction qui renvoie une valeur, vous devez affecter cette valeur à quelque chose dans l'espace de noms de l'étendue appelante.

Alors, quand vous avez écrit

subtract(dummy) 

une valeur a été retournée, mais parce que vous n'avez pas affecté à quoi que ce soit, cette valeur a été oublié.

Au lieu de cela, vous devez l'attribuer à quelque chose pour l'utiliser

value = subtract(dummy) 
+0

Merci! (Ce sont les erreurs stupides que je fais ...>. <) –

0

La ligne return value à la fin de votre fonction subtract rend cette valeur disponible à l'appelant, il ne s'injectent pas comme par magie dans l'espace de noms de l'appelant.

Essayez

value2 = subtract(dummy) 

et aller de là ...

0

Vous obtenez ceci parce que vous faites référence à une variable par nom (valeur) qui est pas définie dans le champ d'application principal (BTW votre code posté ne correspond pas au message d'erreur - il n'y a pas de valeur2 ici;).

Alors, soit faire

print('The value of the digits in descending order minus the digits in ascending order is', subtract(dummy)) 

ou

value = subtract(dummy) 
print('The value of the digits in descending order minus the digits in ascending order is', value) 

De retour d'une valeur d'une fonction retourne juste la valeur simple, pas le nom d'une variable définie dans cette fonction.