Есть вот такой отрезок кода
При выполнении программы, вылезает ошибка :
Traceback (most recent call last):
File "C:\[Software]\Python 3.8.2(64-bit)\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:/Users/Виктя/Desktop/Попытка курсача/prog1.py", line 40, in calc_integ
res = integ(a, b, n, v)
File "C:/Users/Виктя/Desktop/Попытка курсача/prog1.py", line 28, in integ
s = (((f(a, v) + f(b, v)) / 2) + s)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
Process finished with exit code 0
Просиходит такое, если работать с уравнением '(e^(-x)*sin(x))/x, если же работать с другим, ошибки нет и все считает правильно.
Так же у меня в этой же программе есть дифференцирование
Тут вылезала такая же ошибка при втором уравнении, зато есть прогонять не через функции diff, а на прямую, как в calc_diff то все работает. Почему? И как можно исправить эту ошибку?
Python:
def frange(start, end, step):
t = start
while t < end:
yield t
t += step
def f(x, v):
if v == 'log(x+4)+x^4':
return log(x + 4) + x ** 4
elif v == '(e^(-x)*sin(x))/x':
return (e ** (-x) * sin(x)) / x
def integ(a, b, n, v):
h = float((b - a)) / n
s = 0
s = (((f(a, v) + f(b, v)) / 2) + s)
for x in frange(a + h, b, h):
s = f(x, v) + s
s = s * h
return s
def calc_integ():
a = int(a_num.get())
b = int(b_num.get())
n = int(n_num.get())
v = (variable.get())
res = integ(a, b, n, v)
Traceback (most recent call last):
File "C:\[Software]\Python 3.8.2(64-bit)\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:/Users/Виктя/Desktop/Попытка курсача/prog1.py", line 40, in calc_integ
res = integ(a, b, n, v)
File "C:/Users/Виктя/Desktop/Попытка курсача/prog1.py", line 28, in integ
s = (((f(a, v) + f(b, v)) / 2) + s)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
Process finished with exit code 0
Просиходит такое, если работать с уравнением '(e^(-x)*sin(x))/x, если же работать с другим, ошибки нет и все считает правильно.
Так же у меня в этой же программе есть дифференцирование
Python:
def diff1(x0, v, dx):
ra = (((f(x0, v)*(x0+dx)) - (f(x0, v) * x0)) / dx)
return ra
def diff2(x0, v, dx):
ra = (((f(x0, v) * (x0 + dx)) - (f(x0, v) * (x0 - dx))) / (2 * dx))
return ra
def diff3(x0, v, dx):
ra = (((f(x0, v)*(x0)) - (f(x0, v) * (x0 - dx))) / dx)
return ra
def calc_diff():
v = (variable.get())
x0 = float(x_num.get())
dx = float(dx_num.get())
ff = (e ** -(x0) * sin(x0)) / x0
if v == 'log(x+4)+x^4':
res2 = diff1(x0, v, dx)
res3 = diff2(x0, v, dx)
res4 = diff3(x0, v, dx)
else:
res2 = (((ff*(x0+dx)) - (ff * x0)) / dx)
res3 = (((ff * (x0 + dx)) - (ff * (x0 - dx))) / (2 * dx))
res4 = (((ff*(x0)) - (ff * (x0 - dx))) / dx)
result2.configure(text=res2)
result3.configure(text=res3)
result4.configure(text=res4)
Тут вылезала такая же ошибка при втором уравнении, зато есть прогонять не через функции diff, а на прямую, как в calc_diff то все работает. Почему? И как можно исправить эту ошибку?