首页 > 编程语言 >python实操案例__02—利用prettytable库模拟高铁售票系统

python实操案例__02—利用prettytable库模拟高铁售票系统

时间:2022-12-02 13:00:27浏览次数:40  
标签:02 __ 13 python lst num 座位 tb row

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)

标签:02,__,13,python,lst,num,座位,tb,row
From: https://blog.51cto.com/husheng/5906955

相关文章

  • iTOP3588开发板Android固件编译-修改成hdmi显示
    打开安卓12源码kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-evb7-lp4.dtsi中的设备树文件。注释掉#include"iTop-3588-mipi0.dts既配置为hdmi屏幕显示。如......
  • Golang语言算术运算符教程
    语法运算符说明范例结果+正号+55-负号-5-5+加法运算符3+58-减法运算符5-32*乘法运算符5*315/除法运算符10/33%取模10%31++自增运算符a=2,a++3--自减运算符a=2;a--1+字符串连......
  • Flutter不常用组件(二)
    ColoredBox一般我们想要一个带有背景颜色的组件我们会使用哪个组件?当然第一个想到的就是Container。其实在Flutter中还要一个专门用来设置颜色的组件ColoredBox。该组......
  • Charles下载、安装、注册及使用
    [(46条消息)Charles下载、安装、注册及使用_COCO56(徐可可)的博客-CSDN博客_charles下载](https://blog.csdn.net/COCO56/article/details/120542080)文章目录1.下载及......
  • 第十三周python实验报告
    一个pygame篮球自动弹跳代码如下:importsysimportpygamepygame.init()size=width,height=640,480screen=pygame.display.set_mode(size)color=(0,0,0)ball=p......
  • linux中awk命令从fasta中提取指定的scaffold
     001、[root@pc1test4]#lstest.fa[root@pc1test4]#cattest.fa##测试fasta文件>mmm11111>bbb8888887777>kkk666666699999>qqq000033333[root@p......
  • powerbi 书签导航器
    书签导航器之图表切换:书签导航器大概用到3块功能一、选择模块   <视图→选择>可以对视觉对象进行分组整理;图像和表格重叠起来  1.对图形部分建立分组(图......
  • 使用seqkit软件用fasta文件中提取指定的scaffold
     001、提取单条contig[root@pc1test4]#lstest.fa[root@pc1test4]#cattest.fa##测试fasta文件>contig_1ATAGAGACGACC>contig_2ATAGGACNNAGACACGTTAGAT......
  • Android packages常见APP对应包名
    美团外卖com.sankuai.meituan.takeoutnew饿了么me.ele摩拜单车com.mobike.mobikeappOFOso.ofo.labofo今日头条com.ss.android.article.news新浪微博......
  • buuoj-[MRCTF2020]Xor
    1.winexe32bit无壳2.进入程序无法反汇编去查了百度3.很简单的异或数据是MRCTF{@_R3@1ly_E2_R3verse!}异或它的index就好了str='MSAWB~FXZ:J:`tQJ"N@bpdd}8g'......