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语句中返回返回值时运行。
答案 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)
从函数返回值只返回普通值,而不是该函数中定义的任何变量的名称。