【 E d u c o d e r 作 业 Educoder作业 Educoder作业】问题求解——列表
T 1 T1 T1 计算标准差
很简单的模拟
import math
L = [101, 25, 38, 29, 108, 121]
########## Begin ##########
mu = sum(L) / len(L)
sg = 0
for i in L :
sg += (i - mu) ** 2 / len(L)
sigma = math.sqrt(sg)
########## End ##########
print('%.2f' % sigma)
T 2 T2 T2 计算向量内积
z i p zip zip操作,就是把两个列表整合到一起,存 p a i r pair pair类型,长度为较短列表的长度,多余部分舍弃。
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 x, y in zip(X, Y) :
XdotY += x * y
########## End ##########
print('%.2f' % XdotY)
T 3 T3 T3 查找学生信息
f l a g flag flag的用法很有趣,就是立一个旗子,表示一下到底有没有输出
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 ##########
l = len(name)
flag = False
for i in range(l) :
if grade[i] >= a and grade[i] <= b :
flag = True
print(ID[i], name[i])
if flag == False :
print('未找到')
########## End ##########
T 4 T4 T4 判断水仙花数
和 C + + C++ C++中的拆位不太一样, P y t h o n Python Python有骚操作,如代码
x = int(input())
########## Begin ##########
y = x
if x < 100 or x > 999 :
print('False')
else :
L = [int(i) ** 3 for i in str(x)]
if sum(L) == x :
print('True')
else :
print('False')
########## End ##########
有个坑点,就是水仙花数是三位数
T 5 T5 T5 寻找自幂数
跟上个题没啥区别的
n = int(input())
########## Begin ##########
a = 10 ** (n - 1)
if n == 1 :
a = 0
b = 10 ** n
for x in range(a, b) :
L = [int(i) ** n for i in str(x)]
if (sum(L) == x) :
print(x)
########## End ##########
T 6 T6 T6 绘制钟形曲线
关于 p l o t plot plot的操作我们之前博客里提到过,不赘述。这个题就是考虑想画出曲线的话, p l t . p l o t ( x , y , ′ r − ′ ) plt.plot(x,y,'r-') plt.plot(x,y,′r−′)里面 x x x和 y y y必须都是列表才行。
import matplotlib.pyplot as plt
import math
########## Begin ##########
X = []
Y = []
a, b, n = -3, 3, 21
delta = (b - a) / (n - 1)
x = a
while x <= b :
y = (math.sqrt(2 * math.pi) ** (-1)) * math.exp(-x * x / 2)
X.append(x)
Y.append(y)
x += delta
########## End ##########
#以下代码用于打印结果
for i in range(len(X)):
if round(X[i],2)==-0.0:
X[i]=0
print('%.2f\t%.2f' % (X[i],Y[i]))
#以下代码用于绘制图形
plt.plot(X,Y,'bo-')
plt.grid('on')
plt.axis([-3, 3, 0, 0.4])
plt.show()
plt.savefig( 'src/step6/student/pic.png' )
plt.close()
T 7 T7 T7 绘制大西洋中脊剖面轮廓
同上
import matplotlib.pyplot as plt
import math
########## Begin ##########
D, C, u = 2.5, 0.11, 50
d, dlt = 1200, 200
x = -d
X, Y = [], []
while x <= d :
y = -(D + C * math.sqrt(10 * abs(x) / u))
X.append(x)
Y.append(y)
x += dlt
########## End ##########
plt.plot(X, Y, 'r-')
plt.axis([-d, d, -4.2, 0])
plt.show()
#以下代码用于打印结果
for i in range(len(X)):
print('%5s\t%.2f' % (int(X[i]),Y[i]))
#以下代码用于保存图片
plt.savefig( 'src/step7/student/pic.png' )
plt.close()
T 8 T8 T8 线性拟合
注意读题就行,具体和上面两个题没区别的
import matplotlib.pyplot as plt
X = [0, 0.5, 1, 1.5, 2, 2.5, 3, 4, 4.5, 5]
Y = [0, 18, 20, 39.5, 60, 50, 68, 77, 100, 110]
########## Begin ##########
n = len(X)
Sx, Sy = sum(X), sum(Y)
Sxy = 0
Sxx = 0
for x, y in zip(X, Y) :
Sxy += x * y
Sxx += x * x
plt.plot(x, y, 'bo')
k = (Sx * Sy - n * Sxy) / (Sx * Sx - n * Sxx)
b = (Sx * Sxy - Sxx * Sy) / (Sx * Sx - n * Sxx)
Px = [0, 5]
Py = [b, 5 * k + b]
plt.plot(Px, Py, 'r-')
plt.show()
########## End ##########
print('y = %.3fx + %.3f' % (k,b))
plt.savefig( 'src/step8/student/pic.png' )
plt.close()