1.文件目录
?2.main.py主文件
from utils import welcome,examineIdCard,playMusic,dataAnalysis
import _thread
theFirstTime = 1
while 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 += 1
welcome()
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 np
import pandas as pd
def 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 datetime
nowDate = datetime.datetime.now().strftime('%Y%m%d')
nianNowDate = nowDate[0:4] #20211223
yueNowDate = 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:
#目前月日大于等于出生月日,说明今年生日已过,年龄还要再加1
age = int(nianNowDate)-int(nianBirth)+1
return sheng,shi,gender,age,nianBirth,yueBirth,riBirth
def 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 = sheng
shi = shi
quxian = quxian
chushengdi = sheng+shi+quxian
dateOfBirth = dateOfBirth
policeStation = policeStation
age = age
gender = gender
height = 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 winsound
def playMusic():
winsound.PlaySound("music/雪之梦重混版.wav",winsound.SND_FILENAME)
def body_height():
print("(售票老大爷)oh~上帝啊 瞧我的记性(公园售票处记忆力不好的老大爷),来!购票前上帝还需要你的一些信息")
print("(售票老大爷)嗨!快过来! 你要到那里去儿")
print("(售票老大爷)oh~上帝啊 快!告诉我你的身高吧,这样你就能够快点儿进去公园去和动物们打招呼了!")
height = input("(售票老大爷)快点写上你的身高吧:")
return height
def 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 np
import pandas as pd
import matplotlib.pyplot as plt
def 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":
#age
plt.pie(x=age,labels=labels,autopct="%0.2f%%")
plt.title("Age scale")
else:
#height
plt.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可能会比较慢):
链接:https://pan.baidu.com/s/1X2WaQ8Pmz8PouypTRJpS5w? 提取码:rp9k?
也可以加我的QQ:827843900 获取资料
|