Python待办清单:元组打印格式异常及值提取方法咨询
解决待办清单的两个问题
问题1:日期显示格式不符预期
你存储的Complete_Time是datetime对象,直接打印时会输出它的默认表示形式。要转换成你需要的yyyy/mm/dd HH:MM:SS格式,需要用datetime.strftime()方法,传入你定义的Format_Time格式字符串。
问题2:从元组提取任务名称和日期
元组是有序容器,每个任务元组的结构是(任务名称, datetime对象),直接通过索引[0]提取任务名称,[1]提取日期对象即可,之后可以对日期对象进行格式化处理。
修改后的完整代码
from datetime import datetime ToDoList = [] Format_Time = "%Y/%m/%d %H:%M:%S" # formatting type for strptime function def addNewItems(): global ToDoList while True: name = input("Please enter your task's name: ") if checkItemExists(name): print("Task already exists! Select the options again.") continue else: Task_Name = name break while True: date = input( "Please enter your task's completion date as yyyy/mm/dd HH:MM:SS : ") try: date = datetime.strptime(date, Format_Time) except ValueError: print("Invalid date format! Please use yyyy/mm/dd HH:MM:SS.") continue if date < datetime.now(): print("Time entered is in the past! Select the options again") continue else: Complete_Time = date print(Complete_Time.strftime(Format_Time)) # 格式化后打印日期 break task = (Task_Name, Complete_Time) ToDoList.append(task) ToDoList.sort(key=takeSecond) def checkItemExists(taskName): global ToDoList for i in ToDoList: if taskName == i[0]: return True return False # 增加默认返回值,避免无匹配时返回None def takeSecond(element): # 直接返回元组的第二个元素,无需遍历列表 return element[1] def printListItems(): global ToDoList for count, task in enumerate(ToDoList): task_name = task[0] # 提取任务名称 task_date = task[1].strftime(Format_Time) # 提取日期并格式化 print(f"{count}. 任务:{task_name},截止日期:{task_date}")
关键修改点说明
- 优化
takeSecond函数:原函数遍历列表的逻辑完全多余,直接返回元素的第二个值即可作为排序键。 - 增强日期输入的错误处理:增加
try-except捕获格式错误的输入,避免程序崩溃。 - 修改
printListItems函数:通过索引提取任务名称和日期对象,将日期对象格式化为指定字符串后打印,符合预期显示效果。 - 为
checkItemExists函数增加默认返回False,避免无匹配任务时返回None导致逻辑问题。
内容的提问来源于stack exchange,提问作者user20006707
相关产品推荐
相关产品推荐

