一种更好的方法来检查数字是否落在特定范围内,如果不是,则对每个数字应用一个函数?

问题描述 投票:0回答:2

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

python function if-statement
2个回答
1
投票

您可以像这样缩短if语句:

    g1 = 0 if self.getValue(g1) > 20 else self.getBenifit(g1)
    g2 = 0 if self.getValue(g2) > 20 else self.getBenifit(g2)

1
投票

正如另一个答案所指出的,您可以使用如下语法:

value_if_trueifconditionelsevalue_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声称它在只有两个项目的情况下澄清了代码。

© www.soinside.com 2019 - 2024. All rights reserved.