我创建了一个使用两个字典的函数,curr_stats
和weekly_result
。如果weekly_result
中有任何键不在curr_stats
中,则该函数应该只打印invalid_msg
,而不打印curr_stats
。你知道吗
但是代码第5行的if
语句似乎不起作用。它应该触发下一个if
语句,因此curr_stats
不会发生突变。你知道吗
def update_standings(curr_stats, weekly_result):
invalid = 0
point_counter(weekly_result)
for team in weekly_result:
if team in curr_stats == False:
invalid = invalid + 1
if invalid > 0:
print(invalid_msg)
else:
for team in weekly_result:
curr_stats[team] = curr_stats[team] + weekly_result[team]
在Python中,all comparisons have the same precedence,包括
in
。 现在发生的是comparison chaining,一种特殊的形式,用来测试传递关系,比如在数学课上:正如PawełKordowski在his comment中指出的那样,上面的比较链主要相当于:
(有一个区别: “等价”代码可能会计算
x
两次,而比较链只计算x
一次。)在您的案例中,比较链是:
…主要相当于:
只有当
curr_stats
包含team
并且curr_stats
为空时,这才是正确的。。。这不应该发生。你知道吗代码的问题在于
== False
,部分原因是它将一个比较变成了一个比较链,但主要原因是您根本不需要它。 Python提供了not
关键字,当您想要布尔值的对立面时。 条件语句应为:最后一个建议: 通过去掉} 来简化最后的
invalid
计数器并在找到无效的team
后立即返回,这个函数可以变得更短。 (一旦您发现weekly_result
是无效输入,您可能就不在乎它是否是“甚至更无效的”。) 我还使用^{for
循环:相关问题 更多 >
编程相关推荐