Python程序设计 二维列表

教学案例九 二维列表

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为差 按平均分从高到低的顺序排序,将名次、姓名、平均分、等级的信息显示出来,格式如下

score结果

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. 选择题

 

  • 40
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值