我有一个问题,如何简化这个代码?我的印象是,它可以在3个有条件的指示,而不是在6
if (PID > 10 and self.last_pid > 0):
if (PID >= 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)
if (PID < -10 and self.last_pid < 0):
if (PID <= 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)
(可以简化为:)
if A > 10 and B > 0:
if A >= B:
# do block A
else:
# do block B
if A < -10 and B < 0:
if A <= B):
# do block A
else:
# do block B
虽然有点长,但行数较少:
如果您不喜欢它这么长,我建议将第一行
or
的每一侧都转换为布尔变量,然后在if
语句中使用该变量。像这样:这应该相当于正值和负值的两种情况:
说明:
abs(A)
分别对应于A > 10
和A < -10
A * B > 0
表示两者具有相同的符号和B != 0
abs(A) >= abs(B)
如果两者都是{现在,它更短,重复性更少,但是否更容易理解由你决定。在任何情况下,您都应该添加一条注释来解释代码以及它应该做的事情
使用原始变量和过程,这将是:
我刚才还注意到了一些要点:
self.increase_val + (percent_last / 100 * self.increase_val)
没有任何作用。我猜+
应该是=
或者+=
李>* 100
获得百分比,然后再/ 100
是没有意义的increase_val
添加到KP
,但在另一种情况下,在增加它之后,;这是故意的吗李>事实上,我认为这可以进一步简化为这一点,前提是使用内部
if
来限制increase_val
的增加;但是,不确定是否应该在其自身增加之前或之后将其添加到Kp
,或者这是否应该取决于具体情况相关问题 更多 >
编程相关推荐