按照视频内的内容,已经写出了一个计时器,但是小甲鱼要求的内容是,不能让时间出现负值,所以需要修改计时器
自己写的和小甲鱼写的完全不一样.....小甲鱼那个应该是先计算,再最后赋值并打印
自己这个是先不管他有没有负值,把值先写出来,再进行借位计算,如下。
import time as t
class mytimer():
def __str__(self):
return self.prompt #重写__str__魔法方法,可以让程序在调用print函数时候,打印当时状态的prompt内容
__repr__=__str__ #将__repr__和__str__相同化,这样在解释器里面直接敲实例的话,就可以调用语句了
def __add__(self,other):
sum=[]
self.prompt='总共运行了: '
for key in range(6):
sum.append(self.lasted[key]+other.lasted[key])
if sum[key]:
self.prompt+= str(sum[key])+self.unit[key]
return self.prompt
def __init__(self):
self.unit=['年','月','日','小时','分钟','秒']
self.borrow=[0,12,31,24,60,60] #这一行及其重要,因为本来我是把借位计算分成5个if写的,后来看到小甲鱼这样添加了列表,发现可以用for来迭代写
self.begin=0
self.end=0
self.prompt='还未开始计时' #初始状态,如果在刚刚实例化还未开始的时候直接在解释器输入实例,那会提示你还未开始计时
def start(self):
self.begin=t.localtime() #计时开始
self.prompt='请先调用stop()结束计时' #如果在当前状态,使用解释器输入实例,他会提示你先结束
print ('开始计时')
def stop(self):
if not self.begin: #如果已经开始计时,意思里就是self.begin里面是有内容的话
print ('请先调用start()开始计时')
else:
self.end=t.localtime() #计时结束
self._cal() #调用内部函数_cal
print ('计时结束')
def _cal(self):
self.lasted=[] #制作一个空列表,以存放每个单位上面相减的值
self.prompt='总共运行了'
for i in range(6):
self.lasted.append(self.end[i]-self.begin[i]) #先向空列表生成数据,不管正负值
print (self.lasted) #这一句只是我后期用于检验用的,可以删除
for n in range(6): #第二次迭代,这里就是开始检验是否有数值为负了
if self.lasted[5-n]<0: #我们从最小单位描述开始检查,如果小于0
self.lasted[5-n-1]=self.lasted[5-n-1]-1 #则前一位数字减1
self.lasted[5-n]=self.borrow[5-n]+self.lasted[5-n] #同时,这个单位的周期数字去加上目前这一位的数字
else:
pass
if self.lasted[n]: #如果计算后还是有内容的:则加入prompt的语句
self.prompt+=str(self.lasted[n])+self.unit[n]
print (self.prompt)
self.begin=0 #重置计数器
self.end=0 #重置计数器