Скажем, у меня есть нижнее значение и верхнее значение интеграла, введенного пользователем. Сначала я прошу установить нижний предел, а затем проверяю его действительность. Затем, чтобы сравнить значение моего верхнего предела с моим нижним, я создал вложенную функцию, так что я также могу запросить пользовательский ввод верхнего предела, проверить его действительность и убедиться, что мой верхний предел больше, чем мой нижний ( Потому что вы знаете интеграцию), как показано в приведенном ниже коде.
def LowLimCheck():
while True:
try:
a = float(input("Please enter the lower limit of the integral: "))
break
except ValueError:
print("Invalid input. Please enter a number.")
print("You have chosen the lower limit: ", a)
def UppLimCheck():
b = -1
while b <= a:
while True:
try:
b = float(input("Please enter the upper limit of the integral: "))
break
except ValueError:
print("Invalid input. Please enter a number.")
if b <= a:
print("The upper limit must be bigger than the lower limit!")
print("You have chosen the upper limit: ", b)
return b
UppLimCheck()
return a
Теперь все в порядке, пока мне действительно не понадобится использовать значения a и b, потому что мне нужно поместить эти значения в интеграл, который я установил. По сути, это общий интеграл, составленный из правила Симпсона, в который прямо сейчас легко проникнуть. Итак, я определил функцию как:
def simpsonsRule(func, a, b, N):
<insert code here>
<insert code here>
return d
Хорошо, моя функция в основном позволяет пользователю вставлять любую произвольную функцию, верхний предел (a), нижний предел (b) и N (количество полос в правиле Симпсона), и он выплевывает d, который является оценкой интеграла произвольного выше по правилу Симпсона. Моя проблема сейчас в том, что когда я пытаюсь распечатать ответ, я могу взять переменную a и вставить ее в интеграл, но я не могу вывести переменную b, потому что она находится в функции! Например, если я сейчас напечатаю интегрированное значение (скажем, в этом случае sin (x) и N = 20)
print(simpsonsRule(lambda x:np.sin(x), a, b, 20)
Итак, я знаю, что значения a и b локальны в пределах их собственных функций. Теперь для значения a я мог бы легко сделать это, чтобы получить значение a
k = 0 #initialising the variable
k = LowLimCheck()
print(simpsonsRule(lambda x:np.sin(x), k, b, 20)
Поскольку, поскольку k вызывает LowLimCheck (), который возвращает значение для a, которое я могу поместить в свою функцию. Но как я могу получить значение b, вложенное в первую функцию? Я хочу в основном использовать b. Есть ли способ обойти это?
Приносим свои извинения за длинный вопрос и заранее благодарим!
a = LowLimCheck()
, затем b = UppLimCheck (a). Тогда у вас будет более читаемая структура, меньше переменных, которые нужно отслеживать, и вы полностью избежите этой проблемы. - person Joshua R.   schedule 28.12.2017