如何通过多个条件过滤变量

时间:2019-01-01 11:58:26

标签: python function if-statement return conditional

我正在编写将给巴西柔术运动员指定等级的代码。排名公式是从国际象棋借来的(ELO评分方法),但需要进行一些调整才能正确反映BJJ。我有分数必须通过的三个条件函数,以便正确更新分数:

Elo_Score已经根据原始公式计算出了,现在分数必须通过以下功能之一才能通过,以查看是否需要调整。

def Weight_Age_Rank_Dif():
    """this functions checks for a certain weight, age AND rank difference 
    between two players. 
    (it will kick in if the difference is bigger than 10 kilos, 15 years, 
    AND 100 rating points; so think of it as a smaller, less experienced 
    older guy fighting a bigger, more experienced and much younger 
    opponent)."""

def Weight_Dif():
    """this function checks for a weight difference only (10 or more kilos 
    between opponents)"""

def Age_Dif():
    """this function checks for an age difference only (10 or more years between 
    two players AND at least one player over 50; so it would have no effect 
    between two guys who were 22 and 34)."""

# PRINT RESULTS

这些功能背后的想法是为弱者(较小,经验不足或年龄较大的家伙)提供缓冲。如果他们赢了,他们将赢得更多积分,如果输了,他们将损失更少。

我的问题是我们如何确保仅执行其中一个功能?因此,如果两个玩家满足了第一个功能的所有条件,那么我们如何确保代码直接跳到# PRINT RESULTS而又不碰其他两个?

此外,每个函数都有多个条件语句。例如,在Weight_Age_Rank_Dif()函数中有8个条件语句。当满足这些条件之一时,如何使代码退出函数,跳过其他两个函数并直接转到# PRINT RESULTS

我试图用一堆elif语句将整个脚本变成一个巨大的条件语句,但是它不起作用,因为elif语句中的嵌套条件语句会抛出UnboundLocalError,并且每次都放入全局变量似乎效率很低。

1 个答案:

答案 0 :(得分:0)

您希望将条件放入某种结构中,例如字典或类。然后按顺序测试每个条件,如果匹配,则执行它们“保护”的调节功能,然后退出循环。

例如,您也可以将条件放入函数中。 Python中的函数只是更多的对象,您可以将函数对象放在列表中,就像可以将其他内容放在列表中一样。在这里列表是一个很好的结构,因为列表是按排序的,因此您可以对条件进行排序。

另一种选择是简单地将条件测试留给函数,然后测试分数是否改变。如果ELO得分发生变化,请跳过其他功能,否则请继续。我仍然将这些功能放在列表的首位:

mounted