基本要求:
– 定制一个计时器的类
– start和stop方法代表启动计时和停止计时
– 假设计时器对象t1,print(t1)和直接调用t1均显示结果
– 当计时器未启动或已经停止计时,调用stop方法会给予温馨的提示
– 两个计时器对象可以进行相加:t1 + t2
– 只能使用提供的有限资源完成
你需要使用这些资源:
- 使用time模块的localtime方法获取时间
– 扩展阅读:time模块详解
https://fishc.com.cn/forum.php?mod=viewthread&tid=51326&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403 - time.localtime返回struct_time的时间格式
- 表现你的类:
str 和 repr (双下划线省略)
str魔法方法的使用:
#__str__使用:被打印的时候需要以字符串的形式输出的时候,
就会找到这个方法,并将返回值打印出来
>>> class A():
def __str__(self):
return "小甲鱼是帅哥"
>>> a=A()
>>> a
<__main__.A object at 0x00000233F611AC88>
>>> print(a)
小甲鱼是帅哥
repr魔法方法的使用:
#返回一个对象的可打印字符串
>>> class B():
def __repr__(self):
return "小甲鱼是帅哥"
>>> b=B()
>>> b
小甲鱼是帅哥
>>>
计时器的类:
import time as t
class MyTimer():
def start(self):
self.start = t.localtime()
print("计时开始...")
def stop(self):
self.stop = t.localtime()
self._calc()
print("计时结束...")
def _calc(self):
self.lasted = []
self.prompt="总共运行了"
for index in range(6):
self.lasted.append(self.stop[index] - self.start[index])
self.prompt += str(self.lasted[index])
print(self.prompt)
运行结果:
>>> t1 = MyTimer()
>>> t1.start()
计时开始...
>>> t1.stop()
总共运行了000006
计时结束...
改良版:
import time as t
class MyTimer():
def __init__(self):
self.unit = ['年','月','天','小时','分钟','秒']
self.prompt = '未开始计时!'
self.lasted = []
self.begin = 0
self.end = 0
def __repr__(self):
return self.prompt
def __add__(self,other):
prompt="总共运行了"
result = []
for index in range(6):
result.append(self.lasted[index] + other.lasted[index])
if result[index]:
prompt += (str(result[index]) + self.unit[index])
return prompt ######
def start(self):
self.begin = t.localtime()
self.prompt = "提示:请先调用stop()开始计时" ######
print("计时开始...")
def stop(self):
if not self.begin:
print("提示:请先调用start()停止计时")
else:
self.end = t.localtime()
self._calc()
print("计时结束...")
def _calc(self):
self.lasted = []
self.prompt="总共运行了"
for index in range(6):
self.lasted.append(self.end[index] - self.begin[index])
if self.lasted[index]:
self.prompt += (str(self.lasted[index]) + self.unit[index])
self.begin = 0 #######
self.end = 0
上面小甲鱼的方案还有可以改进的地方:
如果开始计时的时间是(2022年2月22日16:30:30),停止时间是(2025年1月23日15:30:30),那按照小甲鱼方法的计算方式会得到结果(3年-1月1天-1小时),对此我们应该做一些转换。
现在计算机的运行速度都非常快,而这里程序的最小计算单位是秒,精度上远远不足。