【发布时间】:2020-02-21 06:40:47
【问题描述】:
在我的内部函数的以下代码中,无论分数如何,返回的唯一值都是(0, None)。我可以看到for 循环在团队达到胜利或怜悯阈值时终止,但这并不作为整个函数的返回值。我不记得 return 语句是这样工作的,所以有人可以解释一下为什么会这样吗?
def victory_check() -> Tuple[Optional[int], Optional[Team]]:
scores_all_bad: bool = True
for team in tea_lst:
print(team.score) # debug
if team.score >= victory_threshold:
return 1, team
if team.score < mercy_rule:
return -1, team
if team.score > bad_ai_end:
scores_all_bad = False
if scores_all_bad:
return -1, None
return 0, None
Team 对象由以下内容构成。测试工具将 -12 到 14 之间的随机整数添加到每个团队的分数中,以假装玩一手牌。 Team.score 值正确反映在打印语句中。
class Team:
players: List[Player]
score: int = 0
bid: int
def __init__(self, players: List[Player]):
self.players = players
【问题讨论】:
-
您能否更清楚地说明您的输入和输出的外观?
-
" 我可以看到,当团队达到胜利或怜悯阈值时,for 循环终止" 是吗?还是在那之后巧合地终止了?因为
return确实从(最近的)封闭函数返回。而且由于 select 没有损坏,因此您在执行代码时可能缺少一些东西。而且由于您没有提供复制方式,因此很难分析问题。 -
无论如何,使用一些合成值似乎可以按预期工作:假设 bad_ai_end = 0;victory_threshold = 9;怜悯规则 = -10 和得分为 10、5、-5 和 -100 的单个团队的序列我得到
1, team、0, None、-1, None和-1, team的结果,这与代码的假设一致去做。 -
原来错误是在测试循环中,而不是我想的函数。
标签: python return control-flow