如何修复此返回/全局错误?

时间:2011-10-24 14:39:10

标签: python global

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()

当我输入一个像123这样的数字时,我得到:

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
>>> 

我不知道为什么我得到这个,因为我的第一个函数只在if语句为真且在if语句中返回返回值时运行。

3 个答案:

答案 0 :(得分:4)

print末尾的main调用中,您引用了一个名为value的变量,该变量尚未在main中定义。因此错误。也许您打算保留从subtract

的调用返回的值
value = subtract(dummy)
print('The value ... is', value)

我必须承认找到您的代码有点难以理解,尤其是因为您发布的错误消息与您发布的代码不完全匹配。


我认为你的基本误解涉及函数如何返回值。当您调用返回值的函数时,必须将该值赋给调用作用域命名空间中的某些内容。

所以当你写了

subtract(dummy)

返回了一个值但由于您没有将其分配给任何内容,因此忘记了该值。

相反,你必须将它分配给某些东西才能使用它

value = subtract(dummy)

答案 1 :(得分:0)

函数return value末尾的行subtract使该值可用给调用者,它不会奇怪地将其注入调用者的名称空间。

尝试

value2 = subtract(dummy)

从那里开始......

答案 2 :(得分:0)

你得到这个是因为你指的是一个未在main范围内定义的名称(值)的变量(顺便说一句。你发布的代码与错误信息不匹配 - 那里没有值2)。< / p>

所以要么

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

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

从函数返回值只返回普通值,而不是该函数中定义的任何变量的名称。