要求

不过,老师有了新的需求:想知道两组的平均分,以及把低于平均分的成绩也打印出来。
所以,在这个练习中,我们会帮老师计算出平均分,并挑出那些在平均分之下的成绩。

scores=[91, 92, 93, 95, 96, 97, 98, 99]

1、分析问题,明确结果

  • 取出列表内元素
  • 计算平均分(总分/元素总个数)并打印
  • 将列表内元素与平均分做比较
  • 挑出平均分以下的成绩
  • 打印结果

2、思考需要的知识,或搜索新知识

知识点一:计算平均分,len(list)统计列表长度即列表内元素个数

sum=0

#计算总和
for i in scores:
    sum=sum+i

#计算平均分
average=sum/len(scores)

知识点二:寻找更简单的计算平均分方法,引入numpy.mean() 函数返回数组中元素的算术平均值

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import numpy as np  #导入np库

scores1 =  [91, 95, 97, 99, 92, 93, 96, 98]

average=np.mean(scores1)  #numpy.mean() 函数返回数组中元素的算术平均值。
print('两组平均成绩为{}'.format(average))

知识点三:挑出平均分以下的成绩,list.append(i) 将元素i 添加到list

#挑出小于平均分的成绩并插入新的列表
score=[]
for i in scores:
    if i <average:
        score.append(i)
    else:
        continue

知识点四:找到更简单的方法,打印平均分以下的成绩

#NumPy 从已有的数组创建数组

socres3 = np.array(scores1)  #
print(' 低于平均成绩的有:{}'.format(socres3[socres3<average]))  #在vs code运行报错:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 0: illegal multibyte sequence

#查找原因后修改,运行成功
socres3 = np.array(scores1)
print(' 低于平均成绩的有:{}'.format(socres3[socres3<average]).replace(u'\xa0', u''))

3、思考切入点

4、尝试解决问题的一部分

整理并打印结果

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
scores=[91, 92, 93, 95, 96, 97, 98, 99]

sum=0
score=[]

#计算总和
for i in scores:
    sum=sum+i

#计算平均分
average=sum/len(scores)
print('两组的平均分为{}'.format(average))

#挑出小于平均分的成绩并插入新的列表
for i in scores:
    if i <average:
        score.append(i)
    else:
        continue

#打印结果
print('平均分以下的成绩有:{}'.format(score))

5、重复1-4

引入numpy后更加简洁

import numpy as np  # 导入 numpy库,下面出现的 np 即 numpy库

scores1 =  [91, 95, 97, 99, 92, 93, 96, 98]  

average = np.mean(scores1)  # 一行解决。
print('平均成绩是:{}'.format(average))

socres3 = np.array(scores1)
print(' 低于平均成绩的有:{}'.format(socres3[socres3<average]).replace(u'\xa0', u''))