小甲鱼教学课件_第1页
小甲鱼教学课件_第2页
小甲鱼教学课件_第3页
小甲鱼教学课件_第4页
小甲鱼教学课件_第5页
已阅读5页,还剩25页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

小甲鱼Python零基础教学什么是Python?Python是一种高级编程语言,由吉多·范罗苏姆(GuidovanRossum)于1989年圣诞节期间开始设计,强调代码的可读性和简洁性。Python的设计哲学是"优雅"、"明确"、"简单",开发效率极高,被誉为"胶水语言",能够轻松连接各种软件。根据2025年TIOBE编程语言排行榜,Python已稳居第一位,成为全球最受欢迎的编程语言。Python广泛应用于:数据分析与可视化人工智能与机器学习Web开发与自动化测试安装与环境配置下载Python访问Python官方网站(),根据您的操作系统选择合适的版本下载。推荐选择最新的稳定版本。安装与配置安装时勾选"AddPythontoPATH"选项,便于在命令行中直接使用。初学者推荐使用Anaconda套装或自带的IDLE开发环境。验证安装打开命令行,输入"python--version"检查是否安装成功。常见安装问题:PATH环境变量未正确设置权限不足(可尝试管理员身份运行)第一个Python程序经典入门代码#我的第一个Python程序print("HelloWorld!")print("欢迎来到Python世界!")这个简单的程序展示了Python的基本语法结构。#符号后面的内容是注释,不会被执行。print()函数用于在屏幕上显示内容。运行方式交互式命令行适合测试简短代码,直接在Python解释器中输入命令并立即看到结果。脚本文件执行创建.py文件,使用"python文件名.py"命令执行,适合较长的程序。Python特色:使用缩进而非花括号来表示代码块,使代码更加清晰易读。严格的缩进是Python的标志性特点!基本数据类型数字类型整数(int):1,100,-10浮点数(float):3.14,-0.001复数(complex):1+2j字符串(str)文本数据类型用单引号或双引号表示例如:"Python",'小甲鱼'布尔类型(bool)只有两个值:True和False用于条件判断注意大小写类型转换与输入类型转换函数int():转换为整数float():转换为浮点数str():转换为字符串bool():转换为布尔值input()函数#获取用户输入并转换为整数age=int(input("请输入您的年龄:"))print("您明年将会",age+1,"岁")变量命名规范变量名只能包含字母、数字和下划线,不能以数字开头。建议使用有意义的名称,如user_name而非un。Python区分大小写,name和Name是不同的变量。运算符与表达式7算术运算符Python提供7种基本算术运算符,用于执行各种数学计算。运算符名称示例结果+加法5+38-减法5-32*乘法5*315/除法5/31.6666...//整除5//31%取余5%32**幂运算5**3125其他重要运算符赋值运算符=:基本赋值+=,-=:组合赋值例:x+=5等同于x=x+5比较运算符==,!=:等于,不等于<,>,<=,>=:大小比较返回值为布尔类型运算优先级运算符优先级从高到低:括号>幂运算>乘除>加减。使用括号可以明确指定运算顺序,提高代码可读性。字符串及常用方法定义字符串的三种方式#单引号s1='小甲鱼Python教程'#双引号s2="欢迎学习Python"#三引号(可以包含多行文本)s3="""这是第一行这是第二行这是第三行"""字符串操作拼接使用+号:"Python"+"3.9"→"Python3.9"重复使用*号:"Go"*3→"GoGoGo"切片"Python"[0:2]→"Py"常用字符串方法lower():转为小写upper():转为大写strip():去除两端空白replace():替换字符split():分割字符串join():连接字符串列表Unicode与编码Python3默认使用Unicode编码,可以处理任何语言的文字。在处理不同编码的文件时,可以使用encode()和decode()方法进行转换,如:text.encode('utf-8')。列表(List)基础列表定义与访问#列表定义fruits=['苹果','香蕉','橙子','葡萄']#访问元素print(fruits[0])#输出:苹果print(fruits[-1])#输出:葡萄#修改元素fruits[1]='梨'#列表变为['苹果','梨','橙子','葡萄']列表操作增加元素append():在末尾添加一个元素insert():在指定位置插入元素extend():合并另一个列表删除元素remove():删除指定值的元素pop():删除并返回指定位置元素del:删除指定位置元素查找元素index():查找元素位置count():计算元素出现次数in运算符:检查元素是否存在列表切片与排序列表切片语法与字符串类似:list[start:end:step]。可以使用sort()方法对列表进行排序,reverse()方法反转列表顺序。numbers=[3,1,4,1,5,9,2,6]numbers.sort()#排序:[1,1,2,3,4,5,6,9]print(numbers[2:5])#切片:[2,3,4]元组与集合元组(Tuple)#创建元组coordinates=(10,20)person=('小明',25,'北京')#访问元素name=person[0]#'小明'age=person[1]#25#尝试修改将导致错误#person[1]=26#TypeError!元组一旦创建就不可修改(不可变类型)。适合存储不应被修改的数据,如坐标点、RGB颜色值等。集合(Set)#创建集合fruits={'苹果','香蕉','橙子'}numbers=set([1,2,3,2,1])#{1,2,3}#添加元素fruits.add('葡萄')#删除元素fruits.remove('香蕉')集合是无序的,不允许有重复元素。主要用于去重和集合运算(交集、并集、差集)。集合运算并集A|B或A.union(B)返回A和B中的所有元素交集A&B或A.intersection(B)返回同时在A和B中的元素差集A-B或A.difference(B)返回在A中但不在B中的元素对称差集A^B返回只在A或只在B中的元素字典(dict)深入字典基础字典是Python中的映射类型,使用键值对(key-value)存储数据。每个键必须是唯一的、不可变的(通常是字符串或数字)。#创建字典student={'name':'张三','age':20,'score':95,'city':'上海'}#访问值print(student['name'])#输出:张三字典常用方法访问与修改dict[key]:获取值,不存在时报错dict.get(key):获取值,可设默认返回值dict[key]=value:添加或修改键值对dict.update(other_dict):合并字典遍历字典dict.keys():返回所有键dict.values():返回所有值dict.items():返回所有键值对fork,vindict.items():遍历键值删除操作deldict[key]:删除指定键值对dict.pop(key):删除并返回值dict.clear():清空字典应用实例:字符频率统计defcount_chars(text):char_count={}forcharintext:ifcharinchar_count:char_count[char]+=1else:char_count[char]=1returnchar_countresult=count_chars("小甲鱼Python教程")print(result)#输出每个字符出现的次数分支结构if语句基本语法if条件1:#条件1为True时执行elif条件2:#条件1为False且条件2为True时执行else:#所有条件都为False时执行Python使用缩进来标识代码块,通常是4个空格。条件表达式结果为布尔值,决定执行哪个分支。条件表达式比较运算:==,!=,<,>,<=,>=逻辑运算:and,or,not成员判断:in,notin身份判断:is,isnot简单实例:年龄判断age=int(input("请输入您的年龄:"))ifage<12:print("儿童")elifage<18:print("青少年")elifage<60:print("成年人")else:print("老年人")嵌套分支结构1嵌套if语句允许在一个分支内部再次进行条件判断,可以处理更复杂的逻辑,但过度嵌套会降低代码可读性。循环结构for/whilefor循环#基本语法for变量in可迭代对象:#循环体#示例:遍历列表fruits=['苹果','香蕉','橙子']forfruitinfruits:print(fruit)#使用range()函数foriinrange(5):#0,1,2,3,4print(i)while循环#基本语法while条件:#循环体#示例:计数器count=0whilecount<5:print(count)count+=1#无限循环(需要内部break)whileTrue:answer=input("继续?(y/n)")ifanswer=='n':break循环控制语句break立即退出整个循环,跳到循环后的下一条语句。foriinrange(10):ifi==5:break#到5就退出print(i)#只打印0到4continue跳过本次循环剩余部分,直接进入下一次循环。foriinrange(10):ifi%2==0:continue#跳过偶数print(i)#只打印奇数else子句循环正常结束后执行(非break退出)。foriinrange(5):print(i)else:print("循环正常完成")综合实例:99乘法表实现原理使用嵌套循环结构来生成九九乘法表,外层循环控制行数,内层循环控制列数。利用字符串格式化使输出美观对齐,每一行只显示i×j(i≤j)的结果。代码实现#九九乘法表完整版foriinrange(1,10):forjinrange(1,i+1):#使用格式化输出,保持对齐print(f"{j}×{i}={i*j}\t",end="")#每行结束后换行print()格式化输出技巧f-string(Python3.6+)f"{变量}文本{表达式}"最简洁直观的字符串格式化方式format()方法"{:格式}".format(值)灵活控制对齐、宽度、精度等print()参数end=""参数可以改变输出结尾sep=""参数控制多个值间的分隔符扩展挑战尝试修改代码,实现不同样式的乘法表,如倒三角形式、完整的乘法表格、带边框的表格等。这有助于巩固循环和字符串格式化知识。函数基础函数定义与调用#定义函数defgreet(name):"""打招呼函数,输出问候语"""returnf"你好,{name}!"#调用函数message=greet("小甲鱼")print(message)#输出:你好,小甲鱼!函数由def关键字定义,可包含文档字符串(docstring),使用return返回值。函数是组织和重用代码的基本单位。函数参数必需参数defpower(x,n):returnx**n#调用时必须提供两个参数result=power(2,3)#2的3次方=8默认参数defpower(x,n=2):returnx**n#n有默认值,可以省略result1=power(2)#2的2次方=4result2=power(2,3)#2的3次方=8关键字参数defstudent(name,age,city):print(f"{name},{age}岁,来自{city}")#通过参数名指定,顺序可变student(age=20,city="北京",name="李明")变量作用域局部变量在函数内部定义的变量,仅在函数内部可见,函数执行完毕后变量被销毁。全局变量在函数外部定义的变量,在整个模块中可见。如需在函数内修改全局变量,需使用global关键字。count=0#全局变量defincrement():globalcount#声明使用全局变量count+=1increment()print(count)#输出:1常用内置函数基本内置函数len(obj):返回对象长度type(obj):返回对象类型int(),float(),str():类型转换max(),min():返回最大/最小值sum():对数字序列求和sorted():返回排序后的序列range():生成数字序列print(),input():输入输出高级内置函数map():对序列每个元素执行函数filter():过滤序列中的元素zip():将多个序列对应位置元素组合enumerate():返回索引和元素对any(),all():检查序列真值abs(),round():数学函数dir(),help():查看对象信息函数式编程示例map函数#将列表中所有数字平方numbers=[1,2,3,4,5]squares=list(map(lambdax:x**2,numbers))print(squares)#[1,4,9,16,25]filter函数#过滤出所有偶数numbers=[1,2,3,4,5,6,7,8]evens=list(filter(lambdax:x%2==0,numbers))print(evens)#[2,4,6,8]lambda表达式#一行代码实现列表平方numbers=[1,2,3,4,5]squares=[x**2forxinnumbers]#列表推导式print(squares)#[1,4,9,16,25]Python丰富的内置函数可以帮助我们更高效地编写代码。熟练掌握这些函数可以大幅提高编程效率,减少重复代码。文件操作基础文件打开与关闭#基本语法file=open('文件名','模式')#操作文件...file.close()#操作完毕后关闭文件#文件打开模式#'r':只读模式(默认)#'w':写入模式(覆盖原内容)#'a':追加模式(在末尾添加)#'b':二进制模式(与上面模式组合使用)#'t':文本模式(默认)文件读写操作#读取整个文件withopen('data.txt','r',encoding='utf-8')asf:content=f.read()print(content)#逐行读取withopen('data.txt','r',encoding='utf-8')asf:forlineinf:print(line.strip())#去除换行符#写入文件withopen('output.txt','w',encoding='utf-8')asf:f.write('这是第一行\n')f.write('这是第二行\n')with语句的优势自动资源管理无需手动关闭文件,离开with块时自动关闭异常安全即使发生异常,也能确保文件被正确关闭代码简洁减少样板代码,使逻辑更清晰实用文件操作示例#简单的文本文件处理defcount_words(filename):try:withopen(filename,'r',encoding='utf-8')asf:content=f.read()words=content.split()returnlen(words)exceptFileNotFoundError:returnf"错误:文件'{filename}'不存在"#调用函数print(f"文件中共有{count_words('article.txt')}个单词")异常处理异常基础异常是程序执行过程中发生的错误。Python使用try/except机制捕获并处理异常,避免程序崩溃。#基本异常处理结构try:#可能发生异常的代码num=int(input("请输入一个数字:"))result=10/numprint(f"结果是:{result}")exceptValueError:#处理输入不是数字的情况print("输入无效,请输入一个数字")exceptZeroDivisionError:#处理除以零的情况print("不能除以零")完整的异常处理结构try:#可能发生异常的代码num=int(input("请输入一个数字:"))result=10/numexceptValueError:#处理特定类型的异常print("输入无效,请输入一个数字")exceptZeroDivisionError:#处理另一种类型的异常print("不能除以零")exceptExceptionase:#捕获所有其他异常print(f"发生错误:{e}")else:#没有异常发生时执行print(f"结果是:{result}")finally:#无论是否发生异常都会执行print("计算结束")常见异常类型SyntaxError语法错误,程序无法解析NameError使用未定义的变量或函数TypeError操作或函数应用于不适当类型ValueError操作或函数接收了正确类型但不适当的值IndexError序列下标超出范围KeyError字典中查找不存在的键FileNotFoundError尝试打开不存在的文件ImportError导入模块失败自定义异常可以通过继承Exception类来创建自定义异常,适用于特定应用场景的错误处理。classMyError(Exception):def__init__(self,message):self.message=messagesuper().__init__(self.message)模块与包模块基础模块是包含Python定义和语句的文件,以.py为扩展名。使用模块可以组织代码,提高可维护性和可重用性。#导入整个模块importmathprint(math.pi)#使用math模块中的pi常量#导入特定内容fromrandomimportrandintprint(randint(1,10))#生成1到10的随机数#导入并重命名importnumpyasnparr=np.array([1,2,3])包结构包是一种组织模块的方式,本质上是包含__init__.py文件的目录。包可以包含子包和模块,形成层次结构。my_package/__init__.pymodule1.pymodule2.pysubpackage/__init__.pymodule3.pymodule4.py导入包中的模块:frommy_packageimportmodule1frommy_package.subpackageimportmodule3常用标准库模块math数学函数模块,提供三角函数、对数、幂运算等数学运算。random随机数生成模块,用于生成随机数、随机选择元素、随机排序等。time/datetime时间日期处理模块,用于获取当前时间、时间格式化、时间计算等。os/sys操作系统接口模块,提供与操作系统交互的功能,如文件路径操作、系统命令等。json/csv数据格式处理模块,用于处理JSON、CSV等常见数据格式。urllib/requests网络请求模块,用于发送HTTP请求、下载网络资源等。创建自定义模块#文件:mymath.pydefsquare(x):"""计算平方"""returnx**2defcube(x):"""计算立方"""returnx**3PI=3.14159#模块级常量if__name__=="__main__":#当作为脚本运行时执行,作为模块导入时不执行print("测试:5的平方是",square(5))使用自定义模块:importmymath或frommymathimportsquare,PI面向对象基础类与对象类(class)是对象的蓝图,定义了对象的属性和方法。对象是类的实例,代表类的具体实现。#定义一个简单的类classDog:#初始化方法(构造函数)def__init__(self,name,age):=name#实例属性self.age=age#实例方法defbark(self):returnf"{}正在汪汪叫!"defget_info(self):returnf"{}今年{self.age}岁"#创建类的实例(对象)my_dog=Dog("小黑",3)print(my_dog.bark())#调用方法print(my_)#访问属性类的组成部分属性实例属性:每个实例独有,在__init__中定义类属性:所有实例共享,直接在类中定义私有属性:以双下划线开头(__name),类外无法直接访问方法实例方法:第一个参数为self,操作实例属性类方法:@classmethod装饰,第一个参数为cls静态方法:@staticmethod装饰,不需要参数魔术方法:以双下划线包围,如__init__、__str__等self关键字代表类的实例,是实例方法的第一个参数用于在方法内部访问实例的属性和其他方法调用方法时无需显式传递self,Python自动传递扩展示例:学生类classStudent:#类属性school="Python编程学校"#构造方法def__init__(self,name,student_id,score=60):=name#公开属性self.__id=student_id#私有属性self.score=score#实例方法defget_id(self):returnself.__iddefstudy(self,hours):self.score+=hours*0.5ifself.score>100:self.score=100returnf"{}学习了{hours}小时,当前分数为{self.score}"#魔术方法,打印对象时调用def__str__(self):returnf"学生:{},分数:{self.score}"#创建学生对象zhang=Student("张三","2023001",85)print(zhang)#打印对象print(zhang.study(10))#调用方法类的继承与多态继承基础继承允许一个类(子类)获取另一个类(父类)的属性和方法。子类可以重写父类的方法,或添加新的属性和方法。#父类classAnimal:def__init__(self,name):=namedefspeak(self):pass#空方法,等待子类重写#子类classDog(Animal):defspeak(self):returnf"{}说:汪汪汪!"classCat(Animal):defspeak(self):returnf"{}说:喵喵喵!"#创建对象dog=Dog("小黑")cat=Cat("咪咪")print(dog.speak())#输出:小黑说:汪汪汪!print(cat.speak())#输出:咪咪说:喵喵喵!多态多态指不同类的对象对相同消息作出不同的响应。在Python中,通过方法重写实现多态。#展示多态defanimal_sound(animal):"""接受任何实现了speak()方法的对象"""print(animal.speak())#传入不同类型的对象,得到不同的行为animal_sound(dog)#输出:小黑说:汪汪汪!animal_sound(cat)#输出:咪咪说:喵喵喵!super()函数与方法重写classBird(Animal):def__init__(self,name,wingspan):#调用父类的__init__方法super().__init__(name)#添加子类特有的属性self.wingspan=wingspandefspeak(self):#重写父类方法returnf"{}说:啾啾啾!"deffly(self):#子类特有方法returnf"{}展开{self.wingspan}厘米的翅膀飞翔"#创建鸟类对象bird=Bird("小鸟",30)print(bird.speak())#调用重写的方法print(bird.fly())#调用子类特有方法多继承Python支持多继承,一个类可以继承多个父类。需要注意处理潜在的命名冲突和方法解析顺序(MRO)。classFlyable:deffly(self):return"我会飞行"classSwimmable:defswim(self):return"我会游泳"#多继承classDuck(Animal,Flyable,Swimmable):defspeak(self):returnf"{}说:嘎嘎嘎!"#创建鸭子对象duck=Duck("唐老鸭")print(duck.speak())#Animal的方法print(duck.fly())#Flyable的方法print(duck.swim())#Swimmable的方法继承注意事项多继承可能导致"菱形继承"问题,Python使用C3线性化算法确定方法解析顺序。可以通过类的__mro__属性查看解析顺序。GUI入门:TkinterTkinter简介Tkinter是Python的标准GUI(图形用户界面)库,基于Tk工具包,提供了创建窗口、按钮、文本框等界面元素的功能。优点:Python标准库,无需额外安装跨平台,支持Windows、macOS和Linux简单易学,适合初学者足够满足一般应用需求创建第一个窗口importtkinterastk#创建主窗口root=tk.Tk()root.title("我的第一个GUI应用")root.geometry("400x300")#设置窗口大小#添加标签label=tk.Label(root,text="你好,Tkinter!",font=("宋体",16))label.pack(pady=20)#添加按钮defbutton_click():label.config(text="按钮被点击了!")button=tk.Button(root,text="点击我",command=button_click)button.pack(pady=10)#启动事件循环root.mainloop()常用Tkinter组件窗口(Tk)应用程序的主窗口,所有组件的容器。标签(Label)显示文本或图像,不可交互。按钮(Button)可点击的按钮,触发事件。输入框(Entry)单行文本输入控件。文本框(Text)多行文本编辑控件。复选框(Checkbutton)提供勾选选项。布局管理Tkinter提供三种主要的布局管理器:pack()简单的堆叠布局,组件一个接一个排列。grid()网格布局,以行和列定位组件。place()绝对定位,使用精确坐标放置组件。正则表达式基础正则表达式简介正则表达式(RegularExpression)是一种强大的文本匹配和处理工具,可用于搜索、替换、验证文本模式。Python通过re模块提供正则表达式支持,用于复杂的字符串处理。常用元字符元字符含义示例.匹配任意字符(除\n外)a.b匹配acb,adb等^匹配开始位置^abc匹配以abc开头的字符串$匹配结束位置abc$匹配以abc结尾的字符串*匹配0次或多次ab*匹配a,ab,abb等+匹配1次或多次ab+匹配ab,abb等,不匹配a?匹配0次或1次ab?匹配a或ab{n}匹配恰好n次a{3}匹配aaa{n,m}匹配n到m次a{2,4}匹配aa,aaa,aaaa[]匹配字符集[abc]匹配a,b或c\d匹配数字\d等价于[0-9]\w匹配字母、数字、下划线\w等价于[a-zA-Z0-9_]re模块主要函数re.match()从字符串开头匹配模式,如果匹配成功返回匹配对象,否则返回Nonere.search()在字符串中搜索模式,找到第一个匹配项返回匹配对象re.findall()返回字符串中所有匹配模式的字符串列表re.sub()替换字符串中匹配模式的部分实例:邮箱验证importredefis_valid_email(email):#邮箱正则表达式模式pattern=r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'#使用re.match验证ifre.match(pattern,email):returnTrueelse:returnFalse#测试邮箱emails=["user@","invalid-email","another.user@"]foremailinemails:ifis_valid_email(email):print(f"{email}是有效的邮箱地址")else:print(f"{email}不是有效的邮箱地址")简单爬虫案例网络爬虫简介网络爬虫是一种自动获取网页内容的程序,Python因其简洁的语法和丰富的库,成为爬虫开发的热门语言。基本爬虫流程:发送HTTP请求获取网页解析HTML提取所需数据处理和存储数据常用爬虫库urllibPython标准库,用于处理URL和HTTP请求requests优雅简单的HTTP库,使用更加方便BeautifulSoupHTML/XML解析库,便于提取数据lxml高性能的XML/HTML解析器豆瓣电影Top250爬虫示例importrequestsfrombs4importBeautifulSoupimportcsvdefcrawl_douban_top250():#请求头,模拟浏览器headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36'}#存储结果的列表movies=[]#爬取第一页url='/top250'response=requests.get(url,headers=headers)ifresponse.status_code==200:#解析HTMLsoup=BeautifulSoup(response.text,'html.parser')movie_list=soup.find('ol',class_='grid_view').find_all('li')#提取电影信息formovieinmovie_list:title=movie.find('span',class_='title').textrating=movie.find('span',class_='rating_num').textquote=movie.find('span',class_='inq')quote=quote.textifquoteelse"暂无简评"movies.append([title,rating,quote])#保存到CSV文件withopen('douban_top250.csv','w',newline='',encoding='utf-8')asf:writer=csv.writer(f)writer.writerow(['电影名','评分','简评'])writer.writerows(movies)returnf"成功爬取{len(movies)}部电影信息"else:returnf"请求失败,状态码:{response.status_code}"#运行爬虫print(crawl_douban_top250())爬虫注意事项爬虫使用需遵守网站robots.txt规则,避免频繁请求,尊重版权,不得用于非法用途。很多网站有反爬机制,需合理设置爬取频率和请求头。异步与多线程并发编程简介并发编程允许程序同时执行多个任务,提高执行效率,尤其适用于I/O密集型任务(如网络请求、文件操作)。Python提供多种并发编程方式:多线程(threading模块)多进程(multiprocessing模块)异步IO(asyncio模块)Python线程模块importthreadingimporttimedeftask(name,seconds):"""线程执行的任务"""print(f"任务{name}开始")time.sleep(seconds)#模拟耗时操作print(f"任务{name}完成,耗时{seconds}秒")#创建多个线程threads=[]foriinrange(3):t=threading.Thread(target=task,args=(f"线程{i+1}",i+1))threads.append(t)t.start()#启动线程#等待所有线程完成fortinthreads:t.join()print("所有线程已完成")多线程下载示例importthreadingimportrequestsimporttimedefdownload_file(url,filename):"""下载文件的函数"""print(f"开始下载{filename}")response=requests.get(url,stream=True)withopen(filename,'wb')asf:forchunkinresponse.iter_content(chunk_size=1024):ifchunk:f.write(chunk)print(f"{filename}下载完成")#要下载的文件列表files=[('/file1.pdf','file1.pdf'),('/file2.pdf','file2.pdf'),('/file3.pdf','file3.pdf')]#单线程下载start_time=time.time()forurl,filenameinfiles:download_file(url,filename)print(f"单线程耗时:{time.time()-start_time:.2f}秒")#多线程下载start_time=time.time()threads=[]forurl,filenameinfiles:t=threading.Thread(target=download_file,args=(url,filename))threads.append(t)t.start()fortinthreads:t.join()print(f"多线程耗时:{time.time()-start_time:.2f}秒")GIL与并发Python的全局解释器锁(GIL)限制了多线程在CPU密集型任务上的性能。在这种情况下,多进程(multiprocessing)可能是更好的选择。对于I/O密集型任务,多线程和异步IO都能显著提高性能。使用Pygame开发小游戏Pygame简介Pygame是Python的游戏开发库,基于SDL(SimpleDirectMediaLayer),提供了图形、声音、输入等游戏开发所需的功能。主要功能:图形绘制和图像处理声音和音乐播放键盘、鼠标和游戏手柄输入碰撞检测精灵(Sprite)系统Pygame安装与基本结构#安装Pygame#pipinstallpygameimportpygameimportsys#初始化Pygamepygame.init()#创建游戏窗口screen=pygame.display.set_mode((800,600))pygame.display.set_caption("我的第一个Pygame游戏")#游戏循环running=Truewhilerunning:#处理事件foreventinpygame.event.get():ifevent.type==pygame.QUIT:running=False#游戏逻辑更新#绘制屏幕screen.fill((0,0,0))#填充黑色背景#更新显示pygame.display.flip()#退出游戏pygame.quit()sys.exit()贪吃蛇游戏核心代码初始化设置设置窗口大小、颜色、蛇的初始位置和方向、食物位置等。处理输入监听键盘事件,根据按键改变蛇的移动方向。更新游戏状态移动蛇,检测碰撞,处理吃到食物的情况。绘制游戏画面绘制蛇、食物和得分等游戏元素。#贪吃蛇游戏部分核心代码defmove_snake(snake,direction):head=snake[0].copy()ifdirection=="UP":head[1]-=GRID_SIZEelifdirection=="DOWN":head[1]+=GRID_SIZEelifdirection=="LEFT":head[0]-=GRID_SIZEelifdirection=="RIGHT":head[0]+=GRID_SIZEsnake.insert(0,head)#如果没有吃到食物,移除尾部;否则保留,蛇会变长ifnotcheck_food_collision(snake,food):snake.pop()else:generate_food()returncheck_collision(snake)游戏开发进阶掌握基础后,可以尝试开发更复杂的游戏,如飞机大战、俄罗斯方块等。也可探索PyGame的高级功能,如粒子效果、物理引擎集成等。项目实战:记账本项目概述开发一个简单的个人记账应用,实现收入支出记录、数据存储与可视化、图形用户界面等功能。主要功能:添加、删除、查询收支记录按日期、类别筛选记录生成收支统计报表数据持久化存储图形化用户界面项目结构accounting_app/├──main.py#主程序入口├──models.py#数据模型├──storage.py#数据存储├──gui.py#图形界面├──report.py#报表生成└──data/#数据文件目录└──records.json核心代码示例数据模型#models.pyclassRecord:def__init__(self,date,type,amount,category,note=""):self.date=date#日期self.type=type#类型:收入/支出self.amount=amount#金额self.category=category#分类self.note=note#备注defto_dict(self):return{"date":self.date,"type":self.type,"amount":self.amount,"category":self.category,"note":self.note}数据存储#storage.pyimportjsonimportosclassStorage:def__init__(self,file_path):self.file_path=file_pathself.ensure_file_exists()defensure_file_exists(self):ifnotos.path.exists(self.file_path):withopen(self.file_path,'w')asf:json.dump([],f)defload_records(self):withopen(self.file_path,'r')asf:returnjson.load(f)defsave_records(self,records):withopen(self.file_path,'w')asf:json.dump(records,f,indent=2)图形界面#gui.py(部分代码)importtkinterastkfromtkinterimportttk,messageboxclassAccountingApp:def__init__(self,root):self.root=rootself.root.title("个人记账本")self.root.geometry("800x600")#创建标签页self.notebook=ttk.Notebook(root)self.tab_add=tk.Frame(self.notebook)self.tab_view=tk.Frame(self.notebook)self.tab_stats=tk.Frame(self.notebook)self.notebook.add(self.tab_add,text="添加记录")self.notebook.add(self.tab_view,text="查看记录")self.notebook.add(self.tab_stats,text="统计报表")self.notebook.pack(expand=1,fill="both")#初始化各标签页内容self.init_add_tab()self.init_view_tab()self.init_stats_tab()项目扩展方向完成基础功能后,可以考虑添加多用户支持、云同步、预算管理、消费分析、账单提醒等高级功能,或者将应用打包为可执行文件方便分发。案例拓展:微信机器人微信机器人简介利用Python开发微信机器人,可以实现自动回复、消息监控、群管理等功能,提高社交媒体运营效率。主要应用场景:客服自动回复信息推送与提醒群聊管理与数据统计定时任务执行实现方案itchat库基于网页版微信的PythonAPI,使用简单,适合个人开发者WeChatPy支持微信公众号API的Python库,适合开发公众号应用企业微信API适合企业内部应用开发,官方支持,稳定性好示例代码:简单微信机器人#需要安装itchat库:pipinstallitchatimportitchatimportreimporttime#登录微信itchat.auto_login(hotReload=True)#关键词回复字典replies={"你好":"你好!我是小甲鱼机器人,有什么可以帮助你的吗?","Python":"Python是一种编程语言,由GuidovanRossum创建,特点是简洁易读。","教程":"小甲鱼Python教程是一套优秀的Python入门学习资料,详情请访问官网。"}#处理收到的文本消息@itchat.msg_register(itchat.content.TEXT)deftext_reply(msg):#获取消息内容content=msg['Text']#检查是否包含关键词forkeyword,replyinreplies.items():ifke

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论