描述
    火车时速在200以上的列车:座位号是以ABCDF五个字母为区分的,一般会把座席分为商务座、一等座、二等座。
    商务座:座位布局“2+1”,一排有三个座位,其中AC是相连的,F是单独一个座位;
    一等座:座位布局“2+2”,一排有四个座位,其中AC是相连的,DF是相连的,每个车厢13排座位。
    二等座:座位布局“3+2”,一排有五个座位,其中ABC是相连的三个座位,DF是相连的两个座位,这些座位中A、F都是靠窗的座位,每个车厢20排座位。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    当前有一个空闲的一等座车厢和一个二等座车厢,用户输入座位等级和位置,位置可以是“窗口”、“中间”、“过道”和“不限”。每个一等座车厢座位排数是1-13,二等座车厢座位排数是1-20。
    根据每次输入信息为用户订购一张车票,可以反复订购,输入回车时结束程序。
    若输入的位置信息不正确,输出 ‘位置输入错误,请重新输入’。
    若选择的位置无可用车票,从可用车票中随机订购一张并请用户确认是否需要订购,若用户输入“是”则订购成功,否则输出’请重新输入购票信息’,用户重新输入订票信息。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

    1. random.choice() # 为实现自动评测,本题要求用此方法随机为用户选择车票
    2. random.seed(19730516) # 为实现自动评测,本题要求用此随机数种子

    image.png image.png‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入用空格分隔的座位等级位置‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    订票成功时输出: 购票成功,您的车票是*
    其他情况按题目要求输出‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    示例 1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入:二等座 过道 输出:购票成功,您的车票是19D
    示例 2‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入:2C 二等座 窗口 输出:购票成功,您的车票是1A
    示例 3**‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
    输入: 一等座 不限 输出: 购票成功,您的车票是4F

    1. import random
    2. def generate():
    3. """产生一个一等座车厢和一个二等座车厢的全部座位号,返回一个字典"""
    4. ticket = {}
    5. first_class, second_class = [], []
    6. for i in range(1, 21):
    7. for c in 'ABCDF':
    8. second_class.append(str(i) + str(c))
    9. for i in range(1, 14):
    10. for c in 'ACDF':
    11. first_class.append(str(i) + str(c))
    12. ticket['一等座'] = first_class
    13. ticket['二等座'] = second_class
    14. return ticket
    15. def order_ticket(seat_class, position, letter):
    16. """购票"""
    17. available = [x for x in tickets[seat_class] if x[-1] in letter]
    18. if available:
    19. user_seat = random.choice(available) # 随机一张车票
    20. tickets[seat_class].remove(user_seat) # 字典中删除卖出的车票
    21. print(f'购票成功,您的车票是{user_seat}')
    22. else: # 没有满足要求的位置,随机一张车票并询问是否需要
    23. user_seat = random.choice(tickets[seat_class]) # 随机一张车票
    24. print(f'没有{position}位置,可购买{user_seat},是否需要?输入"是"继续购买,其他输入重新购买')
    25. if input() == '是':
    26. print(f'购票成功,您的车票是{user_seat}')
    27. tickets[seat_class].remove(user_seat) # 字典中删除卖出的车票
    28. else:
    29. print('请重新输入购票信息')
    30. def order_input():
    31. """输入购票信息"""
    32. while order := input(): # 输入购票信息,输入回车结束
    33. seat_class, position = order.split()
    34. if position == '窗口':
    35. letter = 'AF'
    36. elif position == '中间':
    37. letter = 'B'
    38. elif position == '过道':
    39. letter = 'CD'
    40. elif position == '不限':
    41. letter = 'ABCDF'
    42. else:
    43. print('位置输入错误,请重新输入')
    44. continue
    45. order_ticket(seat_class, position, letter)
    46. if __name__ == '__main__':
    47. random.seed(19730516)
    48. tickets = generate()
    49. order_input()