Я пытаюсь кодировать программу числовой интеграции на python, однако некоторые пользовательские вводы не сохраняются как переменные при использовании Entry.get()
.Как правильно использовать Entry.get()
?
Я довольно новичок в кодировании и пытаюсь создать программу, которая вычисляет числовую интеграцию.Код для интеграции работает сам по себе, однако я пытаюсь создать пользовательский интерфейс, используя библиотеку tkinter.Я получаю следующую ошибку в данной строке:
finalValue = ((a-b)/n)*initialValue
ZeroDivisionError: float division by zero
Из этого я понял, что пользовательские значения не сохраняются в переменных, и, следовательно, n, a и b возвращают ноль.Я проверил это, напечатав переменные после ввода пользователя.Я думаю, что использовал Entry.get()
неправильно, но я не уверен, как.Я также посмотрел на подобные проблемы и решения, но ни одна из них, кажется, не работает.
def integrateNumerical(n, b, a):
def f(x): #Defines the function to be integrated
return eval(numericalFunction)
initialValue = 0 #Sets the initial iterative value
finalValue = 0 #Sets the final iterative value
for i in range(1, n+1):
initialValue = initialValue + f(b+((i-(1/2))*((a-b)/n)))
finalValue = ((a-b)/n)*initialValue
return finalValue
def integrateNumericalWindow():
window8 = Toplevel(window)
window8.title("Numerical Integration")
window8.geometry("400x400")
iterationNumber = IntVar()
upperBound = IntVar()
lowerBound = IntVar()
functionNumerical = StringVar()
Label(window8, text = "").pack()
Label(window8, text = "Number of iterations: ").pack()
iterationNumberEntry = Entry(window8, textvariable = iterationNumber)
iterationNumberEntry.pack()
Label(window8, text = "").pack()
Label(window8, text = "Upper bound: ").pack()
upperBoundEntry = Entry(window8, textvariable = upperBound)
upperBoundEntry.pack()
Label(window8, text = "").pack()
Label(window8, text = "Lower bound: ").pack()
lowerBoundEntry = Entry(window8, textvariable = lowerBound)
lowerBoundEntry.pack()
Label(window8, text = "").pack()
Label(window8, text = "Function: ").pack()
functionNumericalEntry = Entry(window8, textvariable = functionNumerical)
functionNumericalEntry.pack()
global n
global a
global b
global numericalFunction
n = int(Entry.get(iterationNumberEntry))
a = float(Entry.get(upperBoundEntry))
b = float(Entry.get(lowerBoundEntry))
numericalFunction = str(Entry.get(functionNumericalEntry))
Label(window8, text = "").pack()
Button(window8, text = "Integrate", width = 10, height = 1, bd = "0", fg = "#383a39", bg = "#a1dbcd", command = lambda : integrateNumerical(n, b, a)).pack()