我有一项任务,我需要创建一个秒表,但仅限于IDLE。这是我到目前为止所做的,我不知道如何将时间转换为正常时间。
import time
start = 0
def stopwatch():
while True:
command = input("Type: start, stop, reset, or quit: \n")
if (command == "quit"):
break
elif (command == "start"):
start = time.time()
print(start)
stopwatch2()
elif (command == "stop"):
stopwatch()
elif (command == "reset'"):
stopwatch()
else :
break
def stopwatch2():
while True:
command = input("Type: stop, reset, or quit: \n")
if (command == "quit"):
break
elif (command == "stop"):
total = time.time() - start
print(total)
stopwatch()
elif (command == "reset'"):
stopwatch()
else:
break
stopwatch()
感谢您的帮助!
答案 0 :(得分:0)
您可以使用datetime.timedelta()
:
import datetime
print(datetime.timedelta(seconds=total))
例如:
In [10]: print datetime.timedelta(seconds=10000000)
115 days, 17:46:40
答案 1 :(得分:0)
把它想象成这样......空闲与我一直在做的交互式python解释器编码没什么不同(好吧,我使用ipython)。
将秒表视为物体。它有什么功能?像开始,停止,重置等事情。
这可能不是解决问题的最有效方法,但我会这样做。
>>> import time
>>> class StopwatchException:
pass
>>> class IsRunningException(StopwatchException):
pass
>>> class NotRunningException(StopwatchException):
pass
>>> class Stopwatch():
def __init__(self):
self._times = []
self._is_running = False
def start(self):
if self._is_running:
raise IsRunningException
self._is_running = True
tracker = {
'start': time.time(),
'stop': None,
}
self._times.append(tracker)
def stop(self):
if not self._is_running:
raise NotRunningException
tracker = self._times[-1]
# the dict is mutable, and tracker is a shallow copy
tracker['stop'] = time.time()
#print(self._times[-1])
self._is_running = False
def reset(self):
if self._is_running:
raise IsRunningException
self._times = []
def total(self):
if self._is_running:
raise IsRunningException
total = 0.0
for t in self._times:
total += t['stop'] - t['start']
return total
>>> s = Stopwatch()
>>> s.start()
>>> s.stop()
>>> s.total()
6.499619960784912
>>> s.reset()
>>> s.total()
0.0
对我来说,无论何时你想要建模一个真实世界的对象或者#34;事物都是最有意义的。对于程序的每个元素,只有一个简单的参数:
基本的秒表类实际上只需要实例变量。存储每个开始/停止时间的变量(允许它们稍后计算)和存储"状态的变量"秒表(开/关或跑/停)。
start
然后我们需要将其状态设置为运行并将时间存储在
self._times
中。 我选择使用局部变量,并将每个时间对存储为字典,并使用键“开始”#39;并且'停止'我选择了一本字典,因为它是可变的。您还可以有一个列表,其中索引0是开始时间,索引1是停止时间。你不能使用元组,因为元组是不可变的。 此外,"临时"变量不是必需的,但我将其用于可读性。
stop
然后我们将状态设置为“停止”' (使用我们的布尔值
self._is_running
)并存储我们的停止时间,类似于我们对start
所做的操作。我认为你是否在开头或结尾设置布尔值并不重要,尽管我选择将它设置在start函数的开头和stop函数的结尾,以便时间不包括时间需要更新一个布尔变量(即使它是一项微不足道的任务,在更复杂的程序中它可能要复杂得多)。
reset
self._times
设为空列表。total
self._times
中的每个列表项,并计算停止和开始之间的差异。