Latest posts on Ошибка TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType' topichttp://python.su/forum/topic/39186/2020-06-28T13:52:32+03:00Общий :: Python для новичков :: Ошибка TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
2020-06-28T13:52:32+03:00MrGeo210956Решил проблему. Ошибка было изза моей невнимательности. Среди этих отрезков кода нет ответа на эту проблему.
Общий :: Python для новичков :: Ошибка TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
2020-06-28T13:08:24+03:00MrGeo210955Есть вот такой отрезок кода<br/><div class="code"><pre> <span class="k">def</span> <span class="nf">frange</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">):</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">start</span>
<span class="k">while</span> <span class="n">t</span> <span class="o"><</span> <span class="n">end</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">t</span>
<span class="n">t</span> <span class="o">+=</span> <span class="n">step</span>
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span>
<span class="k">if</span> <span class="n">v</span> <span class="o">==</span> <span class="s1">'log(x+4)+x^4'</span><span class="p">:</span>
<span class="k">return</span> <span class="n">log</span><span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">4</span><span class="p">)</span> <span class="o">+</span> <span class="n">x</span> <span class="o">**</span> <span class="mi">4</span>
<span class="k">elif</span> <span class="n">v</span> <span class="o">==</span> <span class="s1">'(e^(-x)*sin(x))/x'</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">e</span> <span class="o">**</span> <span class="p">(</span><span class="o">-</span><span class="n">x</span><span class="p">)</span> <span class="o">*</span> <span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">))</span> <span class="o">/</span> <span class="n">x</span>
<span class="k">def</span> <span class="nf">integ</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span>
<span class="n">h</span> <span class="o">=</span> <span class="nb">float</span><span class="p">((</span><span class="n">b</span> <span class="o">-</span> <span class="n">a</span><span class="p">))</span> <span class="o">/</span> <span class="n">n</span>
<span class="n">s</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">s</span> <span class="o">=</span> <span class="p">(((</span><span class="n">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="o">+</span> <span class="n">f</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">v</span><span class="p">))</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="n">s</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">frange</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">h</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">h</span><span class="p">):</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="o">+</span> <span class="n">s</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">s</span> <span class="o">*</span> <span class="n">h</span>
<span class="k">return</span> <span class="n">s</span>
<span class="k">def</span> <span class="nf">calc_integ</span><span class="p">():</span>
<span class="n">a</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">a_num</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
<span class="n">b</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">b_num</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">n_num</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
<span class="n">v</span> <span class="o">=</span> <span class="p">(</span><span class="n">variable</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">integ</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
</pre></div>При выполнении программы, вылезает ошибка :<br/>Traceback (most recent call last):<br/>File "C:\\Python 3.8.2(64-bit)\lib\tkinter\__init__.py“, line 1883, in __call__<br/>return self.func(*args)<br/>File ”C<img src="/static/djangobb_forum/img/smilies/hmm.png" />Users/Виктя/Desktop/Попытка курсача/prog1.py“, line 40, in calc_integ<br/>res = integ(a, b, n, v)<br/>File ”C<img src="/static/djangobb_forum/img/smilies/hmm.png" />Users/Виктя/Desktop/Попытка курсача/prog1.py", line 28, in integ<br/>s = (((f(a, v) + f(b, v)) / 2) + s)<br/>TypeError: unsupported operand type(s) for +: ‘NoneType’ and ‘NoneType’<br/><br/>Process finished with exit code 0<br/><br/>Просиходит такое, если работать с уравнением '(e^(-x)*sin(x))/x, если же работать с другим, ошибки нет и все считает правильно.<br/><br/>Так же у меня в этой же программе есть дифференцирование<br/><div class="code"><pre> <span class="k">def</span> <span class="nf">diff1</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">dx</span><span class="p">):</span>
<span class="n">ra</span> <span class="o">=</span> <span class="p">(((</span><span class="n">f</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">x0</span><span class="o">+</span><span class="n">dx</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="o">*</span> <span class="n">x0</span><span class="p">))</span> <span class="o">/</span> <span class="n">dx</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ra</span>
<span class="k">def</span> <span class="nf">diff2</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">dx</span><span class="p">):</span>
<span class="n">ra</span> <span class="o">=</span> <span class="p">(((</span><span class="n">f</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">x0</span> <span class="o">+</span> <span class="n">dx</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">x0</span> <span class="o">-</span> <span class="n">dx</span><span class="p">)))</span> <span class="o">/</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">dx</span><span class="p">))</span>
<span class="k">return</span> <span class="n">ra</span>
<span class="k">def</span> <span class="nf">diff3</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">dx</span><span class="p">):</span>
<span class="n">ra</span> <span class="o">=</span> <span class="p">(((</span><span class="n">f</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">x0</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">x0</span> <span class="o">-</span> <span class="n">dx</span><span class="p">)))</span> <span class="o">/</span> <span class="n">dx</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ra</span>
<span class="k">def</span> <span class="nf">calc_diff</span><span class="p">():</span>
<span class="n">v</span> <span class="o">=</span> <span class="p">(</span><span class="n">variable</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
<span class="n">x0</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">x_num</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
<span class="n">dx</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">dx_num</span><span class="o">.</span><span class="n">get</span><span class="p">())</span>
<span class="n">ff</span> <span class="o">=</span> <span class="p">(</span><span class="n">e</span> <span class="o">**</span> <span class="o">-</span><span class="p">(</span><span class="n">x0</span><span class="p">)</span> <span class="o">*</span> <span class="n">sin</span><span class="p">(</span><span class="n">x0</span><span class="p">))</span> <span class="o">/</span> <span class="n">x0</span>
<span class="k">if</span> <span class="n">v</span> <span class="o">==</span> <span class="s1">'log(x+4)+x^4'</span><span class="p">:</span>
<span class="n">res2</span> <span class="o">=</span> <span class="n">diff1</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">dx</span><span class="p">)</span>
<span class="n">res3</span> <span class="o">=</span> <span class="n">diff2</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">dx</span><span class="p">)</span>
<span class="n">res4</span> <span class="o">=</span> <span class="n">diff3</span><span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">dx</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">res2</span> <span class="o">=</span> <span class="p">(((</span><span class="n">ff</span><span class="o">*</span><span class="p">(</span><span class="n">x0</span><span class="o">+</span><span class="n">dx</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span><span class="n">ff</span> <span class="o">*</span> <span class="n">x0</span><span class="p">))</span> <span class="o">/</span> <span class="n">dx</span><span class="p">)</span>
<span class="n">res3</span> <span class="o">=</span> <span class="p">(((</span><span class="n">ff</span> <span class="o">*</span> <span class="p">(</span><span class="n">x0</span> <span class="o">+</span> <span class="n">dx</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span><span class="n">ff</span> <span class="o">*</span> <span class="p">(</span><span class="n">x0</span> <span class="o">-</span> <span class="n">dx</span><span class="p">)))</span> <span class="o">/</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">dx</span><span class="p">))</span>
<span class="n">res4</span> <span class="o">=</span> <span class="p">(((</span><span class="n">ff</span><span class="o">*</span><span class="p">(</span><span class="n">x0</span><span class="p">))</span> <span class="o">-</span> <span class="p">(</span><span class="n">ff</span> <span class="o">*</span> <span class="p">(</span><span class="n">x0</span> <span class="o">-</span> <span class="n">dx</span><span class="p">)))</span> <span class="o">/</span> <span class="n">dx</span><span class="p">)</span>
<span class="n">result2</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="n">res2</span><span class="p">)</span>
<span class="n">result3</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="n">res3</span><span class="p">)</span>
<span class="n">result4</span><span class="o">.</span><span class="n">configure</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="n">res4</span><span class="p">)</span>
</pre></div>Тут вылезала такая же ошибка при втором уравнении, зато есть прогонять не через функции diff, а на прямую, как в calc_diff то все работает. Почему? И как можно исправить эту ошибку?