教学案例九 二维列表
1. 成绩文件的读取
score.csv文件中记录了多门同学的编号、姓名和三门功课的成绩(逗号键分隔) 格式如下
编写程序,将文件score.csv文件中的数据放入二维列表cjlb中(注意:语文、数学、英语成绩要转换为数值类型)
f1=open("lbks//score.csv")
cjlb=[]
#代码开始
for i in f1.readlines():
s = []
i = i.strip()
for j in i.split(","):
s.append(j)
cjlb.append(s)
#代码结束
for lb in cjlb:
print("学号{}姓名{}语文{}数学{}英语{}".format(lb[0],lb[1],lb[2],lb[3],lb[4]))
2. 成绩文件的查询
score.csv文件中记录了多门同学的编号、姓名和三门功课的成绩(逗号键分隔) 格式如下
已将文件中的数据读入到二维列表cjlb中,补充程序,实现成绩查询的功能: 输入编号,在列表cjlb中查找并显示该生的姓名和成绩. 若不存在该编号,显示查无此人。 例如 输入101 显示姓名Mary语文88数学85英语90 输入999 显示查无此人
f1=open("lbks//score.csv")
cjlb=[]
for line in f1:
lb=line.strip().split(",")
cjlb.append([lb[0],lb[1],eval(lb[2]),eval(lb[3]),eval(lb[4])])
#代码开始
n = input("输入编号")
s = 0
for i in cjlb:
if i[0] == n:
s = 1
print(f"姓名{i[1]}语文{i[2]}数学{i[3]}英语{i[4]}")
if s == 0:
print("查无此人")
#代码结束
3. 成绩文件的新增
score.csv文件中记录了多门同学的编号、姓名和三门功课的成绩(逗号键分隔) 格式如下
已将文件中的数据读入到二维列表cjlb中,补充程序,实现成绩新增的功能: 输入编号,若该编号在列表中已存在,显示编号已存在 若不存在该编号,再输入新增的姓名和三门功课的成绩。 若成绩是数值且在0到100之间,将该信息追加在列表中 若成绩不是数值,或不在0到100之间,显示成绩错误
f1=open("lbks//score.csv")
cjlb=[]
for line in f1:
lb=line.strip().split(",")
cjlb.append([lb[0],lb[1],eval(lb[2]),eval(lb[3]),eval(lb[4])])
#代码开始
bh = input("输入编号")
n = 0
for i in cjlb:
if i[0] == bh:
n = 1
print("编号已存在")
break
if n == 0:
s = []
xm = input("姓名")
yw = eval(input("语文"))
sx = eval(input("数学"))
yy = eval(input("英语"))
if 0<=yw<=100 and 0<=sx<=100 and 0<=yy<=100:
s.append(bh)
s.append(xm)
s.append(yw)
s.append(sx)
s.append(yy)
cjlb.append(s)
else:
print("成绩错误")
#代码结束
for lb in cjlb:
print("学号{}姓名{}语文{}数学{}英语{}".format(lb[0],lb[1],lb[2],lb[3],lb[4]))
4. 成绩文件的删除
score.csv文件中记录了多门同学的编号、姓名和三门功课的成绩(逗号键分隔) 格式如下
已将文件中的数据读入到二维列表cjlb中,补充程序,实现成绩删除的功能: 输入编号,若编号存在cjlb中,将该生的信息从cjlb删除, 若编号不存在cjlb中,显示编号不存在
f1=open("lbks//score.csv")
cjlb=[]
for line in f1:
lb=line.strip().split(",")
cjlb.append([lb[0],lb[1],eval(lb[2]),eval(lb[3]),eval(lb[4])])
#代码开始
bh = input("输入编号")
n = 0
for i in cjlb:
if i[0]==bh:
n = 1
cjlb.remove(i)
if n == 0:
print("编号不存在")
#代码结束
for lb in cjlb:
print("学号{}姓名{}语文{}数学{}英语{}".format(lb[0],lb[1],lb[2],lb[3],lb[4]))
5. 成绩文件的修改
score.csv文件中记录了多门同学的编号、姓名和三门功课的成绩(逗号键分隔) 格式如下
已将文件中的数据读入到二维列表cjlb中,补充程序,实现成绩修改的功能: 若编号不存在cjlb中,显示编号不存在。 若编号存在cjlb中,显示该生的信息,询问是否修改,若修改则输入该生的姓名和语文、数学、英语的成绩。若输入的语文、数学、英语的成绩不是数字或不在0到100之间,显示成绩错误。
f1=open("lbks//score.csv")
cjlb=[]
for line in f1:
lb=line.strip().split(",")
cjlb.append([lb[0],lb[1],eval(lb[2]),eval(lb[3]),eval(lb[4])])
#代码开始
bh = input("输入编号")
n = 0
for i in cjlb:
if i[0]==bh:
n = 1
print(f"姓名{i[1]}语文{i[2]}数学{i[3]}英语{i[4]}")
sf = input("是否修改")
if sf == "y":
xm = input("姓名")
yw = eval(input("语文"))
sx = eval(input("数学"))
yy = eval(input("英语"))
if 0<=yw<=100 and 0<=sx<=100 and 0<=yy<=100:
i[1]=xm
i[2]=yw
i[3]=sx
i[4]=yy
print("成绩已修改")
else:
print("成绩错误")
if n == 0:
print("编号不存在")
#代码结束
for lb in cjlb:
print("学号{}姓名{}语文{}数学{}英语{}".format(lb[0],lb[1],lb[2],lb[3],lb[4]))
6. 成绩文件的计算
score.csv文件中记录了多门同学的编号、姓名和三门功课的成绩(逗号键分隔) 格式如下
计算每位同学的平均分,等级 计算等级的规则如下:平均分大于等于90为优,大于等于80为良,大于等于70为中,大于等于60为合格,小于60为差 按平均分从高到低的顺序排序,将名次、姓名、平均分、等级的信息显示出来,格式如下
f1=open("lbks//score.csv")
lb=[]
#代码开始
for i in f1.readlines():
s = []
i = i.strip()
f = i.split(",")
pj = (int(f[2])+int(f[3])+int(f[4]))/3
s.append(f[1])
s.append(pj)
if 90<=pj<=100:
s.append("优")
elif pj >= 80:
s.append("良")
elif pj >= 70:
s.append("中")
elif pj >= 60:
s.append("合格")
else:
s.append("差")
lb.append(s)
lb.sort(key=(lambda x:x[1]),reverse=True)
#代码结束
for i in range(len(lb)):
print("名次{:2d}姓名{:8}平均分{:.2f} 等级{}".format(i+1,lb[i][0],lb[i][1],lb[i][2]))
f1.close()
7. 等额本息分期贷款计算
等额本息还款法是指借款人每期偿还相等数额的钱。 每期还款的金额按以下公式计算
其中,贷款金额dkje,还款期数ys,每期利率lv, 在程序中输入贷款金额,年限和年利率, 显示每月的序号、还款本金、还款利息和还款金额 并显示总还款金额 和 总利息
dkje=eval(input('输入贷款金额'))
ys=eval(input('输入年限'))*12
lv=eval(input('输入年利率'))/12
hkxx=[]
#代码开始
y = dkje
for i in range(1,ys+1):
s = []
sum1 = (dkje*lv*(1+lv)**ys) / ((1+lv)**ys-1)
n = y * lv
s.append(i)
s.append(sum1-n)
s.append(n)
s.append(sum1)
y = y - (sum1-n)
hkxx.append(s)
#代码结束
s=z=0
for x in hkxx:
print("{}期还款本金{:.2f}还款利息{:.2f}合计{:.2f}".format(x[0],x[1],x[2],x[3]))
s=s+x[2]
z=z+x[3]
print("总利息{:.2f}总计还款{:.2f}".format(s,z))
8. 等额本金分期贷款计算
等额本金还款法是指借款人每期偿还相等数额的本金dkje/ys。 其中,贷款金额dkje,还款期数ys 每期偿还的利息为尚欠银行的本金乘以利率lv 在程序中输入贷款金额,年限和年利率, 显示每月的序号、还款本金、还款利息和合计(还款本金与还款利息的和) 计算并显示总利息和总计还款
dkje=eval(input('输入贷款金额'))
ys=eval(input('输入年限'))*12
lv=eval(input('输入年利率'))/12
hkxx=[]
#代码开始
y = dkje
for i in range(1,ys+1):
s = []
n = dkje * lv
bj = y / ys
hj = n + bj
s.append(i)
s.append(bj)
s.append(n)
s.append(hj)
dkje = dkje-bj
hkxx.append(s)
#代码结束
s=z=0
for x in hkxx:
print("{}期还款本金{:.2f}还款利息{:.2f}合计{:.2f}".format(x[0],x[1],x[2],x[3]))
s=s+x[2]
z=z+x[3]
print("总利息{:.2f}总计还款{:.2f}".format(s,z))
9. 选择题