请问大家,我这一段为啥报错呀

2021-01-07 07:04:00 +08:00
 AzureDeer

scores = {'语文':89, '数学':95, '英语':80} sum_score = 0

def get_average(scores): for subject, score in scores.items(): sum_score += score print('现在的总分是%d'%sum_score) ave_score = sum_score/len(scores) print('平均分是%d'%ave_score)

get_average(scores)

3378 次点击
所在节点    Python
11 条回复
AzureDeer
2021-01-07 07:04:28 +08:00
scores = {'语文':89, '数学':95, '英语':80}
sum_score = 0

def get_average(scores):
for subject, score in scores.items():
sum_score += score
print('现在的总分是%d'%sum_score)
ave_score = sum_score/len(scores)
print('平均分是%d'%ave_score)

get_average(scores)
jmc891205
2021-01-07 07:50:20 +08:00
报的啥错
cominghome
2021-01-07 08:06:52 +08:00
原因出在 sum_score 上。
你不赋值的时候,sum_score 是可以当成全局变量使用的,否则这个值会被当成局部变量使用。
解决办法有两个:
1. 在 get_average 内部将 sum_score 声明为全局变量
```
def get_average(scores):
global sum_score
...
```
2. 在 get_average 内部声明 sum_score
```
# 删掉
def get_average(scores):
sum_score = 0


```
cominghome
2021-01-07 08:08:31 +08:00
我靠,双击空格直接发出去了。。不过应该已经讲清楚了。。

变量作用域这一块可以读一下《流畅的 Python 》第七章
Perry
2021-01-07 08:09:51 +08:00
请先学会如何提问以及如果通过报错找到错误。
kikikiabc
2021-01-07 08:11:31 +08:00
用了全局变量,函数里面要加一个 global sum_score 声明。
lpts007
2021-01-07 08:26:04 +08:00
python 工作不多了,go 吧
XIVN1987
2021-01-07 09:58:02 +08:00
sum_score 不能用全局变量吧,难道你每次调用 get_average()都要累计之前的分数?
那你计算平均分的时候只除以本次调用的科目数,,平均分岂不是越来越高、单调递增了~~~^_^~~~
sxbug01
2021-01-07 12:47:55 +08:00
用函数返回值啊
huichao
2021-01-07 14:21:18 +08:00
def get_average(scores):
sum_score = 0
for subject, score in scores.items():
sum_score += score
print('现在的总分是%d' % sum_score)
ave_score = sum_score / len(scores)
print('平均分是%d' % ave_score)

get_average(scores)
tanwill12138
2021-01-07 15:42:52 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742385

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX