首页 > 解决方案 > 如何获取执行时间并将其添加到我的课程中?

问题描述

我有练习编写这个简单的待办事项列表。

class Task:
    def __init__(self, task_name):
        self.task_name = [task_name, "[ ]"]

    def finish(self):
        self.task_name[1] = "[x]"


class ToDoList:
    def __init__(self, name):
        self.name = name
        self.list = []

    def add_task(self, object):
        self.task = object.task_name
        self.list.append(self.task)

    def print_list(self):
        print(self.name)
        print("##########")
        for i in self.list:
            print(i[1], i[0])

使用此实现所需的代码:

mylist = ToDoList('My sample ToDoList')
for i in range(1, 11):
    task = Task(f'Simple task #{i}')
    if i % 2:
        task.finish()
    mylist.add_task(task)
mylist.print_list()

我需要得到这样的结果。x 是任务完成的标志。

My sample ToDoList
##########
[x] Simple task #1
[ ] Simple task #2
[x] Simple task #3
[ ] Simple task #4
[x] Simple task #5
[ ] Simple task #6
[x] Simple task #7
[ ] Simple task #8
[x] Simple task #9
[ ] Simple task #10

这可以。练习的下一部分是添加执行时间,从将其添加到列表开始到标记为完成时结束。给出的输出应该是这样的:

My sample ToDoList with time
###
[x] Simple timed task #1 [1 s]
[ ] Simple timed task #2 [--- s]
[x] Simple timed task #3 [2 s]
[ ] Simple timed task #4 [--- s]
[x] Simple timed task #5 [3 s]
[ ] Simple timed task #6 [--- s]
[x] Simple timed task #7 [4 s]
[ ] Simple timed task #8 [--- s]
[x] Simple timed task #9 [5 s]
[ ] Simple timed task #10 [--- s]

并且应该使用此验证码:

mylist = ToDoList('My sample ToDoList with time')
tasks = []
for i in range(1, 11):
    task = Task(f'Simple timed task #{i}')
    tasks.append(task)
time.sleep(2)
for task in tasks:
    mylist.add_task(task)
for idx, task in enumerate(tasks):
    if idx % 2 == 0:
        time.sleep(1)
        task.finish()
mylist.print_list()

我能够完成一半,因为我得到了这个输出:

My sample ToDoList with time
##########
[x] Simple timed task #1 [--- s]
[ ] Simple timed task #2 
[x] Simple timed task #3 [--- s]
[ ] Simple timed task #4 
[x] Simple timed task #5 [--- s]
[ ] Simple timed task #6 
[x] Simple timed task #7 [--- s]
[ ] Simple timed task #8 
[x] Simple timed task #9 [--- s]
[ ] Simple timed task #10 

但我被困在如何做这件事上。我现在的完整代码:

import time
class Task:
    def __init__(self, task_name):
        self.task_name = [task_name, "[ ]", ""]

    def finish(self):
        self.task_name[1] = "[x]"
        self.task_name[2] = "[--- s]"


class ToDoList:
    def __init__(self, name):
        self.name = name
        self.list = []

    def add_task(self, object):
        self.task = object.task_name
        self.list.append(self.task)

    def print_list(self):
        print(self.name)
        print("##########")
        for i in self.list:
            print(i[1], i[0], i[2])

mylist = ToDoList('My sample ToDoList with time')
tasks = []
for i in range(1, 11):
    task = Task(f'Simple timed task #{i}')
    tasks.append(task)
time.sleep(2)
for task in tasks:
    mylist.add_task(task)
for idx, task in enumerate(tasks):
    if idx % 2 == 0:
        time.sleep(1)
        task.finish()
mylist.print_list()

任何帮助将不胜感激!

标签: python

解决方案


simply add a start_time attribute to Task (you need to import time):

import time

# in Task.__init__
    self.start_time = time.time()

# in Task.finish
    self.end_time = time.time()
    self.task_name[2] = '[' + str(self.end_time - self.start_time) + ' s]'
    # you may want to round the number before converting to string

edit:

you are currently only storing the list of the task in the ToDoList, not the Task itself. you probably want to change this:

import time
class Task:
    def __init__(self, task_name):
        self.task_name = [task_name, "[ ]", "[0 s]"]
        self.start_time = time.time()
        self.finished = False
    def finish(self):
        self.task_name[1] = "[x]"
        self.task_name[2] = "[--- s]"
        self.finished = True
    def update(self):
        if not self.finished:
            self.task_name[2] = '[' + str(round(time.time() - self.start_time)) + ' s]'


class ToDoList:
    def __init__(self, name):
        self.name = name
        self.list = []
    def add_task(self, task):
        self.list.append(task)
    def print_list(self):
        print(self.name)
        print("##########")
        for i in self.list:
            i.update()
            print(i.task_name[1], i.task_name[0], i.task_name[2])

mylist = ToDoList('My sample ToDoList with time')
tasks = []
for i in range(1, 11):
    task = Task(f'Simple timed task #{i}')
    tasks.append(task)

time.sleep(2)
for task in tasks:
    mylist.add_task(task)

for idx, task in enumerate(tasks):
    if idx % 2 == 0:
        time.sleep(1)
        task.finish()

mylist.print_list()

NOTE:
all tasks will show 9 secs because the are created simultaniously.


推荐阅读