Python开发基础 项目实训 在线投票系统ppt课件.pptx
项目实训-在线投票系统,完成“在线投票系统”添加投票候选人删除候选人为候选人投票按序号投票删除投票输出统计信息,本章任务,2/30,理解程序的基本概念会使用顺序、选择、循环、跳转语句编写程序会使用列表、字典等数据结构会使用相关运算符和函数做统计计算,本章目标,3/30,开发工具PyCharm CommunityAnaconda3.5.1开发语言Python3.6.4,项目环境准备,4/30,传统人工投票及统计票数方法投票统计速度较慢计票准确率不能保证不能在投票过程中实时输出统计结果在线投票系统采用序号投票的方式,速度较快程序进行计票统计,准确率有保证在程序中设置命令,实时调用统计模块输出统计结果,项目需求分析,5/30,开发步骤明确需求主要阶段添加候选人给候选人投票输出统计信息明确主要功能思考各个功能的实现方式,问题分析,6/30,项目流程图,阶段1实现功能:增减候选人,阶段2实现功能:1.按序号投票2.删除投票3.清空票数4.实时输出统计信息,阶段3实现功能:输出统计信息,7/30,添加候选人,项目效果参考3-1,8/30,为候选人投票,项目效果参考3-2,9/30,输出统计信息,项目效果参考3-3,10/30,实现添加和删除候选人名使用列表数据结构,通过append()和pop()方法实现退出添加候选人阶段使用break跳出while循环实现在控制台交互使用input()函数实现使用命令的形式操作实现操作使用if语句判断输入的内容,项目功能拆解添加候选人,11/30,对候选人投票添加票数、减少票数和清空票数使用列表数据结构,通过append()和pop()方法实现清空票数直接将保存列表的变量赋值为空列表结束投票使用break跳出while循环实现在控制台交互使用input()函数实现使用命令的形式操作实现操作使用if语句判断输入的内容,项目功能拆解为候选人投票,12/30,票数计数及排序接收投票阶段返回的得票列表使用字典实现计数,返回该字典使用列表sort()方法实现排序,返回列表统计信息输出接收统计票数字典作为参数,输出统计信息排名票数票数占比,项目功能拆解输出统计结果,13/30,项目功能拆解代码函数列表,14/30,当添加候选人列表为空时,阻止直接进入投票阶段,并提示“请先输入候选人名”,难点分析添加候选人阶段,vote_list = #候选人列表while True:candidate = input(请输入候选人名或者输入命令) if prompt.strip() = finish: if len(vote_list) !=0: break else: print(请先输入候选人名)else: vote_list.append(candidate) print(添加候选人成功),15/30,输入的候选人名如果不在候选人名单中,提示“请输入候选人列表中的名字”,难点分析为候选人投票阶段3-1,vote_list = “张三”,”李四” #候选人列表votes_name = #投票列表voting = input(投票给:)if voting in vote_list: #判断是否在候选人列表中 votes_name.append(voting)else: print(请输入候选人列表中的名字),16/30,操作者与命令行交互时可输入候选人名或者输入命令当输入命令时,要避免将该命令认为是操作者投票,难点分析为候选人投票阶段3-2,vote_list = “张三”,”李四” #候选人列表votes_name = #投票列表key_word_list=stop,menu #定义命令关键字voting = input(投票给:)if voting in key_word_list : #判断是否输入命令 if voting =stop:#实现stop命令的功能 elif .:#实现其他命令的功能elif voting in vote_list: #判断是否输入候选人 votes_name.append(voting)else: print(请输入候选人列表中的名字),17/30,为了输入速度更快,对输入的候选人序号进行投票,可以使用列表索引实现,难点分析为候选人投票阶段3-3,vote_list = “张三”,”李四” #候选人列表votes_name = #投票列表voting = input(投票给:)if voting in vote_list: #判断是否在候选人列表中 votes_name.append(voting)elif voting in str(i) for i in range(1,len(vote_list)+1): vote_name.append(vote_listint(voting)-1)else: print(请输入候选人列表中的名字或者对应的序号),input()函数返回的类型为str类型,必要时需要做类型转换,注意,18/30,定义函数append_candidates()声明空列表vote_list保存候选名使用while、break添加候选人使用if语句实现输入命令来控制程序返回vote_list列表,项目实现思路添加候选人,示例,19/30,定义计数函数counter(votes_name)函数的参数是投票列表(并非候选人列表)声明空字典count_dict遍历votes_name列表,使用count_dict计数返回字典count_dict,项目实现思路计数函数,示例,20/30,定义排序函数sort_by_value(votes,top_k=None)参数votes接收计数函数返回的字典top_k可选参数,当候选人名单较多时,选取前k遍历votes中的items()使用sort()函数,对票数进行降序排序返回排序后的列表,项目实现思路排序函数,示例,21/30,定义统计信息函数describe(votes,temp=False)参数votes接收counter()函数返回的计数字典temp可选参数表示调用时的位置对votes.values()进行求和,求出总票数调用sort_by_value()函数进行排序最终打印出统计信息排名、票数、占总票数百分比,项目实现思路统计信息函数,示例,22/30,定义投票函数append_vote(vote_list)vote_list参数是候选人列表声明votes_name保存投票,声明命令列表使用while、break添加投票使用if语句实现输入命令来控制程序添加菜单选项控制程序运行返回votes_name投票列表,项目实现思路投票函数,示例,23/30,定义投票函数online_voting(vote_list)打印规则介绍信息调用append_candidates()函数添加候选人调用append_vote()函数进行投票调用counter()进行统计计数调用describe()函数进行输出统计信息,项目实现思路主运行函数,示例,24/30,编码实现“在线投票系统”,学员操作,完成时间:30分钟,25,常见问题及解决办法代码规范问题调试技巧,共性问题集中讲解,26/30,使用函数,让程序功能和流程的模块化更清晰设计程序时需要考虑周全,以保证程序健壮当尚未添加候选人时,不能进入投票阶段不能将票投给未在候选人列表中的人投票阶段输入命令时需要进行判断,总结,27/30,