1. 九九乘法表
for i in range(1,10): for j in range(1,i+1): print('%d*%d=%d'%(j,i,j*i),end=' ') if j==i: print()
2.血量PK小游戏
import time,random while True: player_victory=0 enermy_victory=0 for i in range(1,4): print('----------现在是第%d局----------'%i) time.sleep(2) player_life=random.randint(100,150) player_attack=random.randint(30,50) enermy_life=random.randint(100,150) enermy_attack=random.randint(30,50) print('【玩家】\n血量:{}\n攻击:{}'.format(player_life,player_attack)) print('----------------------------------------') time.sleep(2) print('【敌人】\n血量:{}\n攻击:{}'.format(enermy_life,enermy_attack)) print('----------------------------------------') time.sleep(2) while player_life>0 and enermy_life>0: player_life=player_life-enermy_attack enermy_life=enermy_life-player_attack print('【敌人】发起进攻,【玩家】剩余血量{}'.format(player_life)) time.sleep(1.5) print('【玩家】发起进攻,【敌人】剩余血量{}'.format(enermy_life)) print('---------------------------------------') time.sleep(1.5) if player_life>0 and enermy_life<0: player_victory+=1 print('恭喜你赢了') elif player_life<0 and enermy_life>0: enermy_victory+=1 print('呜呜~~敌人把你打败了') time.sleep(2) else: print('你和敌人同归于尽了') if player_victory > enermy_victory : time.sleep(2) print('\n【最终结果:你赢了!】') elif enermy_victory > player_victory: time.sleep(2) print('\n【最终结果:你输了!】') else: time.sleep(2) print('\n【最终结果:平局!】') a=input('要继续游戏吗,请输入n退出,输入其他继续:') if a=='n': break
3.工作量计时器
(面向过程编程)
import math # 变量key代表循环运行程序的开关 key = 1 # 采集信息的函数 def myinput(): choice=input('请选择计算类型:(1-工时计算,2-人力计算)') if choice=='1': size=float(input('请输入项目大小:(1代表标准大小,请输入小数)')) number = int(input('请输入人力数量:(请输入整数)')) time = None return size,number,time # 这里返回的数据是一个元组 if choice == '2': size = float(input('请输入项目大小:(1代表标准大小,请输入小数)')) number = None time = float(input('请输入工时数量:(请输入小数)')) return size,number,time # 完成计算的函数 def estimated(my_input): size=my_input[0] number = my_input[1] time = my_input[2] # 人力计算 if (number == None) and (time != None): number = math.ceil(size * 80 / time) print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number)) # 工时计算 elif (number != None) and (time == None): time = size * 80 / number print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time)) # 询问是否继续的函数 def again(): # 声明全局变量key,以便修改该变量 global key a = input('是否继续计算?继续请输入y,输入其他键将结束程序。') if a != 'y': # 如果用户不输入'y',则把key赋值为0 key = 0 #主函数 def main(): print('欢迎使用工作量计算小程序!') while key==1: my_input=myinput() estimated(my_input) again() print('感谢使用工作量计算小程序!') #调用主函数启动整个程序 main()
(面向对象编程)
import math class Project: def __init__(self): self.key=1 def input(self): choice=input('请选择计算类型:(1-工时计算,2-人力计算)') if choice=='1': self.size=float(input('请输入项目大小:(1代表标准大小, 请输入小数)')) self.number=int(input('请输入人力数量:(请输入整数)')) self.time=None if choice=='2': self.size=float(input('请输入项目大小:(1代表标准大小, 请输入小数)')) self.number=None self.time=float(input('请输入工时数量:(请输入小数)')) def estimated(self): #人力计算 if (self.number==None)and(self.time!=None): self.number=math.ceil(self.size*80/self.time) print('项目大小为%.1f个标准项目,需要在%.1f个工时完成,则需要人力数量为:%d人'%(self.size,self.time,self.number)) #工时计算 if (self.number!=None)and(self.time==None): self.time=self.size*80/self.number print('项目大小为%.1f个标准项目,使用%d个人力完成, 则需要工时数量为:%.1f个'%(self.size,self.number,self.time)) def again(self): a=input('是否继续计算?继续请输入y,输入其它将结束程序:') if a!='y': self.key=0 def main(self): print('欢迎使用工作量计算小程序!') while self.key==1: self.input() self.estimated() self.again() print('感谢使用工作量计算小程序!') project1=Project() project1.main()
可以发现,在此例中,用类编写一个直观的好处就是参数的传递会比普通函数要省事很多,不用重复传递参数,方便数据在各方法之中流转。也不必考虑全局变量和局部变量,因为类中的方法可以直接调用类中的属性。
4.流浪图书馆(图书管理系统小程序)
思路:我们的处理对象是每本具体的书,而每本书都有自己的属性信息,所以我们可以定义一个Book类,利用Book类创建一个个书的实例,绑定属性。(类的第一种用法:类作为实例对象的模板)。而这个管理系统的运行主体,是多个可供选择的功能的叠加,所以我们可以创建一个系统运行类BookManager,将查询书籍、添加书籍等功能封装成类中的方法以供调用(类的第二种用法:类作为函数包)
class Book: def __init__(self,name,author,comment,state=0): self.name=name self.author=author self.comment=comment self.state=state def __str__(self): if self.state==0: status='未借出' else: status='已借出' return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s\n'%(self.name,self.author,self.comment,status) class BookManager: books=[] def __init__(self): book1=Book('惶然录','费尔南多·佩索阿','一个迷失方向且濒于崩溃的灵魂的自我启示,一首对默默无闻、失败、智慧、困难和沉默的赞美诗。') book2=Book('以箭为翅','简媜','调和空灵文风与禅宗境界,刻画人间之缘起缘灭。像一条柔韧的绳子,情这个字,不知勒痛多少人的心肉。') book3=Book('心是孤独的猎手','卡森·麦卡勒斯','我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。',1) self.books=[book1,book2,book3] def menu(self): print('欢迎使用流浪图书管理系统,每本沉默的好书都是一座流浪的岛屿,希望你有缘发现并着陆,为精神家园找到一片栖息地。\n') while True: print('1.查询所有书籍\n2.添加书籍\n3.借阅书籍\n4.归还书籍\n5.退出系统\n') choice=int(input('请输入数字选择对应的功能:')) if choice==1: self.show_all_book() elif choice==2: self.add_book() elif choice==3: self.lend_book() elif choice==4: self.return_book() elif choice==5: print('感谢使用!愿你我成为爱书之人,在茫茫书海里相遇。') break #1.查询所有书籍 def show_all_book(self): for book in self.books: print(book) #2.添加书籍 def add_book(self): new_name=input('请输入书籍名称:') new_author=input('请输入作者名称:') new_comment=input('请输入书籍推荐语:') new_book=Book(new_name,new_author,new_comment) self.books.append(new_book) print('书籍录入成功!\n') def check_book(self,name): for book in self.books: if book.name==name: return book else: return None #3.借阅书籍 def lend_book(self): name=input('请输入书籍的名称:') res=self.check_book(name) if res!=None: if res.state==1: print('你来晚了一步,这本书已经被借走了噢') else: print('借阅成功,借了不看会变胖噢~') res.state==1 else: print('这本书暂时没有收录在系统里呢') #4.归还书籍 def return_book(self): name=input('请输入归还的书籍名称:') res=self.check_book(name) if res==None: print('没有这本书噢,你恐怕输错了书名~') else: if res.state==0: print('这本书没有被借走,在等待有缘人的垂青呢!') else: print('归还成功!') res.state=0 manager = BookManager() manager.menu()
5.楼盘信息统计(房地产)
import csv with open('assets.csv','a',newline='',encoding='utf-8') as f: writer=csv.writer(f) header=['小区名称','地址', '建筑时间','楼栋', '单元', '门牌', '朝向', '面积'] writer.writerow(header) title=input('请输入小区名称:') address=input('请输入小区地址:') year=input('请输入小区建筑年份:') block=input('请输入楼栋号:') unit_number=input('请输入单元号:') start_floor=input('请输入起始楼层:') end_floor=input('请输入终止楼层:') start_floor_rooms={} floor_last_number=[] all_floor_rooms={} unit_loop=True while unit_loop: #通过循环,收集“首层”楼所有户室信息 while True: print('接下来请输入楼层户室信息') last_number=input('请输入楼层户室尾号(比如01,02):') room_number=start_floor+last_number direction=input('请输入%s室的朝向(南北朝向输入1, 东西朝向输入2):'%room_number) area=input('请输入%s室的面积:'%room_number) start_floor_rooms[int(room_number)]=[direction,area] floor_last_number.append(last_number) answer1=input('是否要继续输入户室尾号,退出按n,按任意键继续:') if answer1=='n': break #通过循环,获取所有楼层户室的信息 all_floor_rooms[int(start_floor)]=start_floor_rooms for floor in range (int(start_floor)+1,int(end_floor)+1): floor_rooms = {} for i in range(len(start_floor_rooms)): new_room_number=str(floor)+floor_last_number[i] info=start_floor_rooms[int(start_floor+floor_last_number[i])] floor_rooms[int(new_room_number)]=info all_floor_rooms[floor]=floor_rooms #把all_floor_rooms里整个单元户室信息都写入文档里 with open('assets.csv','a',newline='',encoding='utf-8') as f: writer=csv.writer(f) for sub_dict in all_floor_rooms.values(): for room,info in sub_dict.items(): dir=['','南北','东西'] writer.writerow([title,address,year,block,unit_number,room,dir[int(info[0])],info[1]]) answer2=input('是否要继续输入本栋的其它单元信息, 否按 n 退出,是按任意键继') if answer2=='n': unit_loop=False else: unit_loop=True print('恭喜你,资产录入工作完成!')
6.自制动态二维码 (myqr模块)
from MyQR import myqr #调用run函数, 通过设置函数里的参数, 实现自己想要的二维码 myqr.run() myqr.run('https://www.pypypy.cn/app#/app-center',colorized=True,picture='image.2jpg.jpg')
7.
7.1 openpyxl 、styles 、os 模块的应用
import os from openpyxl import load_workbook,Workbook from openpyxl.styles import Alignment #新建工作簿和添加表头表名 header=['user_account','refrence_no','shipping_method_name_cn','consignee_country_code','subtotal','warehouse_sku1','warehouse_product_title1','qty1','unit_price1','currency'] sheet_names=['低利润订单(5%-10%)','低利润订单(10%-15%)','负利润(5%以内)'] new_wb=Workbook() sh_names=new_wb.sheetnames sh=new_wb[sh_names[0]] sh.title='低利润订单(5%-10%)' sh.append(header) new_wb.create_sheet(title='低利润订单(10%-15%)',index=1).append(header) new_wb.create_sheet(title='负利润(5%以内)',index=2).append(header) #注意:这里的path路径要根据处理文件位置进行修改 path='D:/每3天导出低负利润订单/wish/' files_name=os.listdir(path) for file in files_name: file_path=path+file wb=load_workbook(file_path) for sheetname in sheet_names: max_row=wb[sheetname].max_row for col_cell in wb[sheetname]['A']: if col_cell.value==None: max_row=max_row-1 last_row=max_row for row in wb[sheetname].iter_rows(min_row=2,max_row=last_row,max_col=11,values_only=True): new_wb[sheetname].append(row) #为新工作簿里每一个工作表设置统一的列宽和对齐方式 column=['A','B','C','D','E','F','G','H','I','J'] align=Alignment(horizontal='center',vertical='center') for sheetname in sheet_names: for i in column: new_wb[sheetname].column_dimensions[i].width=25 for i in new_wb[sheetname].iter_rows(max_row=new_wb[sheetname].max_row): for cell in i: cell.alignment=align #保存新建的工作簿 new_wb.save('C:/Users/Administrator/Desktop/wish6月份低利润&负利润订单.xlsx')
7.2 利用openpyxl 里的LineChart类 Reference类批量给excel表绘图
import os from openpyxl import load_workbook from openpyxl.chart import LineChart,Reference path='C:\\Users\\Administrator\\Desktop\\test\\部门表\\' file_list=os.listdir(path) for file in file_list: print('现在处理'+file) file_path=path+file wb=load_workbook(file_path) ws=wb.active chart=LineChart() data=Reference(worksheet=ws,min_row=3,max_row=9,min_col=1, max_col=5) chart.add_data(data,from_rows=True,titles_from_data=True) #from_rows=True 表示按行绘图,titles_from_data=True 表示被引用的数据首列会作为图例,不作为数据 ws.add_chart(chart,'c12') cats=Reference(worksheet=ws,min_row=2,max_row=2,min_col=2,max_col=5) chart.set_categories(cats) #设置类坐标轴的标签, 如图中的第一季度,第二季度 chart.x_axis.title='季度' chart.y_axis.title='利润' chart.style=10 #设置图的样式, 值为1-48, 包括1和48 wb.save(file_path)
8. python在PPT Word 中的应用
https://docs.forchange.cn/docs/jTQqpwJt6KJ8pxrw 《Python 操控 Word(自动化办公入门技巧)》https://docs.forchange.cn/docs/o8nKfyGrancHhwsk 《OA课外拓展相关链接》