一、前言
在前面一段时间里,我们学习了Python中字符串、列表、元组、字典以及集合的相关知识,也对它们分别进行了单独的题目训练,本期博客我们将前面所学知识点灵活贯通起来,进行组合数据的综合实验练习,加深我们所学习的基础知识。
注意:代码仅供参考,还请大家多多思考!
二、我的环境
- 电脑系统:Windows 11
- 语言版本:Python 3.10.4
- 编译器:VSCode
三、实验目的与要求
- 掌握元组、列表与字典的系列操作函数及相关方法
- 了解3类基本组合数据类型;理解列表概念并掌握Python中的列表使用;理解概念并掌握Python中的字典使用;运用列表管理采集的信息,构建数据结构;运用字典处理复杂的数据信息;运用组合数据结构进行文本词频统计
- 熟练使用第三方库jieba
四、实验任务
1、程序填空
【填空11-1】有一个列表students如下:
students = [{'No': '2021003', '语文': 90, '数学': 95, '体育': 92}, {'No': '2021001', '语文': 80, '数学': 85, '体育': 82}, {'No': '2021002', '语文': 70, '数学': 75, '体育': 72}]
将列表students的数据内容提取处理,放到一个字典scores里,在屏幕上按学号从小到大的顺序显示输出scores的内容。输出内容例如下:
2021001: [80, 85, 82]
2021002: [70, 75, 72]
2021003: [90, 95, 92]
请完善代码。
students= [{'No': '2021003', '语文': 90, '数学': 95, '体育': 92}, {'No': '2021001', '语文': 80, '数学': 85, '体育': 82}, {'No': '2021002', '语文': 70, '数学': 75, '体育': 72}] scores= {} forstudinstudents: sv=stud.items() v= [] foritinsv: ifit[0] =='No': k=it[1] else: v.append(it[1]) scores[k] =vso=list(scores.items()) so.sort(key=lambdax: x[0], reverse=False) forlinso: print('{}:{}'.format(l[0], l[1]))
它运行的结果是:
2021001:[80, 85, 82] 2021002:[70, 75, 72] 2021003:[90, 95, 92]
【填空11-2】从键盘输入一个列表,计算输出列表元素的均方差。请完善下面的代码。
defmean(numlist): s=0fornuminnumlist: s=s+numreturns/len(numlist) defdev(numlist, mean): sdev=0fornuminnumlist: sdev=sdev+ (num-mean) **2return (sdev/ (len(numlist) -1)) **0.5# 请输入一个列表:ls=eval(input("")) print("均方差为:{:.2f}".format(dev(ls, mean(ls))))
它运行的结果是:
[1, 45, 98, 145, 198, 243] 均方差为:91.75
【填空11-3】a和b是两个列表变量,列表a为[3, 6, 9]已给定,键盘输入列表b,计算a中元素与b中对应元素指数幂的累加和。例如:键盘输入列表b为[1, 2, 3],累加和为13+26+39=42,因此,屏幕输出计算结果为42.
a= [3, 6, 9] b=eval(input()) s=0foriinrange(3): s+=pow(a[i], b[i]) print(s)
它运行的结果是:
[1, 2, 3] 768
【填空11-4】键盘输入一句话,用jieba分词后,将切分的词组按照在原话中逆序输出到屏幕上,词组中间没有空格。示例:输入:我爱祖国 输出:祖国爱我。
importjiebatxt=input("请输入一段中文文本:") ls=jieba.lcut(txt) foriinls[::-1]: print(i, end="")
它运行的结果是:
请输入一段中文文本:我爱祖国国祖爱我
2、程序编程
【编程11-1】以习总书记在庆祝中国共产党成立100周年大会上的讲话中一句话作为字符串变量s,完善Python程序,分别用Python内置函数及jieba库中已有函数计算字符串s的中文字符个数及中文词语个数。
提示:注意,中文字符包含中文标点符号。(提交的代码应包含题目中给出的部分)
importjiebas=input("请输入一段字符串:") n=len(s) m=len(jieba.lcut(s)) print("中文字符数为{},中文词语数为{}。".format(n, m))
它运行的结果是:
请输入一段字符串:今天,在中国共产党历史上,在中华民族历史上,都是一个十分重大而庄严的日子。我们在这里隆重集会,同全党全国各族人民一道,庆祝中国共产党成立一百周年,回顾中国共产党百年奋斗的光辉历程,展望中华民族伟大复兴的光明前景。中文字符数为106,中文词语数为53。
【编程11-2】你现在是仓库的负责人,仓库数格式是这样的:
total = [
{"huawei":"HUAWEI-A", "quantity": 100},
{"huawei":"HUAWEI-B", "quantity": 200},
{"huawei":"HUAWEI-C", "quantity": 400},
{"huawei":"HUAWEI-D", "quantity": 300},
]
请统计仓库的物品总数量(quantity)
现在HUAWEI-A要入库100件商品,请更新HUAWEI-A的库存记录
现在HUAWEI-E新品上市,要入库300件商品,请在total中新增一条相应记录
现在HUAWEI-B要退市,请将HUAWEI-B这行记录删掉 #此题可选
使用切片方法显示total中的最后一行记录。
total= [ {"huawei":"HUAWEI-A", "quantity": 100}, {"huawei":"HUAWEI-B", "quantity": 200}, {"huawei":"HUAWEI-C", "quantity": 400}, {"huawei":"HUAWEI-D", "quantity": 300}, ] nums= [] foriintotal: nums.append(i["quantity"]) all_quantity=sum(nums) print("请统计仓库的物品总数量(quantity)") print("仓库的物品总数量:{}".format(all_quantity)) print("---------------------------------------------------------------- ") print("现在HUAWEI-A要入库100件商品,请更新HUAWEI-A的库存记录") total[0]["quantity"] =200print("更新后数据:{}",format(total)) print("---------------------------------------------------------------- ") print("现在HUAWEI-E新品上市,要入库300件商品,请在total中新增一条相应记录") E= {"huawei":"HUAWEI-E", "quantity": 300} total.append(E) print("更新后数据:{}".format(total)) print("---------------------------------------------------------------- ") print("现在HUAWEI-B要退市,请将HUAWEI-B这行记录删掉") total.remove({"huawei":"HUAWEI-B", "quantity": 200}) print("更新后数据:{}".format(total)) print("---------------------------------------------------------------- ") print("使用切片方法显示total中的最后一行记录") last=total[(len(total) -1): (len(total) -2): -1] print("最后一行数据:{}".format(last))
它运行的结果是:
请统计仓库的物品总数量(quantity) 仓库的物品总数量:1000----------------------------------------------------------------现在HUAWEI-A要入库100件商品,请更新HUAWEI-A的库存记录更新后数据:{} [{'huawei': 'HUAWEI-A', 'quantity': 200}, {'huawei': 'HUAWEI-B', 'quantity': 200}, {'huawei': 'HUAWEI-C', 'quantity': 400}, {'huawei': 'HUAWEI-D', 'quantity': 300}] ----------------------------------------------------------------现在HUAWEI-E新品上市,要入库300件商品,请在total中新增一条相应记录更新后数据:[{'huawei': 'HUAWEI-A', 'quantity': 200}, {'huawei': 'HUAWEI-B', 'quantity': 200}, {'huawei': 'HUAWEI-C', 'quantity': 400}, {'huawei': 'HUAWEI-D', 'quantity': 300}, {'huawei': 'HUAWEI-E', 'quantity': 300}] ----------------------------------------------------------------现在HUAWEI-B要退市,请将HUAWEI-B这行记录删掉更新后数据:[{'huawei': 'HUAWEI-A', 'quantity': 200}, {'huawei': 'HUAWEI-C', 'quantity': 400}, {'huawei': 'HUAWEI-D', 'quantity': 300}, {'huawei': 'HUAWEI-E', 'quantity': 300}] ----------------------------------------------------------------使用切片方法显示total中的最后一行记录最后一行数据:[{'huawei': 'HUAWEI-E', 'quantity': 300}]
五、最后我想说
本期的实验到这里就结束了,后面要开始学习新内容了,怎么说呢,本期实验难度比之前的要难一点,比较考验基础知识的掌握情况,所以说想要学好一门语言还得是多学多练,结合起来学习得更快,希望大家都能从中学到知识,并转化成自己的,而不是直接复制粘贴解决任务。
最后,我很乐意跟大家分享知识并一起学习,和大家一起从零开始学习,我也希望得到大家的支持与肯定,谢谢!我也会继续努力的,一步步成为一个优秀的程序员,加油!