1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python公园售票小程序(身份证获取简单信息+简单数据分析+简单多线程)

python公园售票小程序(身份证获取简单信息+简单数据分析+简单多线程)

时间:2023-07-04 06:12:46

相关推荐

python公园售票小程序(身份证获取简单信息+简单数据分析+简单多线程)

1.文件目录

2.main.py主文件

from utils import welcome,examineIdCard,playMusic,dataAnalysisimport _threadtheFirstTime = 1while True:_thread.start_new_thread(playMusic) #开启多线程播放音乐if theFirstTime == 1: #初次游玩(没有信息所以不展示数据分析功能)choose = int(input("请选择(1.进入 2.出去) :"))else:choose = int(input("请选择(1.进入 2.出去 3.数据分析) :"))if choose == 1:theFirstTime += 1welcome()examineIdCard()elif choose == 2:break #退出else:dataAnalysis() #进入数据分析

3.utils.py

简单说一下各个方法的功能:

welcome():输出一些信息

examineIdCard():对输入的身份证号(位数)进行判断、使用身份证校验位对身份证号进行有效校验

judgeMessage():对身份证信息省市区(目前只有山东省各市信息)、性别简单计算、年龄复杂计算(对我而言比较复杂~)

printMessage():将身份证获取到的信息保存在目录下的Identity Information.xlsx文件夹

playMusic():多线程播放音乐

body_height():输出信息、获取终端输入的身高信息

buyTicket():根据年龄和身高判断票的具体类型

dataAnalysis():读取Identity Information.xlsx文件里的内容,进行简单数据分析。

(时间紧迫,我就只对年龄和身高进行了饼图绘制)

import numpy as npimport pandas as pddef welcome():#欢迎语print("*************************欢~迎~游玩-->!青科大公园!*************************")print("----------------------------------------------------------------------------")print("| 购票须知 |")print("|(1)2岁以下(包含2岁)儿童免票。|")print("|(2)2岁以上到16岁未成年人,未到1.2m的购买半票,超过1.2米(包含1.2米)的购全票。 |")print("|(3)16岁(不含16岁)到60岁(不含60岁)的成人购全票。 |")print("|(4)60岁及以上长者,凭退休证购买半票。 |")print("----------------------------------------------------------------------------")def examineIdCard():idCard = input("(售票老大爷)嗨!年轻人,公园售票口在这儿,快过来吧,把你的身份证(号码)给我:")#对身份证输入号码位数进行有效识别if len(idCard) != 18:print("您输入的身份证号位数错误,请重新输入!")else:#(准备)全部转化为列表容易操作idCard = list(idCard)WEIGHTS = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] #设置加权因子列表sum = 0 #求和for i in range(len(WEIGHTS)):sum += int(idCard[i])*WEIGHTS[i]remainder = sum % 11 #计算余数REMAINDER_CHECKCODE = [1,0,'X',9,8,7,6,5,4,3,2] #设置余数-校验码对照表,采用列表形式if REMAINDER_CHECKCODE[remainder] == int(idCard[17]):print("(售票老大爷)oh~上帝啊 瞧一瞧,这个消息真让人开心,你的身份被上帝认可了~~")print("(售票老大爷)接下来请开始购票吧!")else:print("------------>身份证无效")#保存一些信息:前六位是地区代码,7~14位是出生年月,15、16为派出所代码,17位是性别sheng = "".join(idCard[0:2])#出生地shi = "".join(idCard[2:4])quxian = "".join(idCard[4:6])dateOfBirth = "".join(idCard[6:14]) #出生年月policeStation = "".join(idCard[14:16]) #派出所代码gender = "".join(idCard[16]) #性别sheng,shi,gender,age,nianBirth,yueBirth,riBirth = judgeMessage(idCard,sheng,shi,gender,dateOfBirth) #判断信息方法height = body_height() #输入身高信息函数# printMessage(idCard,sheng,shi,quxian,policeStation,gender,age,nianBirth,yueBirth,riBirth,height) ##打印信息方法printMessage(idCard,sheng,shi,quxian,dateOfBirth,policeStation,age,gender,height)buyTicket(age,height) #买票方法def judgeMessage(idCard,sheng,shi,gender,dateOfBirth):#信息判断if sheng == "37":sheng = "山东省"SHI = ['0','济南市','青岛市','淄博市','枣庄市','东营市','烟台市','潍坊市','济宁市','泰安市','威海市','日照市','','临沂市','德州市','聊城市','滨州市','菏泽市']shi = SHI[int(shi)]if gender == "1":gender = "男"else:gender="女"#处理年龄(粗略的计算年龄)# 计算机获取当前年月日 与 身份证上的年月日 进行做差比较import datetimenowDate = datetime.datetime.now().strftime('%Y%m%d')nianNowDate = nowDate[0:4] #1223yueNowDate = nowDate[4:6]riNowDate = nowDate[6:8]idCard = "".join(idCard)nianBirth = idCard[6:10] #身份证上的年月日yueBirth = idCard[11:12]riBirth = idCard[12:14]if int(yueNowDate+riNowDate) < int(yueBirth+riBirth):#目前月日小于出生月日,说明今年生日还没有过age = int(nianNowDate)-int(nianBirth)else:#目前月日大于等于出生月日,说明今年生日已过,年龄还要再加1age = int(nianNowDate)-int(nianBirth)+1return sheng,shi,gender,age,nianBirth,yueBirth,riBirthdef printMessage(idCard,sheng,shi,quxian,dateOfBirth,policeStation,age,gender,height):idCard = "".join(idCard)df = pd.read_excel('Identity Information.xlsx')#获取信息if gender == "男":idCard = "Adam"else:idCard = "Eve"sheng = shengshi = shiquxian = quxianchushengdi = sheng+shi+quxiandateOfBirth = dateOfBirthpoliceStation = policeStationage = agegender = genderheight = height#添加到表格中#1.获取当前表格的空行havehang_index = df.shape[0]df.loc[havehang_index] = [idCard,chushengdi,dateOfBirth,policeStation,age,gender,height]#重新保存df.to_excel("Identity Information.xlsx",encoding='utf-8',index=False)import winsounddef playMusic():winsound.PlaySound("music/雪之梦重混版.wav",winsound.SND_FILENAME)def body_height():print("(售票老大爷)oh~上帝啊 瞧我的记性(公园售票处记忆力不好的老大爷),来!购票前上帝还需要你的一些信息")print("(售票老大爷)嗨!快过来! 你要到那里去儿")print("(售票老大爷)oh~上帝啊 快!告诉我你的身高吧,这样你就能够快点儿进去公园去和动物们打招呼了!")height = input("(售票老大爷)快点写上你的身高吧:")return heightdef buyTicket(age,height):if age<=2:#免票print("(售票老大爷)你才刚"+str(age)+"岁!免票")print("(售票老大爷)ohohoh~上帝真是眷顾你,我的孩子!快去玩儿吧")elif age>2 and age<=16:if height<120:print("(售票老大爷)你"+str(age)+"岁了,购买半票!")print("(售票老大爷)ohohoh~上帝真是眷顾你,你的票由程序开发人员帮你购买了!快去玩儿吧")else:print("(售票老大爷)你"+str(age)+"岁了,购买全票!")print("(售票老大爷)ohohoh~上帝真是眷顾你,你的票由程序开发人员帮你购买了!快去玩儿吧")elif age>16 and age<60:print("(售票老大爷)你"+str(age)+"了,已经成人喽!购买全票")print("(售票老大爷)ohohoh~上帝真是眷顾你,你的票由程序开发人员帮你购买了!快去玩儿吧")elif age>=60:get_txz = input("(售票老大爷)您带退休证了吗?(回答yes或者no!):")if get_txz == "yes":print("(售票老大爷)您购买半票!")if get_txz == "no":print("(售票老大爷)您购买全票!下次再来请记得带好您的退休证。")import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdef dataAnalysis():#简单数据分析(年龄、性别、身高),画个饼图#1.读取数据df = pd.read_excel('Identity Information.xlsx')#获取需要进行画图的列信息labels = list(df['姓名'])age = list(df['年龄'])gender = list(df['性别'])height = list(df['身高'])choice = input("请选择需要看的图:1(年龄比例饼图)、2(身高比例饼图)。请输入:")if choice == "1":#ageplt.pie(x=age,labels=labels,autopct="%0.2f%%")plt.title("Age scale")else:#heightplt.pie(x=height,labels=labels,autopct="%0.2f%%")plt.title("Height scale")# 显示图例plt.legend()# 展示plt.show()

4.使用方法。

(1)下载安装包,选择“解压到当前文件夹”

(2)使用vscode打开(使用你自己的python编辑器),进入main,py执行就可以了。

开始运行后,自动播放音乐(班得瑞的雪之梦重混版),会让你选择“进入”还是“退出”:

选择“进入”,弹出欢迎信息,然后输入你的身份证号:

(我就不输完了,保护隐私)

然后再出现一些交谈信息,提示你输入身高:

输入完身高后,会自动根据身份证获得的年龄结合身高,输出你的购票信息(这里往后我就没有再深入写了)我继续写数据分析去了

如上图,选择3进行数据分析

再继续选择图的种类(也是由于时间紧迫,我只做了两种图 年龄比例图和身高比例图),后续可以再往下写(我就此为止了!)

选择2,就得到图形了

源码百度云连接(没有VIP可能会比较慢):

链接:/s/1X2WaQ8Pmz8PouypTRJpS5w

提取码:rp9k

也可以加我的QQ:827843900 获取资料

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。