Python自学笔记10:实操案例七(根据星座测试性格特点、模拟12306火车订票下单)
网课传送门:https://www.bilibili.com/video/BV1Sw411Z779?p=157
第157讲
1.根据星座测试性格特点
星座列表和性格列表是一一对应的关系,需要将列表先通过zip转换成元组,再转成字典,然后通过录入的星座名称来找对应的性格特点
因为这些输出都是一样的道理,我就不写老师那么多了
正常执行:

查找不存在的星座:

constellation=['白羊座','金牛座','天蝎座','狮子座','射手座']
nature=['积极乐观','固执内向','阴暗消极','迷之自信','放荡不羁']
#两个列表打包转换成元组,再转换为字典
d=dict(zip(constellation,nature))
for item in d:
print(item,d[item])#根据键获取值
print(d)#“键”+“值”的形式输出
key=input('请输入您的星座名称')
#print(key,'的性格特点为:',d.get(key))如果输入不存在的星座的话会输出None
flag=True
for item in d:
if key==item:
flag=True
print(key,'的性格特点为:',d.get(key))
break
else:
#print('对不起,您输入的星座有误')
flag=False
if not flag:
print('对不起,您输入的星座有误')
2.模拟12306火车订票下单
发车信息储存在字典里,用车次信息做键,用后面一大串具体信息做值:

一个有趣的BUG:复制写好的第一个车次信息修改的时候忘了改最前面的车次了,于是就会出现这种最后只输出一行的情况:
把前面车次改正之后BUG解决(格式没调空格和\t所以不太美观):

老师在片尾留下了思考题,如果车次不存在的问题怎么解决,我这里也自己试着写了一个方法:
把买到车票之后(输入的车次确实是列表里面有的)的代码都放进一个函数里面,起名PrintTrain()

def PrintTrain():#如果买的有这个车次,就输出信息,因为定义要放在调用前面,所以顺序和老师的不一样
persons = input('请输入乘车人,如果是多人请使用逗号分隔:')
s = f'您已购买了{train_num}次列车 '
s_info=dict_ticket[train_num]#通过train_num这个车次键获取列车详细信息(是一个列表)
s=s_info[0]+' '+s_info[1]+' 开'#运用索引通过列表里面的元素拼接字符串
print(f'{s}请{persons}尽快取走纸质车票。【铁路客服】')#s和persons两个设定好的字符串会取代{}里面的内容
也就是说,整个代码的逻辑是:只有你真买对了列表里面有的车次,才会调用这个函数,如果你瞎输入车次,列表里根本没有这趟车,直接就输出一个查无此车,拜拜了您嘞!

随便乱输——查无此车:

输个列表里面有的:

dict_ticket={'G1569':['北京南-天津南','18:05','18:39','00:34'],
'G1567':['北京南-天津南','18:15','18:49','00:34'],
'G8917':['北京南-天津西','18:20','19:19','00:59'],
'G203':['北京南-天津南','18:35','19:09','00:34']}
print('车次\t\t出发站-到达站\t\t出发时间\t\t到达时间\t\t历时时长:')
for item in dict_ticket:
print(item,end='\t')#关键字参数,不换行,只空格
for i in dict_ticket[item]:#遍历item这个键对应的值,值是一个列表
print(i,end='\t\t')#同样不允许换行,只空格
print()#遍历完一个车次之后换行
def PrintTrain():#如果买的有这个车次,就输出信息,因为定义要放在调用前面,所以顺序和老师的不一样
persons = input('请输入乘车人,如果是多人请使用逗号分隔:')
s = f'您已购买了{train_num}次列车 '
s_info=dict_ticket[train_num]#通过train_num这个车次键获取列车详细信息(是一个列表)
s=s_info[0]+' '+s_info[1]+' 开'#运用索引通过列表里面的元素拼接字符串
print(f'{s}请{persons}尽快取走纸质车票。【铁路客服】')#s和persons两个设定好的字符串会取代{}里面的内容
#输入要购买的车次:
train_num=input('请输入您要购买的车次:')
Flag=False
for item in dict_ticket:
if(item==train_num):
Flag=True#如果找得到这趟车,Flag才是True\
PrintTrain()
break
if(Flag==False):
print('对不起,查无此列车!')
6737

被折叠的 条评论
为什么被折叠?



