2018年春季《大学计算机基础》(理科)实验指导书 实验3 问题的描述—数据结构(1)
1. 实验目的
(1)了解如何用简单的数据结构描述问题
(2)掌握用Python 语言内置的几种基本数据结构(列表、元组、字典)解决问题的方法。
2. 实验任务
实验任务3-1 GPA计算
题目描述:
GPA,或称平均学分绩点,是世界上比较通用的比较不同学生学习整体成果的指标。北航的GPA采用4分制,算法如下:
设百分制成绩为x,相应的GPA=(60≤x≤100),60分GPA为1,60分以下为0。现输入N个百分制成绩x1,x2...xN(1≤N≤100,N为正整数)对应的学分分别为h1,h2...hN。请编程计算总GPA,保留到小数点后三位(0≤x≤100,x为整数;0.5≤h≤6,h为0.5的整数倍)。总GPA的计算公式为
输入格式:
输入数据包含2N+1行。
第1行为一个正整数N, 表示百分制成绩的个数。
第2至N+1行为N个百分制成绩x1,x2...xN。
第N+2至第2N+1行为对应的学分h1,h2...hN。
输出格式:
输出数据包含一行,为计算出的的总GPA(保留到小数点后三位)。
实验指导:
1.列表的使用方法
python中的列表(list)是最基本的数据结构,用于存储数据。序列中的每一个元素都被分配了一个数字,作为索引地址,默认第一个索引是0,第二个索引是1,以此类推。创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
如果要创建一个空列表,可以直接使用函数list()或使用一组空的方括号,例如:
list3 = []
或
list3 = list()
同一个列表内的各项数据可以是不同类型的,例如整数、字符串等。如果需要访问列表内的数据,使用索引地址进行,例如:
print(list1[0], list1[1])
显示得到的结果为:
physics chemistry
如果要向列表内添加数据,可以使用append()函数,数据会被自动添加到列表末尾,并顺次赋予一个新的索引地址,例如:
list1.append('math')
print(list1[4])
显示得到的结果为:
math
2.
参考运行结果:
实验任务3-2学生信息
题目描述:
每个学生都有一个学号和姓名。请你编写一个程序,输入n个学生的学号和姓名,记录下来,再输入k个学号进行查询,对于每个学号,如果在查询中则输出对应学生姓名,否则输出错误信息“Not Found!”
输入格式:
输入数据包含2n+k+2行:
第一行为一个整数n,表示学生数量;
接下来2n行,为n个学生的信息,每两行依次为一个学生的学号和姓名,学号保证由大小写字母和数字组成,姓名保证由大小写字母、数字、空格、下划线组成;
接下来一行,为一个整数k,表示待查询的学号个数;
接下来k行,为查询的k个学号,保证由大小写字母和数字组成。
输出格式:
输出数据包含k行,每行包含一个字符串,对每个查询,分别输出对应学生姓名或“Not Found!”。
实验指导:
python中的字典(dict)是基本数据结构之一,用于存储映射型数据。创建一个字典,可以将用逗号分隔的映射对用大括号包住,如:
dic = {'one': 1, 'two': 2, 'three': 3}
其中,key(即每个映射对冒号前的部分)不能为列表、字典这种易于增删的值,而应是字符串、元组或数值;value(即每个映射对冒号后的部分)没有类型要求。
如果要创造一个空字典,可以使用dict()或者一对空的大括号:
dic1 = dict()
dic2 = {}
print(dic1 == dic2) #输出True
添加字典元素时,可直接使用方括号,如dic['zero'] = 0;修改某个key对应的value也可以使用相同的方法。
当使用dic[key]获取(而不是添加、修改)字典中的值,也就是说dic[key]出现在=左端以外的地方的时候,如果字典中没有对应的键值,程序会报错中止。为了避免这种状况,可以利用dic.get(key,default)函数查找对应键的值,若存在则返回对应值,不存在则返回default参数的值。在这个函数中default参数可以省略,默认为None,如:
a = dic.get('one',-1) # a为1
b = dic.get('seven',-1) # b为-1
dic['seven'] = 7
c = dic.get('seven',-1) # c为7
参考运行结果:
注意:在网络OJ评测时,评测系统只检验输出内容是否正确,与你输出的时间无关;也就是说,无论你是读入储存所有查询再依次计算,还是对每次查询立即计算,其结果对于OJ系统来说均是一致的。
实验任务3-3 命名风格
题目描述:
在编程中,保持良好的编程习惯是很重要的,这其中包括一点就是变量的命名风格。合适的变量命名风格能使代码可读性更高。一种命名风格是将每个单词的首字母大写,例如DataBaseUser,由于大小写字母连在一起看起来特别像骆驼的驼峰,所以这种命名风格被称作驼峰命名法(CamelCase)。另外一种下划线命名方法是保持单词小写,在单词之间用下划线连接,例如data_base_user。请你编写一个函数,实现将驼峰命名法转变为下划线命名法。
输入格式:
输入数据包含一行,为一个用驼峰命名法命名的变量名。
输出格式:
输出数据包含一行,为转换后的用下划线命名法命名的变量名。
实验指导:
1.设计思路
观察两种命名法,可以发现两种命名法互相转化的方法。于是,我们只需将输入的字符串转化为列表,逐个字符处理后,将列表中重新调整的各项连接即可。
2.字符串常用处理方法
通过list()可以将输入的字符串转换为列表来进行操作。list(“abc”) 的结果为['a', 'b', 'c']。将列表各项连接成字符串的函数语法为:sep.join(seq)
参数说明
sep: 分隔符,可以为空('')
seq: 要链接的元素序列,可以为字符串、元组、列表等。
以sep作为分隔符,将seq所有的元素合并成一个新的字符串。
返回值: 返回一个以分隔符sep连接各个元素后生成的字符串。
如以下程序:
l=['2','3','4']
t=' ' #此处为一个空格构成的字符串,不是空串
s=t.join(l)
print(s)
你将获得“2 3 4”作为输出结果。
参考运行结果:
实验任务3-4 简单数据管理
题目描述:
上面的程序段定义了一个列表,包含美国阿拉巴马州、阿拉斯加州的部分郡级行政单位信息。我们提供了political_divisions.py程序,定义了political_divisions列表,以类似的格式包含了美国七个州的部分行政区信息。
political_divisions列表包含若干项目,每个项目为一个字典项,表示一个州份。每个州份分别包含三个字典项:
name项对应的值为一个字符串,表示州的名称;
abbreviation项对应的值为一个字符串,表示州的缩写;
counties项对应的值为一个列表,表示州所含的部分郡级行政单位名称。
现在要求你编写一个程序,可以对political_divisions.py程序中的political_division列表之内的信息进行两种查询操作:
操作1:给定一个州的名称或缩写,并给出一个字母,输出字典内包含的所有首字母为该字母的郡(counties)的信息;
如: 1 AK B表示搜索所有阿拉斯加州以B开头的郡级行政单位名称;
操作2:给出一个郡名称,输出字典内所有包含同名郡的州的缩写;
如: 2 Washington表示搜索所有包含名为Washington的郡级行政单位的州份缩写。
请你对用户的n个查询操作,分别完成查询操作。
输入格式:
输入数据共n+1行:
第一行为一个整数n,表示所有查询的总次数;
接下来的n行,每行包含一个查询:
对于第一种查询,数字1后有一个空格,其后为表示州名称或缩写的字符串,由大小写字母组成,其后再跟一个空格,为查询的首字母,大小写均有可能;
对于第二种查询,数字2后有一个空格,其后为表示郡级行政单位名称的字符串,由大小写字母和空格组成。
输出格式:
输出包含n行,每行包含数个以英文逗号+空格隔开的字符串,包含每次查询的所有结果,以字典序排列;最后一个结果后没有逗号。
实验指导:
1.设计思路
对于两种查询,我们的思路都是类似的,即遍历所有可能的选项,筛选出其中符合条件的,然后使用相应格式输出。对于第一种查询,我们可以遍历州份,找到对应的州,再从其郡的名单里筛选出符合要求首字母的郡名;对于第二种查询,我们需要遍历所有郡名,找到对应的州的缩写。
本题内容较为综合,不论是输入处理,还是最后排序输出,都包含了一些值得关注的细节。依写法不同,可能需要多重循环嵌套。
2.for循环与数据结构配合使用
for循环不仅可以和range结构搭配,也可以用于遍历数据结构,具体用法为 for element in structure。当structure是列表或元组时,element依次被赋值为structure内部的各项内容的值;当structure是字典时,element依次被赋值为字典的每个key值。
试研究以下程序:
odds = [1,3,5,7]
for num in odds:
print(num) #输出1,3,5,7
dishes = {'eggs': 2, 'sausage': 1}
for obj in dishes:
print(obj) #输出eggs,sausage
for obj in dishes:
print(dishes[obj]) #输出2,1
3.内置的排序方法
对一个包含相同数据类型的列表,Python提供了内置的排序方法。如对于列表lis,lis.sort()会直接调整lis的内部元素顺序,使其顺序从小到大。使用sorted(lis)则可以直接获得一份lis的有序拷贝。具体结果可以自行试验完成。
参考运行结果:
实验任务3-5 质数的和(选做)
题目描述:
给定2个整数a,b,求出它们之间(含a,b)所有质数的和。
输入格式:
输入数据包含一行, 包含两个数字,分别为a、b(a≤b≤500000)
输出格式:
输出数据包含一行,为一个整数,表示a,b之间(含a,b)所有质数的和。
实验指导:
使用搜索引擎(如百度),查找在值很大的情况下,较快批量寻找质数的方法,理解该方法,并以此为基础编程。
参考运行结果:
提示:本题测试数据很大,采用效率较低的方法很可能出现TLE错误。可以采用题目范围内较大的数据进行测试,如果运行时间较长,尽量考虑其他方法。效率较低但答案正确的方法也可以拿到40%~80%分数。
2018年春季《大学计算机基础》(理科)实验指导书 实验3 问题的描述—数据结构(1)相关推荐
- 大学计算机基础实训excel,大学计算机基础实训指导书
摘要: <大学计算机基础实训指导书>分为8章,内容包括第1章介绍了计算机基础知识,主要内容包括计算机的发展,计算机系统的组成,信息在计算机中的表示等;第2章介绍了操作系统基础知识,主要内容 ...
- 大学计算机基础实训指导第四版,大学计算机基础:学习指导与实训篇(第4版)...
大学计算机基础:学习指导与实训篇(第4版) 语音 编辑 锁定 讨论 上传视频 上传视频 <大学计算机基础:学习指导与实训篇(第4版)>是2012年9月电子工业出版社出版的图书,作者是白清华 ...
- 数据库原理与应用实验指导书 实验四:数据查询
数据库原理与应用 实验指导书 实验四:数据查询 一.实验目的 掌握SELECT语句的基本语法: 熟练掌握模糊查询的用法: 熟练掌握连接查询的用法: 熟练掌握子查询的用法. 二.实验内容 表数据的查询 ...
- 数据库原理与应用实验指导书 实验一:熟悉SQL Server 2012数据库管理系统
数据库原理与应用实验指导书 实验一:熟悉SQL Server 2012数据库管理系统 实验类型: 综合性 实验要求: 必修 适用对象: 信息管理与信息系统.计算机科学与技术.软件工程.物联网工程 一. ...
- java实验指导书(实验四)答案_java程序设计实验指导书答案
? 狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的.狗通常的时候和人 打招呼会通过"摇摇尾巴",在被抚摸感到舒服的时候,会"旺旺叫",而在受到惊吓情 ...
- 计算机网络实验指导书实验报告,计算机网络实验一 熟悉常用的网络命令实验报告模板...
实验一熟悉常用的网络命令实验报告 序号:姓名:学号:成绩指导教师: 1.实验目的: 学会使用常用ping ,ipconfig, nslookup, arp ,tracert等常用网络测试命令检测网络连 ...
- 数据库实验指导书+实验报告(2015)
预备实验(选做) 实验名称:SQL Server 2005的安装与系统设置 实验目的和要求:掌握SQL Server 2005的安装和配置方法,熟悉SQL Server的系统环境,主要是对" ...
- shell的建立与执行实验报告_实验指导书--实验02 Linux Shell用户接口
实验二:Linux Shell用户接口 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 通过本实验的学习,使学生掌握Linux Shell的使用方法. 二.实验内容 实验内容:实践Linu ...
- matlab 控制实验指导,智能控制系统-实验指导书-实验一-BP算法的MATLAB实现
实验一.BP算法的MATLAB实现 一.实验目的 1.了解MATLAB集成开发环境 2.了解MATLAB编程基本方法 3.加深对BP算法的理解和掌握 二.实验内容 1.MATLAB基本指令和语法. 2 ...
最新文章
- ubuntu 安装SSH并设置免密码登录
- javascript:12种JavaScript MVC框架之比较
- Web UI 用户管理部分 Bug报告
- java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配
- c++清空输入缓冲区_干货 | C++的输入输出方法
- 教授坦言:只要不退休,就始终会面临考核压力;如何帮助学生迈过毕业论文这道槛,已成为职业负荷之一...
- 【有内鬼,终止交易】风靡朋友圈的壁纸,实现代码竟如此简单 | 原力计划
- 百度近五年最年轻高管团队出炉,能否“翻盘”成功?
- java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
- 浮点数运算和金额处理
- python编写2的n次方_2的n次方(python计算2的n次方的算法)
- Visio 2013导入图库
- 什么是云计算中的SaaS(软件即服务)?
- bag java_Bag.java · linbo/Bag_Queue_Stack_Java - Gitee.com
- Luat Inside | 致敬经典,使用Air724UG制作简易贪吃蛇
- C语言——计算某日是该年的第几天
- 盘一盘那些提效/创意的宝藏网站
- jwt的token要存mysql吗_认证的token不存到数据库
- 正太分布函数和反函数 标量值函数 (借鉴)
- 必读论文 | 云机器人必读论文10篇
热门文章
- ccsu1359 木棒相交 (叉积线段判交,并查集判断是否属于同一个集合)
- 51单片机——USART半双工模式通讯-波特率可选1.2版本
- Anaconda安装pytorch——清华镜像源不稳定
- Linux九阴真经之大伏魔拳残卷1(FTP,NFS)
- usb键码转linux键值,CH554串口接收数据转USB键值程序 CH559模拟USB复合设备,键鼠,支持类命令...
- java elf_从程序员角度看ELF(转载)
- 微课竞赛系统的设计与实现所需工作条件_精心设计、锤炼教技——聚焦教学竞赛,提升备战实力...
- Python学习笔记 列表中的冒号作用
- 临床试验统计分析报告应该包含哪些主要内容?
- 月内发布!芯华章将推出国内首个支持国产计算机架构的验证EDA