Переменные a, b, c и n, которые вы получаете как входные данные в input_fermat()
, доступны только в теле этой функции;как только вы вернетесь, вы выйдете из области действия input_fermat()
, и значения в a, b, c и n будут переданы любым переменным, которые вы назвали input_fermat()
для назначения.
Область действия функции означает, что единственными переменными, доступными в любой данной функции, являются
- те, которые объявлены в теле функции
- те, которые переданы функции в качестве аргументов в скобках.
- переменные, объявленные глобально
В check_fermat()
это означает, что вы можете повторно использовать переменные a, b, c и для чего-то другого, кроме ввода, если хотите (потому что aновая функция означает новую область видимости).
Но в приведенном ниже коде мы решили, что a, b, c и n в check_fermat()
будут такими же, как a, b, c и d в input_fermat()
с объявлениемa,b,c,n = input_fermat()
.Это решение, которое мы решили принять;это произвольно.
Вот отредактированная версия вашей функции, которая выполняет то, для чего, я думаю, вы шли:
#Global variables would be declared up here, before all other function declarations.
#Global variables would be available to all the functions that follow.
def input_fermat(): #if there were arguments in these parentheses they'd be included in input_fermat scope
# input_fermat() scope begins
a=int(input('Enter the first variable \'a\': \n'))
b=int(input('Enter the second variable \'b\': \n'))
c=int(input('Enter the third variable \'c\': \n'))
n=int(input('Enter the exponential variable \'n\': \n'))
return a, b, c, n
#input_fermat() scope ends
def check_fermat(): #if there were arguments in these parentheses they'd be included in check_fermat scope
#check_fermat() scope begins
#just as you returned 4 variables at once in input_fermat(), 4 variables can be assigned at once here
a,b,c,n = input_fermat() #need to assign because a, b, c, n from input_fermat() no longer in scope
calc_1=a**n
calc_2=b**n
calc_3=c**n
if n>2 and int(calc_1) + int(calc_2) == calc_3:
print('Holy smokes, Fermat was wrong!')
else:
print('No that doesn\'t')
#python implicitly does a `return None` here
#check_fermat() scope ends
check_fermat()
Обратите внимание, что из-за областей действия этих функций я мог бы объявитьПеременные в check_fermat()
выглядят следующим образом, и все будет работать (попробуйте запустить этот код для себя)
def input_fermat():
a=int(input('Enter the first variable \'a\': \n'))
b=int(input('Enter the second variable \'b\': \n'))
c=int(input('Enter the third variable \'c\': \n'))
n=int(input('Enter the exponential variable \'n\': \n'))
return a, b, c, n
def check_fermat():
any,variable,names,go = input_fermat()
calc_1=any**go
calc_2=variable**go
calc_3=name**go
if n>2 and int(calc_1) + int(calc_2) == calc_3:
print('Holy smokes, Fermat was wrong!')
else:
print('No that doesn\'t')
check_fermat()
Процесс выполнения (для обоих фрагментов кода) выглядит следующим образом:
check_fermat()
в последней строке выполняется, потому что это единственная функция, вызываемая (не только определенная) в нашем файле .py. - Python ищет определение
check_fermat()
для его выполнения 3.Python находит input_fermat()
, вызывается внутри check_fermat
и ищет input_fermat()
s определение. - Python находит определение, выполняет функцию и запрашивает ввод.
- Ввод возвращаетсяобратно к
check_fermat()
и используется для вычисления последней теоремы Ферма. - Остальная часть
check_fermat()
выполняется (вывод выводится на терминал).Затем check_fermat()
возвращает None, завершая вызов функции без переменных для возврата.