<p>这应该相当于正值和负值的两种情况:</p>
<pre><code>if abs(A) > 10 and A * B > 0:
if abs(A) >= abs(B):
# do block A
else:
# do block B
</code></pre>
<p>说明:</p>
<ul>
<li><code>abs(A)</code>分别对应于<code>A > 10</code>和<code>A < -10</code></li>
<li><code>A * B > 0</code>表示两者具有相同的符号和<code>B != 0</code></li>
<li><code>abs(A) >= abs(B)</code>如果两者都是{<cd8>},则表示{<cd7>};如果两者都是{<cd10>},则表示{<cd9>}</li>
</ul>
<p>现在,它更短,重复性更少,但是否更容易理解由你决定。在任何情况下,您都应该添加一条注释来解释代码以及它应该做的事情</p>
<p>使用原始变量和过程,这将是:</p>
<pre><code>if abs(PID) > 10 and PID * self.last_pid > 0:
if abs(PID) >= abs(self.last_pid):
self.setKp(self.Kp+self.increase_val)
self.increase_val = self.increase_val*2
else:
percent_last = PID/self.last_pid*100
self.increase_val + (percent_last/100*self.increase_val)
self.setKp(self.Kp+self.increase_val)
</code></pre>
<p>我刚才还注意到了一些要点:</p>
<ul>
<li>您的行<code>self.increase_val + (percent_last / 100 * self.increase_val)</code>没有任何作用。我猜<code>+</code>应该是<code>=</code>或者<code>+=</code></李>
<li>首先<code>* 100</code>获得百分比,然后再<code>/ 100</code>是没有意义的</li>
<li>奇怪的是,在一种情况下,在</em>增加它之前,你将<code>increase_val</code>添加到<code>KP</code><em>,但在另一种情况下,在</em>增加它之后,<em>;这是故意的吗</李>
</ul>
<p>事实上,我认为这可以进一步简化为这一点,前提是使用内部<code>if</code>来限制<code>increase_val</code>的增加;但是,不确定是否应该在其自身增加之前或之后将其添加到<code>Kp</code>,或者这是否应该取决于具体情况</p>
<pre><code>if abs(PID) > 10 and PID * self.last_pid > 0:
self.setKp(self.Kp + self.increase_val)
self.increase_val *= 1 + min(PID/self.last_pid, 1)
</code></pre>