📜  门| Gate IT 2005 |问题4(1)

📅  最后修改于: 2023-12-03 15:28:40.103000             🧑  作者: Mango

门| Gate IT 2005 |问题4

问题描述

在一个文件中,有多个门票,每个门票包含一些信息(如姓名,门票类型,购买时间等)。现给定一个门票的列表,编写一个程序,用于检查门票是否有效。

门票类型分为两种:普通门票和 VIP 门票。对于普通门票,需要检查其购买时间是否在 2019 年之内;对于 VIP 门票,需要检查其购买时间是否在 2018 年之内。如果门票有效,则标记为有效,否则标记为无效。

函数接口
def check_tickets(tickets_list: List[Dict[str, Union[str, datetime.datetime]]]) -> List[Dict[str, Union[str, datetime.datetime, bool]]]:
    pass
输入
  • tickets_list,一个包含多个门票信息的列表,每个门票信息为一个字典,包含以下字段:
    • name,门票持有者姓名,类型为 str
    • type,门票类型,类型为 str,取值为 "normal""vip"
    • time,门票购买时间,类型为 datetime.datetime
输出
  • 返回一个新列表,每个元素为原列表中对应门票的信息扩展一项标记 { "valid": bool },其中 validTrue 表示门票有效,False 则表示门票无效。
示例
import datetime

tickets = [
    {"name": "Alice", "type": "normal", "time": datetime.datetime(2019, 1, 1)},
    {"name": "Bob", "type": "normal", "time": datetime.datetime(2020, 1, 1)},
    {"name": "Charlie", "type": "vip", "time": datetime.datetime(2017, 1, 1)},
    {"name": "David", "type": "vip", "time": datetime.datetime(2019, 7, 1)},
]

result = check_tickets(tickets)
print(result)
# 输出:
# [
#     {"name": "Alice", "type": "normal", "time": datetime.datetime(2019, 1, 1), "valid": True},
#     {"name": "Bob", "type": "normal", "time": datetime.datetime(2020, 1, 1), "valid": False},
#     {"name": "Charlie", "type": "vip", "time": datetime.datetime(2017, 1, 1), "valid": False},
#     {"name": "David", "type": "vip", "time": datetime.datetime(2019, 7, 1), "valid": True},
# ]
解题思路

此题需要遍历给定的门票列表,对于每个门票进行以下判断:

  • 普通门票:其购买时间是否在 2019 年之内?
  • VIP 门票:其购买时间是否在 2018 年之内?

如果判断成功,则标记门票有效,否则标记门票无效。

最终,生成一个新的列表,包含原来的门票信息,以及额外的有效性标记。

代码实现及注释
from typing import List, Dict, Union
import datetime

def check_tickets(tickets_list: List[Dict[str, Union[str, datetime.datetime]]]) -> List[Dict[str, Union[str, datetime.datetime, bool]]]:
    """
    检查门票是否有效

    :param tickets_list: 门票列表,每个元素为一个字典,包含门票信息
    :return: 门票列表,每个元素为原来的门票信息扩展一项标记,表示门票是否有效
    """
    # 定义返回结果列表
    result = []
    # 遍历所有门票信息
    for ticket in tickets_list:
        # 判断门票类型
        if ticket["type"] == "normal":
            # 如果为普通门票,判断购买时间是否在 2019 年之内
            valid = ticket["time"].year <= 2019
        else:
            # 如果为 VIP 门票,判断购买时间是否在 2018 年之内
            valid = ticket["time"].year <= 2018
        # 扩展门票信息,加入有效性标记
        result.append({"name": ticket["name"], "type": ticket["type"], "time": ticket["time"], "valid": valid})
    # 返回新的列表
    return result
总结

本题考查对于列表和字典等复杂数据结构的处理方法,需要借助循环和条件语句等基本语法。同时,还需要注意Python中处理日期时间的内置模块datetime的使用方法,以及列表和字典的基本操作等。