我正在使用python 2.7。我在以下字典中列出了一个团队列表:
NL = {'Phillies': [662, 476], 'Braves': [610, 550], 'Mets': [656, 687]}
列表中的第一个值是团队得分的运行量,第二个值是团队放弃的运行量。
我正在使用此代码来确定每个团队的毕达哥拉斯胜率,但我还希望能够计算整个团队得分和允许的总分数。
现在我正在使用:
Pythag(league):
for team, scores in league.iteritems():
runs_scored = float(scores[0])
runs_allowed = float(scores[1])
win_percentage = (runs_scored**2)/((runs_scored**2)+(runs_allowed**2))
total_runs_scored = sum(scores[0] for team in league)
print '%s: %f' % (team, win_percentage)
print '%s: %f' % ('League Total:', total_runs_scored)
我不确定sum函数到底发生了什么,但是我没有获得一个值,而是在团队的每次迭代和win_percentage中获得了不同的值,并且它的值不一样......
理想情况下,该函数只返回一个值,用于字典中每个团队得分的总和。
感谢您的帮助。
答案 0 :(得分:3)
如果您希望运行总计可用,或者不希望迭代league
两次,则可以执行以下操作:
def Pythag(league):
total_runs_scored = 0
for team, scores in league.iteritems():
# other stuff
total_runs_scored += scores[0]
# other stuff
# runs scored by all teams up to this point
print 'League Running Total of Runs Scored: %f' % (total_runs_scored,)
# outside the loop, so total runs scored in the league.
# will be the same as the last one in the loop
print 'League Total Runs Scored: %f' % (total_runs_scored,)
请记住,在循环内部,您正在谈论单个团队,因此您无需执行sum
即可获得该团队的得分< / em>,您需要将其添加到所有以前的团队得分的运行中,即前一次循环迭代中的scores[0]
。