python实操案例__02—利用prettytable库模拟高铁售票系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实操案例__02—利用prettytable库模拟高铁售票系统相关的知识,希望对你有一定的参考价值。
1 问题描述
设计一个简易售票系统,可循环购票并显示余票。
2 功能拆解
2.1 什么是prettytable?
PrettyTable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格,本实操案例用此库完成。
基本使用
#创建表:
tb = pt.PrettyTable()
#按行/列添加数据:
tb.add_row( <llist> )
tb.add_column( <llist> )
2.2 显示初始坐席
-
创建列数及列名
tb.field_names=[行号,座位1,座位2,座位3,座位4,座位5]
-
根据输入行数创建并显示坐席
for i in range(row_num): lst=[f第i+1行,有票,有票,有票,有票,有票] tb.add_row(lst)
-
显示坐席
print(tb)
2.3 显示余票
与显示初始坐席类似,不同点在于传入的参数为售后的lst,对lst遍历
2.4 函数入口
主函数运行
2.4 订票
- 订票函数需要输入行数和列数;
- 函数对购买位置的参数设为已售;
- 在一个死循环中,判断是否继续购票,输入N则break跳出循环。
3 运行结果
+--------+-------+-------+-------+-------+-------+ | 行号 | 座位1 | 座位2 | 座位3 | 座位4 | 座位5 | +--------+-------+-------+-------+-------+-------+ | 第1行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第2行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第3行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第4行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第5行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第6行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第7行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第8行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第9行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第10行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第11行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第12行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第13行 | 有票 | 有票 | 有票 | 有票 | 有票 | +--------+-------+-------+-------+-------+-------+ 请输入选择的座位,如13,5表示13排5号12,2 您已成功购买第12行2座 余票显示如下: +--------+-------+-------+-------+-------+-------+ | 行号 | 座位1 | 座位2 | 座位3 | 座位4 | 座位5 | +--------+-------+-------+-------+-------+-------+ | 第1行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第2行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第3行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第4行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第5行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第6行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第7行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第8行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第9行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第10行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第11行 | 有票 | 有票 | 有票 | 有票 | 有票 | | 第12行 | 有票 | 已售 | 有票 | 有票 | 有票 | | 第13行 | 有票 | 有票 | 有票 | 有票 | 有票 | +--------+-------+-------+-------+-------+-------+ 是否继续购票y/ny
4 完整代码
import prettytable as pt
#显示坐席
def show_ticket(row_num):
tb=pt.PrettyTable()
tb.field_names=[行号,座位1,座位2,座位3,座位4,座位5]
for i in range(row_num):
lst=[f第i+1行,有票,有票,有票,有票,有票]
tb.add_row(lst)
print(tb)
#订票
def order_ticket(row_num,row,column):
print(f您已成功购买第row行column座)
print(余票显示如下:)
global lst2
lst2=[]
for i in range(row_num):
if int(row)==i+1:
lst=[f第i+1行,有票,有票,有票,有票,有票]
lst[int(column)]=已售
lst2.append(lst)
else:
lst = [f第i + 1行, 有票, 有票, 有票, 有票, 有票]
lst2.append(lst)
show(lst2)
while True:
anwser=input(是否继续购票y/n)
if anwser==y or anwser==Y:
while 1:
choose_num = input(请输入选择的座位,如13,5表示13排5号)
try:
row, column = choose_num.split(,)
break
except:
print(输入格式有误,如13排5号,应该输入13,5)
print(f您已成功购买第row行column座)
j=1
for item in lst2:
if j <=13:
if int(row) == j:
item[int(column)] = 已售
else:
pass
j+=1
print(余票显示如下:)
show(lst2)
else:
break
print(感谢您的使用)
#显示余票
def show(lst):
tb=pt.PrettyTable()
tb.field_names=[行号,座位1,座位2,座位3,座位4,座位5]
for item in lst2:
tb.add_row(item)
print(tb)
#主函数运行
if __name__==__main__:
row_num=13
show_ticket(row_num)
while 1:
choose_num = input(请输入选择的座位,如13,5表示13排5号)
try:
row,column=choose_num.split(,)
break
except:
print(输入格式有误,如13排5号,应该输入13,5)
order_ticket(row_num,row,column)
以上是关于python实操案例__02—利用prettytable库模拟高铁售票系统的主要内容,如果未能解决你的问题,请参考以下文章
python实操案例__03--python定向爬虫之淘宝商品比价