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)
1
AzureDeer OP 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) |
2
jmc891205 2021-01-07 07:50:20 +08:00 via iPhone 1
报的啥错
|
3
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 ``` |
4
cominghome 2021-01-07 08:08:31 +08:00
我靠,双击空格直接发出去了。。不过应该已经讲清楚了。。
变量作用域这一块可以读一下《流畅的 Python 》第七章 |
5
Perry 2021-01-07 08:09:51 +08:00 via iPhone
请先学会如何提问以及如果通过报错找到错误。
|
6
kikikiabc 2021-01-07 08:11:31 +08:00 via iPhone
用了全局变量,函数里面要加一个 global sum_score 声明。
|
7
lpts007 2021-01-07 08:26:04 +08:00 via Android
python 工作不多了,go 吧
|
8
XIVN1987 2021-01-07 09:58:02 +08:00
sum_score 不能用全局变量吧,难道你每次调用 get_average()都要累计之前的分数?
那你计算平均分的时候只除以本次调用的科目数,,平均分岂不是越来越高、单调递增了~~~^_^~~~ |
9
sxbug01 2021-01-07 12:47:55 +08:00
用函数返回值啊
|
10
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) |
11
tanwill12138 2021-01-07 15:42:52 +08:00
|