mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
1223 字
3 分钟
【第三周作业-1】Python列表
2025-11-17

第1关:计算标准差#

任务描述#

  和平均值一样,标准差也是反映数据分布特性的一个重要指标。平均值反映的是数据的平均水平,而标准差反映的是数据的离散程度,标准差越小,则数据波动越轻微(如下左图,红线表示平均值的位置),反之则越强烈(如下右图)。

  假设有 n 个数据x0,x 1,x2,…,xn−1,则它们的标准差 σ 定义如下: 其中,μ 是这 n 个数据的平均值,即: 本关任务就是计算列表 L=[101, 25, 38, 29, 108, 121] 中数据的标准差。

编程要求#

  补全 Begin-End 区间的代码,其功能是计算列表L中数据的标准差 σ(用变量sigma表示)。

L = [101, 25, 38, 29, 108, 121]
########## Begin ##########
num=0
sigma=0
for i in L:
num+=i
num=num/len(L)
for j in L:
sigma+=(j-num)**2
sigma=(sigma/len(L))**0.5
########## End ##########
print('%.2f' % sigma)

第2关:计算向量内积#

任务描述#

背景#

  高中学习过向量的概念,例如二维坐标系的坐标 (x,y) 就可以表示一个向量。在更高维度的空间,其实也有类似的表示方法,如三维空间的 (x,y,z)。实际上,n 维空间的向量可以表示为 (x1,x2,x3,…,xn),即 n 个数值的有序组合,这其实就是《线性代数》课程中对向量的更一般定义方法,而 (x,y) 只是它的一种特殊情况。

  在向量中,有一个内积(点乘)的概念。设向量 x=(x1,x2,x3,…,xn)、y=(y1,y2,y3,…,yn),则 x 和 y 的内积定义为:x1y1+x2y2+x3y3+⋯+xnyn ​

任务#

  从结构上看,Python 中的列表是有序元素的组合,这其实和向量的定义是类似的,所以用列表来表示和处理向量十分直观。假设有如下两个用列表表示的向量:

X = [1.2, 2.3, 3.4, 4.5, 5.6]
Y = [6.5, 5.4, 4.3, 3.2, 2.1]

本关任务是计算它们的内积。

相关知识#

  利用 for 循环,可以很方便地依次取出一个列表中的元素,例如下面的程序是依次取出列表L中的各个元素并进行打印。

X = [1.2, 2.3, 3.4, 4.5, 5.6]
for x in X:
print(x)

  但是,如果要同时取出多个列表中对应位置的元素,下面这种写法是错误的:

X = [1.2, 2.3, 3.4, 4.5, 5.6]
Y = [6.5, 5.4, 4.3, 3.2, 2.1]
for x,y in X,Y:
print(x,y)

  此时一般使用两种方法。第一种是利用列表的编号同时访问多个列表:

X = [1.2, 2.3, 3.4, 4.5, 5.6]
Y = [6.5, 5.4, 4.3, 3.2, 2.1]
for i in range(len(X)): #i从0变到n
print(X[i], Y[i]) #同时打印列表X和Y中的第i号元素

  第二种方法是使用zip函数将多个列表打包成一个对象(关于zip函数的具体功能,请自行上网查询):

X = [1.2, 2.3, 3.4, 4.5, 5.6]
Y = [6.5, 5.4, 4.3, 3.2, 2.1]
for x,y in zip(X,Y): #用zip打包两个列表后,就可以同时取出相同位置的元素
print(x,y)

  两种方法达到的效果是一样的,但使用zip更加方便,而利用编号则更好理解、更加通用(因为其他编程语言不一定支持zip函数)。

编程要求#

  补全 Begin-End 区间的代码,其功能是计算列表X和Y所表示向量的内积(用变量XdotY表示)。

X = [1.2, 2.3, 3.4, 4.5, 5.6]
Y = [6.5, 5.4, 4.3, 3.2, 2.1]
########## Begin ##########
XdotY=0
for i in range(len(X)):
XdotY += X[i] * Y[i]
########## End ##########
print('%.2f' % XdotY)

第3关:查找学生信息#

任务描述#

  现有如下三个列表:

ID = [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008]
name = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十']
grade = [100, 87, 65, 58, 78, 65, 69, 85]

  分别存放了某课程学生的学号、姓名和成绩,三个列表的元素具有对应关系,如张三的学号是 1001、成绩是 100 分,李四的学号是 1002、成绩是 87 分。

  本关任务是查找成绩在区间 [a,b] 中的学生学号和姓名,若没有满足条件的学生,则打印未找到。

相关知识#

  本题的难点在于没找到时要打印未找到。可以先不管这个要求,完成其他功能后再考虑如何添加这个功能,思路如下。

  思路1:再设置一个列表,用来存放满足条件的学生序号,如果第i号学生满足条件,则将i追加到列表。查找结束后,如果列表为空(即长度为 0),则打印未找到,否则根据该列表中的序号依次打印对应学生的信息。

  思路2:设置一个布尔类型的变量,用来记录是否找到,为False时表示没找到,为True时表示找到了。该变量最开始时为False,在查找过程中,如果找到了学生,则将其改为True。如果查找结束后该变量还为False,则打印未找到。

编程要求#

  补全 Begin-End 区间的代码,功能是查找成绩在区间 [a,b](分别用变量a和b表示)中的学生学号和姓名,按列表中的顺序打印学生信息。

ID = [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008]
name = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十']
grade = [100, 87, 65, 58, 78, 65, 69, 85]
a = eval(input())
b = eval(input())
########## Begin ##########
x = 0
for i in range(len(grade)):
if a<=grade[i]<=b:
print(ID[i], name[i])
x = 1
if x == 0:
print('未找到')
########## End ##########
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【第三周作业-1】Python列表
https://blog.sherry.qzz.io/posts/python/1117list/
作者
Sherry
发布于
2025-11-17
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录