Как исправить эту ошибку возврата / глобальную ошибку? - PullRequest
0 голосов
/ 24 октября 2011
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 ]

4 голосов
/ 24 октября 2011

При вызове print в конце main вы ссылаетесь на переменную с именем value, которая не была определена в main. Отсюда и ошибка. Возможно, вы хотели сохранить значение, возвращаемое при вызове subtract:

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

Я должен признать, что найти ваш код немного сложно, не в последнюю очередь потому, что опубликованное вами сообщение об ошибке не совсем совпадает с отправленным вами кодом.


Я думаю, что ваше основное недоразумение касается того, как функции возвращают значения. Когда вы вызываете функцию, которая возвращает значение, вы должны присвоить это значение чему-либо в пространстве имен вызывающей области.

Итак, когда вы написали

subtract(dummy)

значение было возвращено, но из-за того, что вы никому его не присвоили, это значение было забыто.

Вместо этого вы должны присвоить его чему-то, чтобы использовать его

value = subtract(dummy)
0 голосов
/ 24 октября 2011

Вы получаете это, потому что вы ссылаетесь на переменную по имени (значению), которая не определена в области действия main (кстати, ваш опубликованный код не соответствует сообщению об ошибке - там нету value2;).

Так что либо делай

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)

Возвращение значения из функции просто возвращает простое значение, а не имя какой-либо переменной, определенной в этой функции.

0 голосов
/ 24 октября 2011

Строка return value в конце вашей функции subtract делает это значение доступным для вызывающей стороны, она волшебным образом не вводит его в пространство имен вызывающей стороны.

Попробуйте

value2 = subtract(dummy)

и иди оттуда ...

...