只用python写出一个简易的火车售票系统,其中包括不同座位不同车次的选择,多次购买,限制重复购买相同座位,还有余票限制
时间: 2024-03-01 17:53:43 浏览: 64
基于Python实现的火车订票系统
好的,以下是一个包括不同座位不同车次的选择,多次购买,限制重复购买相同座位,还有余票限制的简易火车售票系统的 Python 代码:
```python
# 定义火车票信息
trains = [
{'name': 'G1', 'seats': {'商务座': 10, '一等座': 20, '二等座': 50}},
{'name': 'G2', 'seats': {'商务座': 5, '一等座': 10, '二等座': 30}},
{'name': 'G3', 'seats': {'商务座': 8, '一等座': 15, '二等座': 40}},
]
# 定义已购票信息
tickets = []
# 显示车次信息
print('车次信息:')
for i, t in enumerate(trains):
print(f'{i+1}. {t["name"]}')
# 开始购票
while True:
# 选择车次
while True:
choice = input('请选择车次编号,按回车键结束:')
if choice == '':
break
choice = int(choice)
if choice < 1 or choice > len(trains):
print('输入错误,请重新输入!')
continue
train = trains[choice-1]
print(f'您选择了车次 {train["name"]}')
# 显示座位信息
print('座位信息:')
for s, n in train['seats'].items():
print(f'{s} 余票数量:{n}')
# 选择座位类型
while True:
seat_type = input('请选择座位类型,按回车键结束:')
if seat_type == '':
break
if seat_type not in train['seats']:
print('输入错误,请重新输入!')
continue
if train['seats'][seat_type] == 0:
print('该座位类型余票不足,请选择其他座位类型!')
continue
# 检查是否重复购买相同座位
if any([t['train'] == train['name'] and t['seat_type'] == seat_type for t in tickets]):
print('您已购买过该座位,请选择其他座位类型!')
continue
# 购票成功
train['seats'][seat_type] -= 1
ticket = {'train': train['name'], 'seat_type': seat_type}
tickets.append(ticket)
print(f'您选择了 {seat_type} 座位,购票成功!')
break
# 是否继续购票
choice = input('是否继续购票?(Y/N)')
if choice.upper() != 'Y':
break
# 显示已购票信息
print('已购票信息:')
for i, t in enumerate(tickets):
print(f'{i+1}. 车次:{t["train"]} 座位类型:{t["seat_type"]}')
# 显示余票信息
print('余票信息:')
for t in trains:
print(f'{t["name"]}:{t["seats"]}')
```
实现过程:
与前面的代码类似,这个简易火车售票系统也使用了一个火车票信息列表 `trains`,包含车次名称和座位信息;以及一个已购票信息列表 `tickets`,包含车次名称和座位类型。
在用户选择车次和座位类型时,我们增加了一些判断逻辑,以限制用户的选择。具体来说,我们检查用户是否选择了正确的车次和座位类型,座位类型是否有余票,以及用户是否重复购买相同座位。如果用户选择了不正确的选项,则提示用户重新选择。
在用户购票成功后,我们将已购票信息添加到已购票信息列表 `tickets` 中,并将余票数量减 1。
购票过程结束后,我们将显示已购票信息和余票信息,以供用户查看。
需要注意的是,这个简易火车售票系统同样没有对用户输入进行严格的错误处理,例如用户输入非数字字符时程序会崩溃,实际使用时需要进行更完善的错误处理。
阅读全文