You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:55:23