我正在编写将给巴西柔术运动员指定等级的代码。排名公式是从国际象棋借来的(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
,并且每次都放入全局变量似乎效率很低。
答案 0 :(得分:0)
您希望将条件放入某种结构中,例如字典或类。然后按顺序测试每个条件,如果匹配,则执行它们“保护”的调节功能,然后退出循环。
例如,您也可以将条件放入函数中。 Python中的函数只是更多的对象,您可以将函数对象放在列表中,就像可以将其他内容放在列表中一样。在这里列表是一个很好的结构,因为列表是按排序的,因此您可以对条件进行排序。
另一种选择是简单地将条件测试留给函数,然后测试分数是否改变。如果ELO得分发生变化,请跳过其他功能,否则请继续。我仍然将这些功能放在列表的首位:
mounted