Python程序设计与实践大作业实验报告陆阳孙勇裘升明
- 格式:docx
- 大小:30.09 KB
- 文档页数:20
20192419实验四《Python程序设计》实验报告20192419 2019-2020-2 《Python程序设计》实验4课程:《Python程序设计》班级:1924姓名:万腾阳学号:20192419实验教师:王志强实验⽇期:2020年6⽉3⽇必修/选修:公选课1. Python综合应⽤:运⽤pygame尝试编写flappy bird代码2. ⼀开始,我打算照着课本将飞机⼤战的代码稍作更改,差不多就相当于flappy bird代码。
但是经过⼀段时间编写后,我发现课本上的代码⼀环扣⼀环,稍作更改⼀处,就会导致出现错误,甚⾄有时候不报错,但是整个程序连图⽚的不产⽣,⼗分令⼈⼼烦。
后⾯,我上⽹查找了视频,参照视频我编出了flappy bird,视频中也存在⼀些⼩错误,这在稍后再讲。
代码:import pygameimport sysimport timeclass Bird(object):#定义⼩鸟def __init__(self):#定义初始化⽅法self.birdRect = pygame.Rect(65,50,50,50)self.birdStatus = [pygame.image.load(r'picture/1.png'),pygame.image.load(r'picture/2.png'),pygame.image.load(r'picture/dead.png')]self.status = 0self.birdx = 120self.birdy = 350self.jump = Falseself.jumpSpeed = 10self.gravity = 5self.dead = Falsedef birdUpdate(self):#定义移动⽅法if self.jump:self.jumpSpeed -= 1self.birdy -= self.jumpSpeedelse:self.gravity += 0.2self.birdy += self.gravityself.birdRect[1] = self.birdyclass Pipeline(object):#定义管道类def __init__(self):self.wallx = 400self.pineUp = pygame.image.load(r'picture/top.png')self.pineDown = pygame.image.load(r'picture/bottom.png')def updatePipeline(self):#定义移动⽅法self.wallx -= 5if self.wallx < -80 :global scorescore +=1self.wallx = 400def createMap():screen.blit(background,(0,0))#显⽰管道screen.blit(Pipeline.pineUp,(Pipeline.wallx,-300))screen.blit(Pipeline.pineDown,(Pipeline.wallx, 500))Pipeline.updatePipeline()#显⽰⼩鸟if Bird.dead:Bird.status = 2elif Bird.jump:Bird.status = 1screen.blit(Bird.birdStatus[Bird.status] , (Bird.birdx,Bird.birdy))Bird.birdUpdate() #更新⼩鸟状态font.render('Score'+str(score),-1,(255,255,255))screen.blit(font.render('Score'+str(score),-1,(255,255,255)),(100,50))pygame.display.update()def checkDead():upRect = pygame.Rect(Pipeline.wallx,-300,Pipeline.pineUp.get_width(),Pipeline.pineUp.get_height())downRect = pygame.Rect(Pipeline.wallx, 500, Pipeline.pineDown.get_width(), Pipeline.pineDown.get_height())#检测矩形碰撞if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):Bird.dead = True#边界检测else:if 0 < Bird.birdRect[1] < height:Bird.dead = Falsereturn Trueelse:return Falsedef getResult():#获取总分final_text1 = "Game Over"final_text2 = "Your Score:" + str(score)ft1_font = pygame.font.SysFont("Arial",70)ft1_surf = font.render(final_text1,1,(242,3,36))ft2_font = pygame.font.SysFont("Arial", 50)ft2_surf = font.render(final_text2, 1, (253, 177, 6))screenwidth = int (screen.get_width() / 2)surf1 = int(ft1_surf.get_width()/2)surf2 = int(ft2_surf.get_width() / 2)screen.blit(ft1_surf,[screenwidth- surf1,100])screen.blit(ft2_surf, [screenwidth- surf2, 200])pygame.display.update()if __name__ == '__main__':pygame.init()pygame.font.init()#初始化字体类font = pygame.font.SysFont(None,50)size = width,height = 400,650screen = pygame.display.set_mode(size) #设置窗⼝clock = pygame.time.Clock() #设置时钟color = (255,255,255)Bird = Bird()#实例⼩鸟类Pipeline = Pipeline()score = 0while True:clock.tick(60)#每秒执⾏60次#轮询事件监测for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()if event.type == pygame.KEYDOWN or pygame.MOUSEBUTTONDOWN and not Bird.dead:Bird.jump = TrueBird.gravity = 5Bird.jumpSpeed = 10# screen.fill(color)background = pygame.image.load(r'picture/background.png')if checkDead():passelse:createMap()getResult()time.sleep(2)createMap() #⽣成地图pygame.quit()```以上是本次实验的代码,⼀开始需要通过代码显⽰窗⼝,并设置其背景及宽度和长度,然后循环绘制屏幕,更新屏幕。
python实验实训报告Python 实验实训报告一、实验实训目的本次 Python 实验实训的主要目的是让我们更深入地理解和掌握Python 编程语言的基本概念、语法和应用,提高我们的编程能力和解决实际问题的能力。
通过一系列的实验和项目实践,我们期望能够熟练运用 Python 进行数据处理、程序设计和算法实现,为今后的学习和工作打下坚实的基础。
二、实验实训环境本次实验实训使用的编程环境是 Python 3x 版本,主要使用的开发工具包括 PyCharm、Jupyter Notebook 等。
同时,为了进行数据处理和可视化,我们还安装了相关的库,如 NumPy、Pandas、Matplotlib 等。
三、实验实训内容(一)Python 基础语法1、变量与数据类型在 Python 中,我们学习了不同的数据类型,如整数、浮点数、字符串、布尔值等。
了解了如何定义变量,并为其赋值。
例如:`num = 10`,`name ="张三"`,`is_valid = True` 。
2、控制结构掌握了条件语句(ifelifelse),能够根据不同的条件执行相应的代码块。
循环结构(for 循环和 while 循环),用于重复执行一段代码。
示例代码:```pythonnum = 5if num > 10:print("大于 10")elif num > 5:print("大于 5 小于等于 10")else:print("小于等于 5")for i in range(5):print(i)count = 0while count < 5:print(count)count += 1```3、函数学会了定义和调用函数,实现代码的模块化和复用。
函数可以接受参数,并返回值。
以下是一个简单的函数示例:```pythondef add_numbers(a, b):return a + bresult = add_numbers(3, 5)print(result)```(二)数据结构1、列表(List)列表是一种有序、可变的数据结构,可以存储不同类型的元素。
python大作业实验报告汇报材料【实验报告汇报材料】1. 引言本报告旨在对Python大作业进行实验报告的汇报,介绍实验的目的、方法和结果,并对实验过程中遇到的问题进行讨论和总结。
2. 目的本次实验的目的是通过完成一个Python大作业,掌握Python编程语言的基础知识和应用能力,提升对Python语言的理解和运用能力。
3. 方法3.1 实验环境本次实验使用的是Python编程语言,运行环境为Windows操作系统,并使用了PyCharm集成开辟环境进行代码编写和调试。
3.2 实验步骤(1) 首先,我们进行了项目需求分析,明确了实验的具体要求和功能需求。
(2) 接着,我们进行了Python语言的学习和复习,包括基本语法、数据类型、条件语句、循环语句等。
(3) 在掌握了Python基础知识后,我们开始着手实现项目功能,按照需求分析的结果编写代码。
(4) 在编写代码的过程中,我们遇到了一些问题,例如如何处理异常、如何优化代码性能等,通过查阅资料和与同学讨论,逐步解决了这些问题。
(5) 最后,我们对代码进行了测试和调试,确保项目能够正常运行并满足需求。
4. 结果在本次实验中,我们成功完成为了Python大作业,实现了项目的基本功能,并通过测试和调试确保了代码的正确性和稳定性。
5. 问题讨论在实验过程中,我们遇到了一些问题,并进行了讨论和总结,主要包括以下几点:(1) 性能优化:在处理大数据量时,我们发现代码执行速度较慢,经过分析发现是由于算法复杂度较高导致的。
我们通过改进算法和使用合适的数据结构,成功提高了代码的性能。
(2) 异常处理:在处理用户输入时,我们遇到了一些异常情况,例如输入错误的格式、输入超出范围等。
我们通过使用异常处理机制,对这些异常情况进行了处理,提高了代码的茁壮性。
(3) 功能扩展:在实验过程中,我们发现可以对项目功能进行一些扩展,例如增加用户界面、添加更多的功能选项等。
我们在实验报告中提出了这些扩展的建议,并进行了讨论。
20183122实验⼀《Python程序设计》实验报告20183122 2019-2020-2 《Python程序设计》实验⼀报告课程:《Python程序设计》班级: 1831姓名:陈介学号:20183122实验教师:王志强实验⽇期:2020年4⽉11⽇必修/选修:公选课1.实验内容1.熟悉Python开发环境;2.练习Python运⾏、调试技能;3.编写程序,练习变量和类型、字符串、对象、缩进和注释等;4. 掌握git技能2. 实验过程及结果1)熟悉Python开发环境;现在python版本已经更新到了3.8.2版本,我们安装python后可以在cmd控制台中输⼊"python"来查看版本以及编写python程序,此时是写⼀⾏执⾏⼀⾏;集成开发环境IDLE提供更加强⼤的功能,可以使⽤python⾃带的python shell也可以使⽤pycharm等IDLE;也可以在控制台运⾏.py结尾的⽂件来运⾏python程序。
2)练习Python运⾏、调试技能;可以通过在cmd控制台中输⼊路径来运⾏python程序,也可以直接在IDLE中运⾏程序通过设置断点来进⾏单步调试:运⾏到断点处,然后⼀句⼀句地往下运⾏程序,在调试窗⼝中可以看到当前存在的所有变量的值如果单步调试进⼊了循环,可以直接跳出循环,节省时间3)编写程序,练习变量和类型、字符串、对象、缩进和注释等;python的变量类型是⽐较灵活的,不像C语⾔⼀样在定义之初就固定了不可改变a = 123b= '456'c = input("请输⼊数字:")d = int(input("请输⼊数字:"))a={}print(type(a))print(type(b))print(type(c))print(type(d))print(type(a))运⾏结果为:可以看到a的类型在运⾏过程中改变了python的字符串类型的操作也是⼗分灵活的,可以直接进⾏+或*操作,python同时还提供了相当量的函数使我们能搜索⼦字符串,拼接字符串,裁剪字符串等,具体我通过下⾯的程序来展⽰str1 = "⼈⽣苦短,我⽤python!"str2 = " ⼈⽣如逆旅\n你亦是⾏⼈\n"str_en = "Life is a journey, you are a pedestrian."set1 = {1:[2,'you'],2:12,3:'me'}print (type(set1))print (zip(set1))#字符串的长度print (len(str1))print (len(str1.encode("utf-8")))print (len(str1.encode("GBK")))print ("\n")#字符段的截取print (str1[3])print (str1[2:8:2])print (str1[::3])try:print (str1[30])except IndexError:print ("字符不存在")print ("\n")#字符串的分割str3 = str2.split()print (str3)str3 = str2.split(' ',)print (str3)str3 = str2.split(' ',2)print (str3)print ('\n')#字符串的合并list1 = ['wyn','wbh','cxt','zjh']str3 = "\t@".join(list1)print ('@'+str3)str3 = " ".join('abcdefg')print (str3)print ('\n')#字符串的检索print (str2.count('⼈',0,5))print (str2.count('⼈'))print (str2.find('⼈',0,5))print (str2.find('⼈'))#⼦字符串⾸次出现的位置print (str2.rfind('⼈',0))print (str2.rfind('⼈'))print (str2.find('%'))print ('⼈' in str2)print ('$' in str2)print (str2.index('⼈',0,5))print (str2.index('⼈'))#⼦字符串⾸次出现的位置print (str2.rindex('⼈',0))print (str2.rindex('⼈'))print (str2.startswith('⼈'))print (str2.startswith('⽣'))print (str2.startswith('⽣',1))print (str2.endswith('⼈'))print (str2.endswith('⾏'))print (str2.endswith('⾏',0,13))print ('\n')#字母的⼤⼩写转换print (str_en.upper())print (str_en.lower())#去除字符串中的特殊字符print (str2.strip())print (str2.lstrip())print (str2.rstrip())#字符的编码byte = str1.encode('GBK')print (byte)print (str1.encode("UTF-8"))print ('\n')#字符的解码print (byte.decode("gbk"))部分运⾏结果为python是⾯向对象的程序设计语⾔,所以在Python中创建⼀个类和对象是很容易的,⽽且python中类和对象的使⽤也⽐较灵活,类可以嵌套,⽀持继承等,下⾯是⼀些实例class mate:name = "佚名"age = 18def __init__(self):print('姓名:',,'年龄:',mate.age)mate.school = "besti"wyn = mate()print (wyn.school)⽗类和⼦类以及继承问题如下代码所⽰class student:stage = Nonename = '佚名'gender = Nonedef __init__(self,in_stage,in_name,in_gender):student.stage = in_stage = in_namestudent.gender = in_genderdef _load(self):print ("姓名:",,"学历:",student.stage,"性别:",student.gender)class undergraduate(student):stage = "⼤学"age = 0prise = []def __init__(self,in_age):undergraduate.age = in_agedef _load(self):print ("姓名:",,"学历:",undergraduate.stage,"性别:",undergraduate.gender,"年龄:",undergraduate.age,"获奖:",undergraduate.prise)stu1 = student("⾼中","赵四","男")stu1._load()stu2 = student('⼤学','张三','男')stu2._load()python的既可以单⾏注释,也可以多⾏注释,单⾏注释时在注释内容前打“#”多⾏注释时把要注释的内容⽤两个'''或"""括起来,如下所⽰#这是⼀⾏单⾏注释"""这是多⾏注释的第⼀⾏这是多⾏注释的第⼆⾏下⾯可能还有好多⾏"""4)掌握git技能a.码push到云端之前,我们需要新建⼀个项⽬来对应码云中的⼀个仓库;b.然后我们在之前新建的项⽬中编好代码后需要先commit,需要添加⼀定的说明养成良好的习惯,⽅便⽇后还能读懂代码的⽬的;c.然后就可以按照下图所⽰路径将代码push到云端了。
温州大学瓯江学院数学与信息工程学院《Python程序设计》实验报告实验名称:实验7 字符串、迭代器与序列解包班级:18计算机2姓名:学号:实验地点:7-706日期:2019/10/24一、实验目的:[实验目的和要求]1、掌握Python字符串类型及其操作2、熟练掌握format()格式控制函数及其应用3、理解序列解包原理4、了解迭代器的应用二、实验环境:1、计算机,局域网,python 软件三、实验内容和要求:(直接将实验步骤及截图写在题目下面,结果必须截图)1、(1)编写程序,输入字符串,输出每个字符的Unicode码值,效果图为:代码:n=input('请输入字符串:')for i in n:print(ord(i),end=' ')(2)利用(1)中程序,输入解码字符串“Strings are Fun!”,查看Unicode编码信息,编写如下解码器程序,使得解码字符串为Strings are Fun!参考核心代码如下:inString=input("请输入Unicode编码信息:")message=""for numStr in (): #遍历每一个编码值codeNum=message=print("\n解码字符串为:",message)代码:inString=input("请输入Unicode编码信息:")message=""for numStr in (): #遍历每一个编码值codeNum=chr(eval(numStr))message=message+codeNumprint("\n解码字符串为:",message)2、分别用双引号、单引号和三引号作为字符串边界符,实现语句Let's say:''hello World!'' n='''Let's say:"hello World!"'''print(n)n="Let's say:'hello World!'"print(n)3、format()方法的练习。
温州大学瓯江学院数学与信息工程学院《Python程序设计》实验报告实验名称:实验7 字符串、迭代器与序列解包班级:18计算机2姓名:学号:实验地点:7-706日期:2019/10/24一、实验目的:[实验目的和要求]1、掌握Python字符串类型及其操作2、熟练掌握format()格式控制函数及其应用3、理解序列解包原理4、了解迭代器的应用二、实验环境:1、计算机,局域网,python 软件三、实验内容和要求:(直接将实验步骤及截图写在题目下面,结果必须截图)1、(1)编写程序,输入字符串,输出每个字符的Unicode码值,效果图为:代码:n=input('请输入字符串:')for i in n:print(ord(i),end=' ')(2)利用(1)中程序,输入解码字符串“Strings are Fun!”,查看Unicode编码信息,编写如下解码器程序,使得解码字符串为Strings are Fun!参考核心代码如下:inString=input("请输入Unicode编码信息:")message=""for numStr in (): #遍历每一个编码值codeNum=message=print("\n解码字符串为:",message)代码:inString=input("请输入Unicode编码信息:")message=""for numStr in (): #遍历每一个编码值codeNum=chr(eval(numStr))message=message+codeNumprint("\n解码字符串为:",message)2、分别用双引号、单引号和三引号作为字符串边界符,实现语句Let's say:''hello World!'' n='''Let's say:"hello World!"'''print(n)n="Let's say:'hello World!'"print(n)3、format()方法的练习。
浙江工商大学计算机与信息工程学院《Python程序设计与实践》大作业报告专业:计科班级: 1404学号:1412190416、1412190415、1412190413姓名: 陆阳,孙勇,裘昇明指导教师: 蒲飞2015年6月28 日题目介绍:在真实得业务场景下,我们往往需要对所有商品得一个子集构建个性化推荐模型。
在完成这件任务得过程中,我们不仅需要利用用户在这个商品子集上得行为数据,往往还需要利用更丰富得用户行为数据.定义如下得符号:U——用户集合ﻫI—-商品全集P--商品子集,P ⊆ IﻫD——用户对商品全集得行为数据集合那么我们得目标就是利用D来构造U中用户对P中商品得推荐模型。
数据说明:竞赛数据包含两个部分。
第一部分就是用户在商品全集上得移动端行为数据(D),表名为tianchi_mobile_remend_train_user,包含如下字段:第二个部分就是商品子集(P),表名为tianchi_mobile_remend_train_item,包含如下字段:训练数据包含了抽样出来得一定量用户在一个月时间(11、18~12、18)之内得移动端行为数据(D),评分数据就是这些用户在这个一个月之后得一天(12、19)对商品子集(P)得购买数据。
参赛者要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为得预测结果。
大作业报告内容包括以下几个部分1、数据分组统计:可统计有多少用户、商品、商品类别等信息,甚至每天各种行为得统计数。
如图:还有,在给出得用户行为数据中,有些用户在整个11—18日至12—18日对商品有浏览行为记录,但就是从未产生过购买行为,这些用户会否在12月19号购买商品实难预测,因此,我们去除这些无购买行为得用户信息,认为这些用户在12月19号还就是不会购买任何商品。
贴关键代码import timeimport pandas as pdstart=time、time()df_items=pd、read_csv("tianchi_mobile_remend_train_item、csv”)df_items2=pd、read_csv("tianchi_mobile_remend_train_user、csv")df_items3=pd、DataFrame()df_items4=pd、DataFrame()df_items5=pd、DataFrame()df_items3=df_items["item_id"]、drop_duplicates()df_items4=df_items["item_category"]、drop_duplicates()df_items5=df_items[df_items、item_geohash、notnull()]df_items5=df_items5["item_id"]、drop_duplicates()df_items6=df_items2["user_id"]、drop_duplicates()df_items7=df_items2["item_id"]、drop_duplicates()df_items8=df_items2[”item_category"]、drop_duplicates()total_behavior_num=len(df_items2)df_items9=df_items2[df_items2、behavior_type==4]df_items10=df_items2[df_items2、behavior_type!=4]positive_num=len(df_items9)negative_num=len(df_items10)item_num=len(df_items3)item_categories_num=len(df_items4)item_geohash_num=len(df_items5)user_num=len(df_items6)item_full_num=len(df_items7)item_categories_full_num=len(df_items8)end=time、time()print ’商品子集中商品个数为:’,item_numprint '商品子集中商品类型数为:',item_categories_numprint’商品子集中带geohash信息得商品个数为:’,item_geohash_n umprint ’用户数一共有:',user_numprint '商品全集中商品个数为:',item_full_numprint '商品全集中商品种类数数为:’,item_categories_full_numprint '商品全集中共有%d条行为记录’ %(total_behavior_num)print’消费行为记录中负正样本比为%d:1' %(negative_num/positive_num)print '一共耗时%f秒' %(end—start)2、数据预处理⑴重新整理时间重新整理数据得时间,也就就是Time字段,在数据统计分组中也提到过,因为原始数据得用户行为时间记录就是从11月18日0时到12月18日23时,精确到小时级,为了方便数据集得划分,需要将用户行为时间数据整理为0—30天,以天为单位,即11月18日得time为0、11月19日得time为1,以此类推。
python程序设计实验报告实验报告一、实验目的本次实验的主要目的是通过编写Python程序来加深对Python程序设计基础的理解,并通过实践掌握基本的变量定义、条件语句、循环语句、函数定义等基本知识点。
二、实验内容本次实验共分为两个部分:1. 编写程序,将输入的华氏温度转换为摄氏温度并输出。
2. 编写程序,求出一个列表中所有偶数的和。
三、实验步骤1. 将华氏温度转换为摄氏温度的程序编写(1)定义华氏温度并通过input函数获得用户输入。
temp_f = float(input("请输入华氏温度: "))(2)根据公式将华氏温度转换为摄氏温度。
temp_c = (temp_f - 32) * 5 / 9(3)输出转换后的摄氏温度。
print("摄氏温度为:", temp_c)2. 求列表中所有偶数的和的程序编写(1)定义一个列表num_list,并在其中添加需要求和的数字。
num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9](2)定义一个变量sum来记录偶数的和,并初始化为0。
sum = 0(3)通过循环遍历num_list中的每个数字,找出其中的偶数并将其累加到sum中。
for num in num_list:if num % 2 == 0:sum += num(4)输出偶数的和。
print("偶数的和为:", sum)四、实验结果经过以上步骤的编写后,本次实验得到了两个Python程序。
分别运行后,得到的结果如下:1. 将华氏温度转换为摄氏温度的程序结果:请输入华氏温度: 100摄氏温度为: 37.777777777777782. 求列表中所有偶数的和的程序结果:偶数的和为: 20五、实验总结通过本次实验的实践操作,深入了解了Python程序设计基础。
在编写程序的过程中,加深了对变量定义、条件语句、循环语句、函数定义等基本知识点的理解。
20194220实验三《Python程序设计》实验报告20194220 2019-2020-2 《Python程序设计》实验三报告课程:《Python程序设计》班级: 1942姓名:梁勇学号:20194220实验教师:王志强实验⽇期:2020年5⽉16⽇必修/选修:公选课1.实验内容(1)内容:创建服务端和客户端,服务端在特定端⼝监听多个客户请求。
客户端和服务端通过Socket套接字(TCP/UDP)进⾏通信。
(2)要求:(1)创建服务端和客户端,选择⼀个通信端⼝,⽤Python语⾔编程实现通信演⽰程序;(2)要求包含⽂件的基本操作,例如打开和读写操作。
(3)要求发送⽅从⽂件读取内容,加密后并传输;接收⽅收到密⽂并解密,保存在⽂件中。
(4)程序代码托管到码云。
2. 实验过程及结果(1)实验思路⾸先明确题⽬要求⽤套接字Socket进⾏⽹络编程。
python中就提供了Socket模块,⽤来建⽴具有TCP\UDP的简单服务器。
因此要先明确是选择TCP编程还是UDP编程。
TCP⽤于建⽴可靠连接,并且双⽅是可以以流的形式发送数据。
相对于TCP,UDP⾯向⽆连接的协议。
⽤UDP协议不需要建⽴连接,只需要知道IP地址和端⼝,只能确定发送,不保证到达,但是优点是速度快。
因此,为保证实验正常进⾏,选择TCP编程。
关于⽂件的操作,就主要⽤到file⽅法和os模块,直接import函数调⽤就好了关于加密解密,⽼师没做要求,便选择较为简单好操作调试的使⽤base64进⾏算法加密解密(不过此⽅法别⼈拿到密⽂亦可以转换为明⽂,较为不安全)(2)代码介绍⾸先是创建服务器和客户端,之前在作业中已经创建过,并且成功进⾏内容传输,因此只需要稍作修改。
下图⾯是初始原本服务器和客户端代码客户端:import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect(('127.0.0.1', 9999))str = input("请输⼊要传输的内容:")s.sendall(str.encode())data = s.recv(1024)print(data)s.close()服务器:import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('127.0.0.1', 9999))s.listen()conn, address = s.accept()data = conn.recv(1024)print("服务器已经接收到了数据内容:"+ data.decode())conn.sendall((str(data)).encode())s.close()其中,127.0.0.1是本机IP地址(通⽤)然后就⽤file⽅法、os模块和base64加密进⾏完善得到以下代码客户端:import socketimport osimport base64s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect(('127.0.0.1', 8001))str1 = input("请输⼊要传输的⽂件名:")s.sendall(str1.encode())os.chdir(r"E:\程序设计\20194220\text")file = open(str1,'r')text = file.read()text = text.encode('utf-8')encode_text = base64.b32encode(text)s.sendall(encode_text)file.close()data = s.recv(1024)print("来⾃ ('127.0.0.1') 的信息:",data.decode())s.sendall("收到".encode())name = s.recv(1024)print("来⾃ ('127.0.0.1') 的⽂件:",name.decode())data = s.recv(1024)f = open("reply.txt","w")f.write(data.decode())f.close()print("⽂件内容已加密发送")s.sendall("已成功接收,中断连接!".encode())s.close()服务器:import socketimport osimport base64os.chdir(r"E:\程序设计\20194220\text")s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('127.0.0.1', 8001))s.listen()conn, address = s.accept()name = conn.recv(1024)print("来⾃", address, "的⽂件:", name.decode())data = conn.recv(1024)f = open("receive.txt", "w")data1 = base64.b32decode(data)f.write(data1.decode())f.close()print("来⾃", address, "加密的信息:", data.decode(), "解密后已保存为receive.txt") conn.sendall("服务器已经收到了数据内容,准备传输⽂件,注意接收!".encode()) data1 = conn.recv(1024)conn.sendall("reply.txt".encode())f = open("receive.txt", "r")data1 = f.read()conn.sendall(data1.encode())f.close()data1 = conn.recv(1024)print("来⾃", address, "的信息", data1.decode())s.close()下⾯是⼀些关键步骤截图:创建⽂件,输⼊要发送的内容:先打开服务器:再打开客户端:然后在客户端输⼊要传送的⽂件名:3. 实验过程中遇到的问题和解决过程问题1:找不到⽂件问题1解决⽅案:经过询问同学得知,⽂件要先⾃⼰创建并且写⼊内容,不然就再加⼀步写⼊内容问题2:输⼊⽂件名时“⽂件”时出现FileNotFoundError问题2解决⽅案:⽂件名要加后缀,.tx其他(感悟、思考等)⼀些新知识的学习关于chird和makedirs⽅法os.chdir() ⽅法⽤于改变当前⼯作⽬录到指定的路径。
201934042019-2020-2《Python程序设计》实验⼀报告20193404 2019-2020-2 《Python程序设计》实验⼀报告! 20193404 2019-2020-2 《Python程序设计》实验⼀报告课程:《Python程序设计》班级: 1934姓名:李宇凡学号:20193404实验教师:王志强实验⽇期:2020年4⽉14⽇必修/选修:公选课1.实验内容1. 熟悉Pycharm等开发环境;2. 掌握基本的Python运⾏和调试技能;3. 掌握基本的Python编程技能。
4. 程序代码托管到码云2. 实验过程及结果1.熟悉pycharm开发环境:pycharm的安装与激活:1. 进⼊PyCharm的官⽅⽹站或者直接打开PyCharm下载界⾯,根据教程PyCharm安装教程完成安装、激活。
2. 下载好后,开始进⾏安装.3. 双击安装包,会弹出相关的“Welcome to PyCharm Setup”界⾯。
4.点击Next,进⼊安装程序。
选择安装⽬录5.点击Next,进⼊如下界⾯。
6.安装好以后,可以任意选择“Reboot now”(现在重启),或者“I want to manually reboot later”(稍后重启)。
pycharm 初步使⽤:1.激活之后会⾃动跳转到下图界⾯,创建项⽬路径:“Create New Project”2.项⽬设置,浏览⽂件夹,在期望的地⽅创建⼯程,将untitled改成期望的⽂件名。
3.在项⽬⽂件点击FILE→NewFile→pythonfile→输⼊⽂件名→开始编程。
2.掌握基本的Python运⾏和调试技能:1.运⾏:右上⾓的编译区域内编辑完程序后按ctrl+shift+F10运⾏程序2.调试:设置断点→开始调试→点击单步运⾏1.设置断点:2.开始调试(点击甲壳⾍)3.单步进⼊运⾏:3.掌握基本的Python编程技能:1:变量在Python中,每个变量在使⽤之前都必须赋值,变量只有在赋值之后才会被创建2:类型整数类型、浮点数类型、复数类型3:对象Python 使⽤对象模型来存储数据,构造的任何类型的值都是⼀个对象(⽐如我们创建的整数:26,字符串:“hello world”,列表:[1, 2, 3]等都是对象)。
浙江工商大学计算机与信息工程学院《Python程序设计与实践》大作业报告专业:计科班级:1404学号:、、姓名:陆阳,孙勇,裘昇明指导教师:蒲飞2015年6月28日题目介绍:在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。
在完成这件任务的过程中,我们不仅需要利用用户在这个商品子集上的行为数据,往往还需要利用更丰富的用户行为数据。
定义如下的符号:U——用户集合I——商品全集P——商品子集,P???ID——用户对商品全集的行为数据集合那么我们的目标是利用D来构造U中用户对P中商品的推荐模型。
数据说明:竞赛数据包含两个部分。
第一部分是用户在商品全集上的移动端行为数据(D),表名为tianchi_mobile_recommend_train_user,包含如下字段:第二个部分是商品子集(P),表名为tianchi_mobile_recommend_train_item,包含如下字段:训练数据包含了抽样出来的一定量用户在一个月时间(~)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天()对商品子集(P)的购买数据。
参赛者要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为的预测结果。
?大作业报告内容包括以下几个部分1、数据分组统计:可统计有多少用户、商品、商品类别等信息,甚至每天各种行为的统计数。
如图:还有,在给出的用户行为数据中,有些用户在整个11-18日至12-18日对商品有浏览行为记录,但是从未产生过购买行为,这些用户会否在12月19号购买商品实难预测,因此,我们去除这些无购买行为的用户信息,认为这些用户在12月19号还是不会购买任何商品。
贴关键代码importtimeimportpandasaspdstart=()df_items=("")df_items2=("")df_items3=()df_items4=()df_items5=()df_items3=df_items["item_id"].drop_duplicates()df_items4=df_items["item_category"].drop_duplicates()df_items5=df_items["item_id"].drop_duplicates()df_items6=df_items2["user_id"].drop_duplicates()df_items7=df_items2["item_id"].drop_duplicates()df_items8=df_items2["item_category"].drop_duplicates()total_behavior_num=len(df_items2)df_items9=df_items2[==4]df_items10=df_items2[!=4]positive_num=len(df_items9)negative_num=len(df_items10)item_num=len(df_items3)item_categories_num=len(df_items4)item_geohash_num=len(df_items5)user_num=len(df_items6)item_full_num=len(df_items7)item_categories_full_num=len(df_items8)end=()print'商品子集中商品个数为:',item_numprint'商品子集中商品类型数为:',item_categories_numprint'商品子集中带geohash信息的商品个数为:',item_geohash_num print'用户数一共有:',user_numprint'商品全集中商品个数为:',item_full_numprint'商品全集中商品种类数数为:',item_categories_full_numprint'商品全集中共有%d条行为记录'%(total_behavior_num)print'消费行为记录中负正样本比为%d:1'%(negative_num/positive_num)print'一共耗时%f秒'%(end-start)2、数据预处理⑴重新整理时间重新整理数据的时间,也就是Time字段,在数据统计分组中也提到过,因为原始数据的用户行为时间记录是从11月18日0时到12月18日23时,精确到小时级,为了方便数据集的划分,需要将用户行为时间数据整理为0-30天,以天为单位,即11月18日的time为0、11月19日的time为1,以此类推。
贴关键代码importpandasaspdfromdatetimeimport*importtimet0=()begin_time=datetime(2014,11,18,0,0)deftrans_time(str_time):entry_time=(str_time,"%Y-%m-%d%H")datatime_delta=(entry_time-begin_time).daysreturnint(datatime_delta)df_train_user=("")print"========================================\n"print"时间转换进行中...\n"x:trans_time(x))("",index=False)t1=()print"时间转换结束!\n"print"转换时间共耗时%f秒"%(t1-t0)⑵划分训练集和测试集在分类问题中,模型需要经过训练集的学习,才能用于测试集,而训练集和测试集在形式上的区别在于前者有类别标签,后者则需要模型输出相应的类别标签。
这里的问题是依据31天的用户操作记录预测第32天的购买情况,所以通常来说,训练集的构建需要利用31天的数据,而其相应的类别标签如何标注在训练集中?这个与你如何划分训练集和测试集有关;而测试集的构建则可用到31天的完整数据。
下面举个例子,用于解释训练集和测试集的具体表现形式。
训练集样本示例测试集样本示例训练集样本示例中的user_id,brand_id(item_id)用于表示唯一的样本id,而特征feature_1,feature_2则用31天的数据构建而来。
本次比赛中,我们划分训练集和测试集所用的分割日期是每10天。
第0-9天为一个训练集,用第10天的数据给第0-9天数据添加类别标签。
第1-10天为一个训练集,用第11天的数据给第1-10天数据添加类别标签,依次类推,…,最后是第20-29天为一个训练集,用第30天的数据给第20-29天数据添加类别标签。
测试集为第21-30天的数据。
贴关键代码importpandasaspdfromdatetimeimport*importtimenum=22start=()df_train_user=("")df_items=("")df_items="item_id"]=df_items=aforiinrange(num):print"划分训练集:"+str(i)j=i+10ifj!=31:df_set=df_train_user[>=i)&<j)]("data/"+str(j)+".csv",index=False)df_test=df_train_user[==j)&==4)][["user_id","item_id"]]df_test=()df_test=(left=df_test,right=df_items,how="inner").drop_duplicates()("data/"+"result"+str(j)+".csv",index=False)else:df_set=df_train_user[>=i)&<j)]("data/"+"",index=False)end=()print'训练集划分耗时%f秒'%(end-start)⑶平衡正负样本正负样本比例需从1:100降为1:10~1:20之间。
贴关键代码importpandasaspdimportrandomimporttimefromget_featuresimport*start=()df_feature2=()j=10forkinrange(20):i=j+kdf_feature=("data_features/train"+str(i)+".csv")df_feature_p=df_feature[==1]df_feature_n=df_feature[==0]lp=len(df_feature_p)ln=len(df_feature_n)iffloat(ln)/lp>14:a=range(0,ln)slice=(a,lp*14)#lp*15df_feature_n=[slice]df_feature=([df_feature_p,df_feature_n],ignore_index=True) df_feature2=([df_feature,df_feature2])("features/",index=False)end=()print'对训练集抽样耗时%f秒'%(end-start)3、特征提取特征提取在数据挖掘中很重要,那么为什么它们那么重要呢?之前提到过,要想输出测试集的类别标签,需要模型在训练集经过学习,那么模型在训练集上学习的是什么?我们知道,在给模型输入数据的时候,实际上模型用到的都是特征(及其对应的类别标签),而特征就是用于描述为什么该样本的类别标签就是如此,在本赛题中即用于描述某用户为什么购买/不购买某商品。