g1和g2都是随机整数。
我在两者上都调用getValue()方法,将它们乘以另一个整数。
我正在尝试检查getvalue(g1)和getValue(g2)的结果是否大于20。
如果它们都等于0,并且小于20,则应用另一个对每个人起作用。
有人有更简洁的方法吗?
def fitness(self):
g1, g2 = self.select()
if self.getValue(g1) > 20:
g1 = 0
else:
g1 = self.getBenifit(g1)
if self.getValue(g2) > 20:
g2 = 0
else:
g2 = self.getBenifit(g2)
return g1, g2
您可以像这样缩短if
语句:
g1 = 0 if self.getValue(g1) > 20 else self.getBenifit(g1)
g2 = 0 if self.getValue(g2) > 20 else self.getBenifit(g2)
正如另一个答案所指出的,您可以使用如下语法:
value_if_trueif
conditionelse
value_if_false
与此分开,您显然在这里有一些重复的代码。对于仅两个项目,可能不值得做任何不同的事情,但是如果您获得更多,则应考虑创建一个函数并为每个项目调用它。仅为了说明这一点,您可能会得到如下所示的结果:
def my_conversion(self, g):
return 0 if self.getValue(g) > 20 else self.getBenifit(g)
def fitness(self):
g1, g2 = self.select()
return self.my_conversion(g1), self.my_conversion(g2)
或者如果self.select()
可能返回大量项目,则这是另一种可能性。在这种情况下,也许您不需要单独的函数,但是这里确实有一个循环。
def fitness(self):
return tuple((0 if self.getValue(g) > 20 else self.getBenifit(g))
for g in self.select())
这些只是需要牢记的选项,很明显,我not声称它在只有两个项目的情况下澄清了代码。