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 = 1print(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 = 1print("编号已存在")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 = 1cjlb.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 = 1print(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]=xmi[2]=ywi[3]=sxi[4]=yyprint("成绩已修改")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]))/3s.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 * lvs.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 * lvbj = y / yshj = n + bjs.append(i)s.append(bj)s.append(n)s.append(hj)dkje = dkje-bjhkxx.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. 选择题

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618823.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyQt5

Qt是基于C实现的GUI,而PyQt就是用python调用Qt. PyQt中有很多的功能模块,开发最常用的模块功能主要有3个 1) QtCore:包含核心的非GHI的功能,主要和时间,文件与文件夹,各种数据,流,URLs,进程与线程一起使用 2) QtGUi:包含窗口系统,事件处理,2D图像,基本绘画,字体和文字类 3)…

【Web】DASCTF2022.07赋能赛 题解

目录 Ez to getflag Harddisk 绝对防御 Newser Ez to getflag 进来有两个功能&#xff0c;一个查看&#xff0c;一个上传 图片查看功能可以任意文件读 upload.php <?phperror_reporting(0);session_start();require_once(class.php);$upload new Upload();$upload…

Spring ORM

Spring Data JPA 作为Spring Data 中对于关系型数据库支持的一种框架技术,属于 ORM 的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度。 Java里面写的一段DB操作逻辑,是如何一步步被传递到 DB 中执行了的呢?为什么 Java 里面可以去对接不同产商的 DB 产…

架构师系列-搜索引擎ElasticSearch(六)- 映射

映射配置 在创建索引时&#xff0c;可以预先定义字段的类型&#xff08;映射类型&#xff09;及相关属性。 数据库建表的时候&#xff0c;我们DDL依据一般都会指定每个字段的存储类型&#xff0c;例如&#xff1a;varchar、int、datetime等&#xff0c;目的很明确&#xff0c;就…

个人笔记目录

目录 一、lora 微调 alpaca 笔记 二、全量微调 Llama2-7b笔记 三、Huggingface trainer 与 from_pretrained简单介绍&#xff08;笔记&#xff09; 四、vscode调试launch.json常用格式 五、huggingface generate函数简介 六、Trl: llama2-7b-hf使用QLora 4bit量化后ds zer…

安全加速SCDN带的态势感知能为网站安全带来哪些帮助

随着安全加速SCDN被越来越多的用户使用&#xff0c;很多用户都不知道安全加速SCDN的态势感知是用于做什么的&#xff0c;德迅云安全今天就带大家来了解下什么是态势感知&#xff0c;态势感知顾名思义就是对未发生的事件进行预知&#xff0c;并提前进行防范措施的布置&#xff0…

jupyter切换不同的内核(虚拟环境)(anaconda 24.1.2)

jupyter切换不同的内核&#xff08;anaconda 24.1.2&#xff09; 主要的两条命令&#xff1a; conda install ipykernel python -m ipykernel install --user --name 环境名称 anaconda的版本号 conda --version实例&#xff1a; 一、首先可以看到已经创…

如何编写易于访问的技术文档 - 最佳实践与示例

当你为项目或工具编写技术文档时&#xff0c;你会希望它易于访问。这意味着它将为全球网络上的多样化受众提供服务并可用。 网络无障碍旨在使任何人都能访问网络内容。设计师、开发人员和撰写人员有共同的无障碍最佳实践。本文将涵盖一些创建技术内容的最佳实践。 &#xff0…

vue3 uniapp微信登录

根据最新的微信小程序官方的规定&#xff0c;uniapp中的uni.getUserInfo方法不再返回用户头像和昵称、以及手机号 首先&#xff0c;需获取appID&#xff0c;appSecret&#xff0c;如下图 先调用uni.getUserInfo方法获取code&#xff0c;然后调用后台的api&#xff0c;传入code&…

ssm049基于Vue.js的在线购物系统的设计与实现+vue

在线购物系统 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线购物系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线购物系统&#xff0c;它彻底改…

【已开源】​基于stm32f103的爬墙小车

​基于stm32f103的遥控器无线控制爬墙小车&#xff0c;实现功能为可平衡在竖直墙面上&#xff0c;并进行移动和转向&#xff0c;具有超声波防撞功能。 直接上&#xff1a; 演示视频如&#xff1a;哔哩哔哩】 https://b23.tv/BzVTymO 项目说明&#xff1a; 在这个项目中&…

软件无线电安全之GNU Radio基础 -上

GNU Radio介绍 GNU Radio是一款开源的软件工具集&#xff0c;专注于软件定义无线电&#xff08;SDR&#xff09;系统的设计和实现。该工具集支持多种SDR硬件平台&#xff0c;包括USRP、HackRF One和RTL-SDR等。用户可以通过GNU Radio Companion构建流程图&#xff0c;使用不同…