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 显示初始坐席

  1. 创建列数及列名

    tb.field_names=[行号,座位1,座位2,座位3,座位4,座位5]

  2. 根据输入行数创建并显示坐席

    for i in range(row_num):
        lst=[f第i+1行,有票,有票,有票,有票,有票]
        tb.add_row(lst)
    
  3. 显示坐席

    print(tb)
    

2.3 显示余票

与显示初始坐席类似,不同点在于传入的参数为售后的lst,对lst遍历

2.4 函数入口

主函数运行

2.4 订票

  1. 订票函数需要输入行数和列数;
  2. 函数对购买位置的参数设为已售;
  3. 在一个死循环中,判断是否继续购票,输入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定向爬虫之淘宝商品比价

大数据之Hadoop(MapReduce):GroupingComparator分组案例实操

python_利用高阶函数实现剪枝函数

RENIX_Python_如何实现调速——网络测试仪实操

python----03(面向对象进阶02)

大数据开发企业级案例__某通信企业数据处理需求(建议收藏)