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)相关推荐

  1. 大学计算机基础实训excel,大学计算机基础实训指导书

    摘要: <大学计算机基础实训指导书>分为8章,内容包括第1章介绍了计算机基础知识,主要内容包括计算机的发展,计算机系统的组成,信息在计算机中的表示等;第2章介绍了操作系统基础知识,主要内容 ...

  2. 大学计算机基础实训指导第四版,大学计算机基础:学习指导与实训篇(第4版)...

    大学计算机基础:学习指导与实训篇(第4版) 语音 编辑 锁定 讨论 上传视频 上传视频 <大学计算机基础:学习指导与实训篇(第4版)>是2012年9月电子工业出版社出版的图书,作者是白清华 ...

  3. 数据库原理与应用实验指导书 实验四:数据查询

    数据库原理与应用 实验指导书 实验四:数据查询 一.实验目的 掌握SELECT语句的基本语法: 熟练掌握模糊查询的用法: 熟练掌握连接查询的用法: 熟练掌握子查询的用法. 二.实验内容 表数据的查询 ...

  4. 数据库原理与应用实验指导书 实验一:熟悉SQL Server 2012数据库管理系统

    数据库原理与应用实验指导书 实验一:熟悉SQL Server 2012数据库管理系统 实验类型: 综合性 实验要求: 必修 适用对象: 信息管理与信息系统.计算机科学与技术.软件工程.物联网工程 一. ...

  5. java实验指导书(实验四)答案_java程序设计实验指导书答案

    ? 狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的.狗通常的时候和人 打招呼会通过"摇摇尾巴",在被抚摸感到舒服的时候,会"旺旺叫",而在受到惊吓情 ...

  6. 计算机网络实验指导书实验报告,计算机网络实验一 熟悉常用的网络命令实验报告模板...

    实验一熟悉常用的网络命令实验报告 序号:姓名:学号:成绩指导教师: 1.实验目的: 学会使用常用ping ,ipconfig, nslookup, arp ,tracert等常用网络测试命令检测网络连 ...

  7. 数据库实验指导书+实验报告(2015)

    预备实验(选做) 实验名称:SQL Server 2005的安装与系统设置 实验目的和要求:掌握SQL Server 2005的安装和配置方法,熟悉SQL Server的系统环境,主要是对" ...

  8. shell的建立与执行实验报告_实验指导书--实验02 Linux Shell用户接口

    实验二:Linux Shell用户接口 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 通过本实验的学习,使学生掌握Linux Shell的使用方法. 二.实验内容 实验内容:实践Linu ...

  9. matlab 控制实验指导,智能控制系统-实验指导书-实验一-BP算法的MATLAB实现

    实验一.BP算法的MATLAB实现 一.实验目的 1.了解MATLAB集成开发环境 2.了解MATLAB编程基本方法 3.加深对BP算法的理解和掌握 二.实验内容 1.MATLAB基本指令和语法. 2 ...

最新文章

  1. ubuntu 安装SSH并设置免密码登录
  2. javascript:12种JavaScript MVC框架之比较
  3. Web UI 用户管理部分 Bug报告
  4. java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配
  5. c++清空输入缓冲区_干货 | C++的输入输出方法
  6. 教授坦言:只要不退休,就始终会面临考核压力;如何帮助学生迈过毕业论文这道槛,已成为职业负荷之一...
  7. 【有内鬼,终止交易】风靡朋友圈的壁纸,实现代码竟如此简单 | 原力计划
  8. 百度近五年最年轻高管团队出炉,能否“翻盘”成功?
  9. java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
  10. 浮点数运算和金额处理
  11. python编写2的n次方_2的n次方(python计算2的n次方的算法)
  12. Visio 2013导入图库
  13. 什么是云计算中的SaaS(软件即服务)?
  14. bag java_Bag.java · linbo/Bag_Queue_Stack_Java - Gitee.com
  15. Luat Inside | 致敬经典,使用Air724UG制作简易贪吃蛇
  16. C语言——计算某日是该年的第几天
  17. 盘一盘那些提效/创意的宝藏网站
  18. jwt的token要存mysql吗_认证的token不存到数据库
  19. 正太分布函数和反函数 标量值函数 (借鉴)
  20. 必读论文 | 云机器人必读论文10篇

热门文章

  1. ccsu1359 木棒相交 (叉积线段判交,并查集判断是否属于同一个集合)
  2. 51单片机——USART半双工模式通讯-波特率可选1.2版本
  3. Anaconda安装pytorch——清华镜像源不稳定
  4. Linux九阴真经之大伏魔拳残卷1(FTP,NFS)
  5. usb键码转linux键值,CH554串口接收数据转USB键值程序 CH559模拟USB复合设备,键鼠,支持类命令...
  6. java elf_从程序员角度看ELF(转载)
  7. 微课竞赛系统的设计与实现所需工作条件_精心设计、锤炼教技——聚焦教学竞赛,提升备战实力...
  8. Python学习笔记 列表中的冒号作用
  9. 临床试验统计分析报告应该包含哪些主要内容?
  10. 月内发布!芯华章将推出国内首个支持国产计算机架构的验证EDA