- 实验01、Python开发环境与基本操作
- 实验02、Python 运算符、内置函数(8题)
- 1、两点距离(数据输入输出 crr12)
- 2、圆柱体计算,结果保留两位小数(数值 crr11)
- 3、三门课成绩( 混合运算和类型转换 crr18)
- 4、体育测试成绩(数值 crr40)
- 5、找零钱(数值 crr41)
- 6、求三位数中每位数字之和(运算符crr16) //选做
- 7、输出各位数字之和(map函数) //选做
- 8、进制转换 //选做
- 实验03、选择与循环(8题)
- 1、10的阶乘(循环crr118)
- 2、判断闰年(选择结构)
- 3、列表操作(循环结构)
- 4、计算糖果总数(循环 crr127)
- 5、郭大侠的武力值(循环 crr126)
- 6、因式分解(条件+循环)//选做
- 7、计算奇数的和 //选做
- 8、分段函数 //选做
- 实验04、列表(9题)
- 1、列表切片
- 2、列表基本操作(crr20)
- 3、输出月份(列表 crr61)
- 4、列表生成式 (crr22)
- 5、单词长度(crr23)
- 6、列表、enumerate、filer(book实验4)
- 7、列表、filter、lambda
- 8、列表、reduce、lambda
- 9、列表+循环
- 实验05、元组、字典、集合(8题)
- 1、餐厅下午茶 (列表与元组 crr66)
- 2、高考录取率(列表与元组crr39)
- 3、统计字符次数(字典的基本操作crr89)
- 4、国土面积(字典的整体操作crr90)
- 实验06、函数(10题)
- 1、判断奇数(函数crr171)
- 2、闰年(函数crr174)
- 3、完数(函数crr177)
- 4、列表重复元素判定(函数crr182)
- 4、密码强度(函数crr184)
- 5、lambda()函数应用(crr80)
- 6、可变长度参数
- 7、模拟内置函数sum() //选做
- 8、递推法(book实验9) //选做
- 9、递归法(book实验9) //选做
- 10、垃圾邮件简单识别(book实验21) //选做
- 实验07、面向对象程序设计(5题)
- 1、根据人的特征定义Person类(曹洁)
- 2、继承Person类生成Teacher类(曹洁)
- 3、设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算(DFG)
- 4、自定义Stack类。 //选做
- 5、自定义myQueue类。 //选做
- 实验08、文件与文件夹操作(10题)
- 1、文本文件读写基础。
- 2、(指导书 实验25)编写一个程序 demo.py,要求运行该程序后,生成 demo_new.py 文件,其中内容与 demo.py 一样,只是在每一行的后面加上行号。要求行号以#开始,并且所有行的#符号垂直 对齐。
- 3、编写程序,使用pickle模块将包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。
- 4、计算文件MD5的值。
- 5、(字符串crr211)统计三国演义中高频词
- 6、使用shutil模块中的move()方法进行文件移动。
- 7、编写代码,将当前工作目录修改为“c:”,并验证,最后将当前工作目录恢复为原来的目录。
- 8、编写程序,用户输入一个目录和一个文件名,搜索该目录及其子目录中是否存在该文件。 //选做
- 9、编写程序,实现磁盘垃圾文件清理功能。 //选做
- 10、编写程序,统计指定文件夹内幻灯片数量。 //选做
- 实验09、字符串(5题)
- 1、输出随机字符串
- 2、字符串操作(字符串crr103)
- 3、货币的转换(字符串crr107)
- 4、凯撒加密(book实验19) //选做
- 5、卡普耶卡6174猜想(book实验8) //选做
- 实验10、正则表达式(5题)
- 1、字符替换(曹洁)
- 2、检测字母或数字(曹洁)
- 3、纠正字母(教材习题7.2)
- 4、输出英文中所有长度为3个字母的单词(教材习题8.2) //选做
- 5、查找并输出字符串S中AABB形式的词语,如踏踏实实、密密麻麻等等。(book实验34 改造) //选做
- 实验11、数据库编程(4题)
- 1、创建一个sqlite3数据库,完成下列操作
- 2、操作MySQL数据库。
- 删除数据库
- 创建数据库
- 删除数据表
- 创建数据表
- 删除所有数据
- 插入数据
- 修改数据
- 删除指定的数据
- 查询并输出数据
- 关闭游标和连接
- 3、操作MongoDB数据库
- 4、Excel操作。 //选做
【实验类型】验证型
【实验学时】2
【实验目标】
- 熟悉Anaconda3开发环境安装与使用
- 熟练掌握Spyder的基本操作。
- 熟练掌握Python程序的创建和运行方式,包括在开发环境中直接运行Python程序和在命令提示符环境中交互式运行方式。
- 了解Python代码编写规范和注释语句。
- 熟悉Python基本输入输出函数或语句的用法。
- 熟悉Python标准库和扩展库的导入和使用方式。
- 熟悉pip工具的用法,能够安装新模块、查看已安装模块、升级或卸载已安装模块。
- 理解和掌握Python程序的__name__属性。
【实验内容】
本次实验安排在课外自行完成。
1、在windows操作系统下,完成Anaconda3-5.2.0安装和基本使用。
2、参照课件PPT,启动Spyder开发环境,并熟悉其使用方法(直接运行方式、命令提示符下交互式运行方式)。
(1)使用print函数输出字符串“Hello World!”;
(2)使用print函数输出表达式9999**99(9999的99次方)的值。
(3)参照课堂介绍的续行符、注释符,在Spyder中编写代码予以练习。
3、参照课件PPT,以安装中文分词扩展库jieba为例,练习使用pip命令在线和离线安装jieba扩展库,以及卸载jieba扩展库。
4、参照课件PPT,以random标准库、numpy扩展库为例,练习标准库和扩展库的导入方法,以及导入后常用函数的用法。注意:random标准库中各个函数经常用到。
5、参照课件PPT,理解Python程序既可以直接运行,也可以当作模块来使用,以及这两种方式下,__name__变量值得含义。
输入两个点的坐标(x1,y1)和(x2,y2),输出两点间距离是多少?结果保留2位小数。
利用Python计算,结果保留两位小数:底面半径为66,高为24.2的圆柱体的体积和表面积。
小明参加语文,数学和英语考试,输入小明的3门成绩,求3门成绩的和,平均以及最高和最低分是多少? 如果三门课程以权重0.5,0.3和0.2计入总分,求小明的最终总评成绩是多少?
学生参加体育测试,有三个单项,分别是短跑、3分钟跳绳和跳远。每个单项的满分均为100分,且单项成绩为整数,单项成绩分别以0.4、0.3和0.3的权重计入测试总评成绩。输入一名学生的三个单项成绩,计算他的体育测试总评成绩。
商店需要找钱给顾客,现在只有50元、5元和1元的人民币若干张。输入一个整数金额值,给出找钱的方案,假设人民币足够多,且优先使用面额大的钱币。
输入一个三位的整数,求这个三位数每一位上数字的和是多少?
7、输出各位数字之和(map函数) //选做编写程序,输入任意大的自然数,使用map函数输出各位数字之和。(3498)
编写程序,输入一个自然数,输出它的二进制、八进制、十六进制表示形式。 (3500)
前5题为必须完成题,后3题为选做题。
1、10的阶乘(循环crr118)编写程序,计算1 × 2 × 3 × … × 10。
编写程序,运行后用户输入4位整数作为年份,判断其是否为闰年。如果年份能被400整除,则为闰年;如果年份能被4整除但不能被100整除也为闰年。
编写程序,生成一个包含50个随机整数的列表,然后删除其中所有奇数。(提示:从后向前删除)。
编写程序,计算糖果总数。假设有一盒糖果,按照如下方式从中取糖果: 1个1个地取,正好取完。 2个2个地取,还剩1个。 3个3个地取,正好取完。 4个4个地取,还剩1个。 5个5个地取,还差1个。 6个6个地取,还剩3个。 7个7个地取,正好取完。 8个8个地取,还剩1个。 9个9个地取,正好取完。 请问:这个盒子里一共有多少个糖果?
5、郭大侠的武力值(循环 crr126)编写程序,计算“五天向上”和“两天向下”两种情况下的武力值。假设一年有365天,郭大侠第一天的武力值为1。如果郭大侠每天勤于练功,每天武力值相比前一天会增加1%;如果郭大侠每天不练功,每天武力值相比前一天会减少1%。郭大侠制订了一年的练功计划:从第一天开始,前5天每天都练功,然后休息2天;接来下又练功5天,休息2天;如此往复,请计算一年后,郭大侠的最终武力值(结果保留2位小数)。
编写程序,用户从键盘输入小于1000的整数,对其进行因式分解。例如,10=2×5,60=2×2×3×5。
编写程序,至少使用2种不同的方法计算100以内所有奇数的和。
编写程序,实现分段函数计算,如下表所示。
x y
x<0 0
0<=x<5 x
5<=x<10 3x-5
10<=x<20 0.5x-2
20<=x 0
本实验9道题均为必须完成题。
1、列表切片编写程序,用户输入一个列表和两个整数作为下标,然后输用切片获取并输出介入两个下标之间的元素组成的子列表。例如,用户输入[1,2,3,4,5,6]和2,5后,程序输出[3,4,5,6]。
已知有列表l=[54,36,75,28,50],请根据要求完成以下操作:
① 在列表尾部插入元素42。
② 在28前面插入元素66。
③ 删除并输出元素28。
④ 将列表按降序排序。
⑤ 清空整个列表。
已知一个表示年份数据的列表(如下)。编写程序,实现根据输入的数字输出对应的月份信息。例如,输入6,则输出June。
[“January”,“February”,“March”,“April”,“May”,“June”, “July”,“August”,“September”,“October”,“November”,“December”]。
使用列表生成式生成列表,其元素为100以内所有能被3整除的数。
输入一句英文句子,例如:the scenery along the should be and the mood at the view,输出其中最长的单词及长度。
6、列表、enumerate、filer(book实验4)编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表。要求:利用列表、内置函数 enumerate()、filer()来实现。
编写程序,输入一个包含若干整数的列表,输出一个新列表,要求新列表中只包含原列表中的偶数。
编写程序,输入一个包含若干整数的列表,输出列表中的所有整数连乘的结果。
9、列表+循环编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片)
实验05、元组、字典、集合(8题) 1、餐厅下午茶 (列表与元组 crr66)某餐厅推出了优惠下午茶套餐活动。顾客可以以优惠的价格从给定的糕点和给定的饮料中各选一款组成套餐。已知,指定的糕点包括松饼(Muffins)、提拉米苏(Tiramisu)、芝士蛋糕(Cheese Cake)和三明治(Sandwich);指定的饮料包括红茶(Black tea,)、咖啡(Coffee)和橙汁(Orange Juice)。请问,可以搭配出哪些套餐供客户选择?请依次打印输出各种套餐。
根据十年高考录取率表创建列表,并完成如下操作:
① 计算十年平均录取率。
② 找出录取率最高的年份。
表1 十年高考录取率表
年份 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
录取率 57% 56% 57% 62% 69% 72% 75% 76% 74.3% 74%
#用字典统计英文句子“Life is short, we need Python.”中各字符出现的次数(大小写算同一个字符)。
#已知字典{‘Canada’: 997.1,‘Russia’: 1707.5, ‘China’: 960.1},按照国家名的升序输出Russia、Canada、China三个国家和对应的国土面积
5、籍贯分布(字典的整体操作crr92)
小夏和小迪接到一个调研任务,需要按省份统计班级同学的籍贯分布情况。
他们决定两人分头统计男生和女生的籍贯分布,最后再汇总结果。
已知小夏统计的女生籍贯分布是:dicGirls={‘Jiangsu’:3,‘Zhejiang’:2,‘Jilin’:1} ;
小迪统计的男生籍贯分布是:dicBoys={‘Jiangsu’:8,‘Zhejiang’:5,‘Shandong’:5,‘Anhui’:4,‘Fujian’:2}。
请编写程序将两人的调研结果合并并输出。
6、交集、并集和差集
编写程序,输入两个集合 setA 和 setB,分别输出它们的交集、并集和差集。(3499)
7、字典操作
设计一个字典,并编写程序。用户输入内容作为键,然后输出字典中对应的值。如果用户输入的键不存在,则输出“输入的键不存在”。
8、电影打分与推荐 //选做
基于用户协同过滤算法的电影打分与推荐。编写程序,生成模拟多人对多部电影打分(1~5分),然后根据这些数据对某用户A进行推荐。规则为:在已有数据中选择与该用户A的爱好最相似的用户B,然后从用户B已经看过但用户A还没有看过的电影中选择用户B打分最高的电影推荐给用户A。其中,相似度的计算标准:(1)两个用户共同打分过的电影越多,越相似;(2)两个用户对共同打分的电影的打分越接近,越相似。
前6题为必须完成题,后4题为选做题。
1、判断奇数(函数crr171)编写isOdd( )函数,该函数应有一个整数参数,如果该参数为奇数,函数返回True,否则返回False。并编写主程序调用该函数进行测试。
def isOdd(n):
return n%2!=0
n=int(input('输入一个整数:'))
print(str(n)+' is odd ') if isOdd(n) else print(str(n)+' is not odd')
2、闰年(函数crr174)
编写一个程序,在主程序中求1900 ~ 2020年中所有的闰年,每行输出5个年份。闰年即能被4整除但不能被100整除,或者能被400整除的年份。要求定义一个函数isLeapYear (year ),该函数用来判断某年是否为闰年,是闰年则函数返回True,否则返回False。并编写主程序调用该函数进行测试。
def isLeapYear(year):
if year%4==0 and year%100!=0 or year%400==0:
return True
count=0;
for n in range(1900,2021):
if isLeapYear(n):
print(n,end="t")
count+=1;
if count%5==0:
print()
3、完数(函数crr177)
在主程序中输入一个整数n,判断该数是否为完数。所谓完数(perfect number),是一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。如6 = 1 + 2 + 3,所以6是完数。要求定义一个函数,用来判断某个整数是否为完数,是完数则函数返回1,否则返回0。最后在主程序中测试该函数。是完数输出"YES",不是输出"NO"。并编写主程序调用该函数进行测试。
def fn(n):
s=[i for i in range(1,n) if n%i==0]
return 1 if sum(s)==n else 0
n=int(input('输入一个整数'))
print('YES') if fn(n)==1 else print('NO')
4、列表重复元素判定(函数crr182)
编写一个函数,接收一个列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原列表的值。输出"YES"如果重复,反之输出“NO”。 编写主程序调用该函数进行测试。
def relist(ls):
for c in ls :
if ls.count(c)>1:
return True
else:
return False
n=eval(input('输入列表元素'))
if relist(n):
print('YES')
else:
print('NO')
4、密码强度(函数crr184)
输入一串字符作为密码,密码只能由数字与字母组成。编写一个函数judge(password),用来求出密码的强度level,并在主程序中测试该函数,根据输入,输出对应密码强度。密码强度判断准则如下(满足其中一条,密码强度增加一级):①有数字;②有大写字母;③有小写字母;④位数不少于8位。按行输入三个字符串,分别输出它们的密码强度(0~4)。编写主程序调用该函数进行测试。
利用lambda()函数按行输出列表[3, 5, -7, -1, 0, -9]中所有的负数。
编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。编写主程序调用该函数进行测试。编写主程序调用该函数进行测试。
7、模拟内置函数sum() //选做编写函数,模拟内置函数sum()。编写主程序调用该函数进行测试。
8、递推法(book实验9) //选做假设一段楼梯共 15 个台阶,小明一步最多能上 3 个台阶。使用递推法计算小明上这段楼梯一共有多少种方法。编写主程序调用该函数进行测试。
假设一段楼梯共 15 个台阶,小明一步最多能上 3 个台阶。使用递归法计算小明上这段楼梯一共有多少种方法。编写主程序调用该函数进行测试。
10、垃圾邮件简单识别(book实验21) //选做朴素贝叶斯算法、支持向量机算法等主流的垃圾邮件分类算法都依赖于特征向量的提取和数据模型的训练,其中特征向量的提取又依赖于对邮件正文的分词结果。垃圾邮件发送者往往会在邮件中插入一些干扰字符,影响分词结果。比如,在“发票”中间插入【,使得发票一词变成“发【票”。
一般情况下,一封邮件中,不会出现太多类似于【、】、〖、〗、*、-、/、这样的字符。如果一封邮件中包含类似字符数量超过一定比例,可以直接判为垃圾邮件,而不需要朴素贝叶斯等算法去识别,可以大幅度提高垃圾邮件识别速度。
编写程序,设计一个函数check(text,rate=0.2),对给定的字符串(邮件内容)进行识别,给出“正常邮件”、“可疑垃圾邮件”两种提示。
提示:利用内置函数sum()、map()、lambda和字符串方法实现。参数rate为特殊字符百分率的上限值。
前3题为必须完成题,后2题为选做题。
{
“python.linting.flake8Enabled”:true,
“python.formatting.provider”: “yapf”,
“python.linting.flake8Args”: ["–max-line-length=248"],
“python.linting.pylintEnabled”: false,
“workbench.startupEditor”: “newUntitledFile”,
“python.pythonPath”: “C:UsersuserAppDataLocalProgramsPythonPython38”,
“python.linting.enabled”: false,
“editor.fontSize”: 18
}
1、根据人的特征定义Person类(曹洁)该类根据人的特征,除了姓名、年龄、性别三个属性外,还有一个show方法,用于显示姓名、年龄、性别。
class Person:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def setName(self,name):
self.name=name
def getName(self):
return self.name
def setAge(self,age):
self.age=age
def getAge(self):
return self.age
def setSex(self,sex):
self.sex=sex
def getSex(self):
return self.sex
def show(self):
return 'name:{0},age:{1},sex:{2}'.format(self.name,self.age,self.sex)
2、继承Person类生成Teacher类(曹洁)
Teacher类继承了Person类的姓名、年龄、性别三个属性外,还有教授的课程(course)、教师工资(salary)。此外,教师类还应该有上课setCourse()、涨工资setSalary()这样行为。
from Person import Person #从Person模块导入Person类
class Teacher(Person):
def __init__(self, name, age, sex,course,salary):
Person.__init__(self, name, age, sex)
self.course=course
self.salary=salary
def setCourse(self,course):
self.course=course
def getCourse(self):
return self.course
def setSalary(self,salary):
self.salary=salary
def getSalary(self):
return self.salary
def show(self):
return(Person.show(self)+(',course:{0},salary:{1}'.format(self.course,self.salary)))
3、设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算(DFG)
class Vecter3:
def __init__(self, x=0, y=0, z=0):
self.X = x
self.Y = y
self.Z = z
def __add__(self, n):
r = Vecter3()
r.X = self.X + n.X
r.Y = self.Y + n.Y
r.Z = self.Z + n.Z
return r
def __sub__(self, n):
r = Vecter3()
r.X = self.X - n.X
r.Y = self.Y - n.Y
r.Z = self.Z - n.Z
return r
def __mul__(self, n):
r = Vecter3()
r.X = self.X * n
r.Y = self.Y * n
r.Z = self.Z * n
return r
def __truediv__(self, n):
r = Vecter3()
r.X = self.X / n
r.Y = self.Y / n
r.Z = self.Z / n
return r
def __floordiv__(self, n):
r = Vecter3()
r.X = self.X // n
r.Y = self.Y // n
r.Z = self.Z // n
return r
def show(self):
print((self.X,self.Y,self.Z))
v1 = Vecter3(1,2,3)
v2 = Vecter3(4,5,6)
v3 = v1+v2
v3.show()
v4 = v1-v2
v4.show()
v5 = v1*3
v5.show()
v6 = v1/2
v6.show()
4、自定义Stack类。 //选做
模拟栈操作,实现基本的入栈、出栈操作(DFG, codestackDfg.py)
class Stack:
def __init__(self, size=10):#创建栈对象并进行初始化,默认栈大小为10
self.__content = []# 使用列表存放栈的元素
self.__size = size# 初始栈大小
self.__current = 0 # 栈中元素个数初始化为0
def empty(self):#清空栈
self.__content = []
self.__current = 0
def isEmpty(self):#测试栈是否为空
return not self.__content
def setSize(self, size):#调整栈的大小,可以增大或缩小栈空间
# 如果缩小空间时指定的新大小,小于已有元素个数
# 则删除指定大小之后的已有元素
if size < self.__current:
for i in range(size, self.__current)[::-1]:
del self.__content[i]
self.__current = size
self.__size = size
def isFull(self):#'测试栈是否已满
return self.__current == self.__size
def push(self, v):#入栈
if self.__current < self.__size:
self.__content.append(v)
self.__current = self.__current+1# 栈中元素个数加1
else:
print('Stack Full!')
def __str__(self):
return str(self.__content)
__repr__ = __str__
def pop(self):#出栈
if self.__content:
self.__current = self.__current-1# 栈中元素个数减1
return self.__content.pop()
else:
print('Stack is empty!')
def show(self):#显示当前栈对象中的元素
print(self.__content)
def showRemainderSpace(self):#显示栈对象剩余空间大小
print('Stack can still PUSH ', self.__size-self.__current, ' elements.')
sk=Stack(6)
sk.push(12)
sk.push(23)
sk.push(33)
sk.pop()
sk.show()
sk.showRemainderSpace()
5、自定义myQueue类。 //选做
模拟队列结构,实现入队、出队操作,提供超时功能(DFG, codemyQueue.py)
要求实现入队、出队以及修改队列大小和判 断队列是否为空、是否为满的功能,同时要求在入队时如果队列已满则等待指定时间、出队 时如果队列已空则等待指定时间等辅助功能。
import time
class myQueue:
def __init__(self, size = 10):
self.__content = []
self.__size = size
self.__current = 0
def setSize(self, size):
if size < self.__current: #如果缩小队列,应删除后面的元素
for i in range(size, self.__current)[::-1]:
del self.__content[i]
self.__current = size
self.__size = size
def put(self, v, timeout=999999):#入队
if self.isFull():
return '队列已满'
for i in range(timeout): # 超时放弃
if self.__current < self.__size: # 队列满
self.__content.append(v)
self.__current = self.__current+1
break
time.sleep(1)
else:
return '超时放弃'
def get(self, timeout=999999): # 出队
if self.isEmpty():
return '队列为空'
for i in range(timeout): # 超时放弃
if self.__content:
self.__current = self.__current-1
return self.__content.pop(0)
time.sleep(1)
else:
return '超时放弃'
def show(self):# 如果列表非空,输出列表
if self.__content:
print(self.__content)
else:
print('The queue is empty')
def empty(self):
self.__content = []
self.__current = 0
def isEmpty(self):
return not self.__content
def isFull(self):
return self.__current == self.__size
if __name__ == '__main__':
print('Please use me as a module.')
import untitled13
mq=myQueue()
mq.put(11)
mq.put(22)
mq.put(33)
mq.get()
mq.show()
实验08、文件与文件夹操作(10题)
前7题为必须完成题,后3题为选做题。
1、文本文件读写基础。编写程序,在D盘根目录下创建一个文本文件test.txt,并向其中写入字符串hello world。
fp = open(r'D:test.txt','a+') #r'是防止字符转义的(t)
print('hello world',file=fp)
fp.close()
2、(指导书 实验25)编写一个程序 demo.py,要求运行该程序后,生成 demo_new.py 文件,其中内容与 demo.py 一样,只是在每一行的后面加上行号。要求行号以#开始,并且所有行的#符号垂直 对齐。
filename='demo.py'
with open(filename,'r') as fp:
lines=fp.readlines()
maxLength=len(max(lines,key=len))#Key功能将用于评估a中最大的项目的值
#rstrip删除 string 字符串末尾的指定字符(默认为空格).
% ljust()方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串
lines=[line.rstrip().ljust(maxLength)+'#'+str(index)+'n' for index,line in enumerate(lines)]
with open(filename[:-3]+'_new.py','w') as fp:
fp.writelines(lines)
3、编写程序,使用pickle模块将包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。
4、计算文件MD5的值。
MD5是一种常用的哈希算法,不论原始信息长度如何,总是计算得到一个固定长度的二进制字符串。该算法对原文的改动非常敏感,因此该算法被用于检验信息是否被修改过,用于文件完整性检验,或者数字签名。
Python标准库hashlib中md5()函数可以用来计算字节串的MD5值。编写一个程序,要求输入一个文件名,然后输出该文件的MD5值,如果文件不存在就给出相应提示。
下载《三国演义》电子文本。使用jieba库对文件“三国演义.txt”中的文本进行分词,并对每个词出现的次数进行统计,将词频最高的前三个词语输出。运行效果如下。
输入:无
输出:[(934, ‘曹操’), (831, ‘孔明’), (761, ‘将军’)]
要求程序运行时,通过命令行参数指定要清理 的文件夹,然后删除该文件夹及其子文件夹中所有扩展名为 tmp、log、obj、txt 以及大 小为 0 的文件。
在某个文件夹中有若干子文件夹,在每个子文件夹中都有一些扩展名为pptx的powerpoint2007文件。编写程序,统计指定文件夹内所有PPTX文件的幻灯片总数量。
提示:需要安装扩展库python-pptx,利用os,os.path模块。
编写程序,输出由英文字母大小写或数字组成的长度为10且不重复的随机字符串。
2、字符串操作(字符串crr103)给定一个字符串"www.moe.gov.cn",编写程序,实现如下功能(按行输出):
(1)输出第一个字符。
(2)输出前三个字符。
(3)输出后三个字符。
(4)输出字符串的总长度。
(5)输出字符’o’在字符串中第一个位置的索引值(可使用index( )方法)。
(6)输出字符’o’出现的总次数(可使用count( )方法)。
(7)将字符串中所有的“.”替换为“”并输出。
(8)将字符串中所有的字母全部转换为大写字母并输出。
(9)删除字符串中的标点符号,把字符串拆分为四个字符串。
经过上述操作之后,再次输出该字符串,观察字符串有没有变化,并思考原因。
编写程序,实现货币的转换。从键盘输入美元的币值,转换为人民币的币值并输出,结果保留2位小数。假设美元兑换人民币的汇率是6.868。运行效果如下。
输入:请输入要兑换的美元,以
结
束
:
3.5
结束:3.5
结束:3.5
输出:24.04
凯撒加密算法的原理:把明文中每个英文字母替换为该字母在字母表中后面第k个字母。如果后面k个字母超出字母表的范围,则字母表首尾相接,也就是字母Z的下一个字母是A,字母z的下一个字母是a。要求明文中的大写字母、小写字母分别进行处理。编写程序,输入一个字符串作为明文和一个整数作为凯撒加密算法的密钥,最后输出加密后的结果。
提示:利用字符串和切片操作。
1955年,印度数学家卡普耶卡对4位数字进行研究发现一个规律:对任意各位数字不同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且中间操作最多不超过7次。
例如,数字5298。
Step1, 5298的四个数字由大到小重新排列成一个四位数,则9852-2589=7263。
Step2, 7263的四个数字由大到小重新排列成一个四位数,则7632-2367=5265。
Step3, 5265的四个数字由大到小重新排列成一个四位数,则6552-2556=3996。
Step4, 3996的四个数字由大到小重新排列成一个四位数,则9963-3699=6264。
Step5, 6264的四个数字由大到小重新排列成一个四位数,则6642-2466=4176。
Step6, 4176的四个数字由大到小重新排列成一个四位数,则7641-1467=6174。
Step7, 6174的四个数字由大到小重新排列成一个四位数,则7641-1467=6174。
可知最多7次变换之后,四位数最后都会停在一个确定的数6174上。
编写程序,使用枚举法验证这个猜想。提示:利用字符串的join()方法、内置函数int()、str()、sorted()和标准库itertools中combinations()函数。
使用正则表达式,编写程序将所有地址中的ROAD写成RD.
例如,字符串“this is road …,This is ROAD,This is Road”,替换成“this is RD. …,this is RD.,this is RD.”
使用正则表达式,编写程序检测字符串是否是由字母或者数字组成。
3、纠正字母(教材习题7.2)假设有一段英文“I am a teacher,I am man, and I am 38 years old.I am not a busInessman.”,其中有单词busInessman中间的字母“i”误写为“I”,请编写程序使用正则表达式进行纠正。
编写程序,用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词。
假定有一个字符串s=’ 例如踏踏实实、密密麻麻、简简单单、时时刻刻是一些。。。’,请使用re模块查找并输出其中所有AABB形式的词语。
(夏敏捷教材习题8.6 二1~3题)。
(1)创建一个sqlite3数据库stuinfo,并在其中创建数据库表student,表中包含stuid(学号)、stuname(姓名)、birthday(出生日期)、sex(性别)、address(家庭地址)、rxrq(入学日期)6列,其中stuid设为主键,并添加5条记录。
(2)将所有记录的rxrq属性更新为2017-9-1。
(3)查询性别为“女”的所有学生的stuname和address字段值。
import sqlite3
con=sqlite3.connect("sales.db")
cur=con.cursor()
cur.execute("DROp table book")#第一次运行时这句删掉,之后再运行加上。
con.execute("create table book(stuid primary key,stuname varchar(20),birthday integer(20),sex varchar(20),address varchar(20),rxrq integer(20))")
cur.execute("insert into book(stuid,stuname,birthday,sex,address,rxrq) values (1,'张一',19980301,'男','黄河路1号',20160901)")
cur.execute("insert into book(stuid,stuname,birthday,sex,address,rxrq) values (2,'张二',19980302,'女','黄河路2号',20160902)")
cur.execute("insert into book(stuid,stuname,birthday,sex,address,rxrq) values (3,'张三',19980303,'男','黄河路3号',20160903)")
cur.execute("insert into book(stuid,stuname,birthday,sex,address,rxrq) values (4,'张四',19980304,'男','黄河路4号',20160904)")
cur.execute("insert into book(stuid,stuname,birthday,sex,address,rxrq) values (5,'张五',19980305,'女','黄河路5号',20160905)")
print('记录计入完成')
cur.execute('select * from book')
values = cur.fetchall()
for row in values:
print(row)
print('记录更新完成')
cur.execute("Update book set rxrq=20170901")
cur.execute('select * from book')
values = cur.fetchall()
for row in values:
print(row)
print('性别为女的名字和地址信息为:')
cur.execute('select stuname,sex,address from book')
values = cur.fetchall()
for row in values:
if row[1]=='女':
print(row[0],row[2])
cur.close()
con.commit()
con.close()
2、操作MySQL数据库。
完成教材P241页习题2~4。提示:需要安装pymysql
import pymysql
conn = pymysql.connect(host='127.0.0.1',
user='root',
password='123456',
database='mysql',
charset='UTF8MB4')
cursor = conn.cursor()
def doSQL(sql):
cursor.execute(sql)
conn.commit()
删除数据库
doSQL('DROp DATAbase IF EXISTS onelinelearning;')
创建数据库
doSQL('CREATE DATAbase IF NOT EXISTS onelinelearning;')
删除数据表
doSQL('DROP TABLE IF EXISTS questions')
创建数据表
sql = ''' CREATE TABLE IF NOT EXISTS questions( id INT auto_increment PRIMARY KEY, wenti CHAr(200) NOT NULL UNIQUE, daan CHAr(50) NOT NULL ) ENGINE=innodb DEFAULT CHARSET=UTF8MB4; ''' doSQL(sql)删除所有数据
doSQL('DELETE FROM questions;')
插入数据
for i in range(10):
sql = 'INSERT INTO questions(wenti,daan) VALUES("测试问题{0}","答案{0}");'.format(i)
cursor.execute(sql)
conn.commit()
修改数据
doSQL('UPDATe questions set daan="被修改了" WHERe wenti="测试问题6";')
删除指定的数据
doSQL('DELETE FROM questions WHERe daan="答案8";')
查询并输出数据
sql = 'SELECt * FROM questions'
cursor.execute(sql)
for row in cursor.fetchall():
print(row)
关闭游标和连接
cursor.close() conn.close()3、操作MongoDB数据库
将第2、3题的数据改为存储在MongoDB数据库中,并完成第4题的查询操作。
4、Excel操作。 //选做阅读下面示例后,编写程序,实现以下功能:
生成50个Excel 文件,每个文件中包含5列数据,其中每个单元格内的内容随机生成,并且每个Excel文件的数据行数不相同。然后创建一个 SQLite 数据库,其结构与 Excel 文件相符合,最后把前面生成的 50 个 Excel文件中的数据导入到这个数据库中。(DFG, codetest_xlsx2sqlite.py)
提示:利用扩展库openpyxl ,标准库 string、os、os.path、sqlite3、time。
需要sqlite数据库:dataxlsx.db
Py文件:test_xlsx2sqlite.py
```python
from random import choice, randrange
from string import digits, ascii_letters
from os import listdir, mkdir
from os.path import isdir
import sqlite3
from time import time
from openpyxl import Workbook, load_workbook
def generateRandomData():
''' 生成测试数据,共50个Excel文件,每个文件有5列随机字符串'''
# 如果不存在子文件夹xlsxs,就创建
if not isdir('xlsxs'):
mkdir('xlsxs')
# total表示记录总条数
global total
# 候选字符集
characters = digits+ascii_letters
# 生成50个Excel文件
for i in range(50):
xlsName = 'xlsxs\'+str(i)+'.xlsx'
# 随机数,每个xlsx文件的行数不一样
totalLines = randrange(10**2)
# 创建Workbook,获取第1个Worksheet
wb = Workbook()
ws = wb.worksheets[0]
# 写入表头
ws.append(['a', 'b', 'c', 'd', 'e'])
# 随机数据,每行5个字段,每个字段30个字符
for j in range(totalLines):
line = [''.join((choice(characters) for ii in range(30))) for jj in range(5)]
ws.append(line)
total += 1
# 保存xlsx文件
wb.save(xlsName)
def eachXlsx(xlsxFn):
'''针对每个xlsx文件的生成器'''
# 打开Excel文件,获取第1个Worksheet
wb = load_workbook(xlsxFn)
ws = wb.worksheets[0]
for index, row in enumerate(ws.rows):
# 忽略表头
if index == 0:
continue
yield tuple(map(lambda x:x.value, row))
def xlsx2sqlite():
'''从批量Excel文件中导入数据到SQLite数据库'''
# 获取所有xlsx文件名
xlsxs = ('xlsxs\'+fn for fn in listdir('xlsxs'))
# 连接数据库,创建游标
with sqlite3.connect('dataxlsx.db') as conn:
cur = conn.cursor()
for xlsx in xlsxs:
#批量导入,减少提交事务的次数,可以提高速度
sql = 'INSERT INTO fromxlsx VALUES(?,?,?,?,?)'
cur.executemany(sql, eachXlsx(xlsx))
conn.commit()
#### 用来记录生成的随机数据的总行数
total = 0
#### 生成随机数据
generateRandomData()
#### 导入数据,并测试速度
start = time()
xlsx2sqlite()
delta = time()-start
print('导入用时:', delta)
print('导入速度(条/秒):', total/delta)
## 实验12、科学计算
在线(网址:https://www.imooc.com/learn/1253)算法工程师flare_zhao的《人工智能数学基础与Python实战》课程中的第一章、第二章、第三章。
## 实验13、数据可视化(3题)
### 1、折线图
某商品进价49元,售价75元,现在商场新品上架搞促销活动,顾客每多买一件就给优惠1%,但是每人最多可以购买30件。对于商场而言,活动越火爆商品单价越低,但总收入和盈利越多。对于顾客来说,虽然买的越多单价越低,但是消费总金额却是越来越多的,并且购买太多也会因为用不完而导致过期不得不丢弃造成浪费。现在要求计算并使用折线图可视化顾客购买数量num与商家收益、顾客总消费以及顾客省钱情况的关系,并标记商场收益最大的批发数量和商场收益。



### 2、散点图
某商场开业三个月后,有顾客反应商场一楼部分位置的手机信号不好,个别收银台有时无法正常使用微信支付或支付宝,商场内也有些位置无法正常使用微信。为此,商场安排工作人员在不同位置对手机信号强度进行测试以便进一步提高服务质量和用户体验,测试数据保存于文件“D:服务质量保证商场一楼手机信号强度.txt”中,文件中每行使用逗号分隔的三个数字分别表示商场内一个位置的x、y坐标和信号强度,其中x、y坐标值以商场西南角为坐标原点且向东为x正轴(共150米)、向北为y正轴(共30米),信号强度以0表示无信号、100表示最强。
编写程序,使用散点图对该商场一楼所有测量位置的手机信号强度进行可视化,既可以直观地发现不同位置信号的强度以便分析原因,也方便观察测试位置的分布是否合理。在散点图中,使用横轴表示x坐标位置、纵轴表示y坐标位置,使用五角星标记测量位置,五角星大小表示信号强度,五角星越大表示信号越强,反之表示信号越弱。同时,为了获得更好的可视化效果,信号强度高于或等于70的位置使用绿色五角星,低于70且高于或等于40的使用蓝色五角星,低于40的位置使用红色五角星。
商场一楼手机信号强度.txt文件数据如下:
//商场一楼手机信号强度 文件/
0,0,60
0,3,70
5,0,68
10,0,73
0,30,56
0,15,80
1,6,85
5,23,30
25,30,20
30,5,90
50,25,95
80,0,20
85,5,24
83,19,72
82,28,17
148,0,10
140,28,53
150,15,50
100,1,30
99,27,32
70,15,95
60,15,100
120,16,100
90,8,89
92,12,91
73,4,89
72,25,86
70,19,91
118,26,83
80,10,90
38,16,100
25,25,30
40,28,70
120,3,34
130,5,45
125,2,20
115,2,20
参考代码:

### 3、饼状图
已知某班级的数据结构、线性代数、英语和Python课程考试成绩,要求绘制饼状图显示每门课的成绩中优(85分以上)、及格(60-84分)、不及格(60分以下)的占比。
## 实验14、pandas 数据分析(2题)
### 1、运行下面的程序,在当前文件夹中生成饭店营业额模拟数据文件 data.csv。

### 2、然后使用扩展库 pandas和matplotlib完成下面的任务。
1)使用 pandas 读取文件 data.csv 中的数据,创建 Dataframe 对象,并删除其中所有缺失值;
2)按月份进行统计,使用 matplotlib 绘制折线图显示每个月份的营业额,并把图形保存为本地文件 first.jpg;
3)按月份进行统计,使用 matplotlib 绘制柱状图显示每个月份的营业额,并把图形保存为本地文件 second.jpg;
4)按月份进行统计,找出相邻两个月最大涨幅,并把涨幅最大的月份写入文件maxMonth.txt;
5)按季度统计年度的营业额数据。使用 matplotlib 生成饼状图显示按季度统计的营业额分布情况,并把图形保存为本地文件 third.jpg。
## 实验15、机器学习(6题)
1、朴素贝叶斯算法
在线观看(https://www.imooc.com/learn/1253)算法工程师flare_zhao的《人工智能数学基础与Python实战》课程中的“第4章 概率分析”视频,并编码实现“4-4 朴素贝叶斯判断客户消费意愿”示例。
2、线性回归
扫描教材P246页二维码,观看线性回归讲解视频,并在IDE环境下编码实现视频中示例。
3、KNN算法
扫描教材P259页二维码,观看KNN算法讲解视频,并在IDE环境下编码实现视频中示例。
4、k-means算法
扫描教材P277页二维码,观看K-Means算法讲解视频。编写程序,使用k-means聚类方法对已知数据进行聚类,然后对未知样本寻找相似元素。
5、决策树算法
在线观看(https://www.imooc.com/learn/843)数据工程师途索的《Python数据分析-基础技术篇》中“6-3 scikit-learn实现决策树”视频,并编码实现视频中示例。
6、apriori算法
扫描教材P288页二维码,观看apriori算法讲解视频,并在IDE环境下编码实现视频中示例。



