📅  最后修改于: 2023-12-03 15:28:40.103000             🧑  作者: Mango
在一个文件中,有多个门票,每个门票包含一些信息(如姓名,门票类型,购买时间等)。现给定一个门票的列表,编写一个程序,用于检查门票是否有效。
门票类型分为两种:普通门票和 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 }
,其中 valid
为 True
表示门票有效,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},
# ]
此题需要遍历给定的门票列表,对于每个门票进行以下判断:
如果判断成功,则标记门票有效,否则标记门票无效。
最终,生成一个新的列表,包含原来的门票信息,以及额外的有效性标记。
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
的使用方法,以及列表和字典的基本操作等。