|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 chong0918 于 2020-8-24 18:58 编辑
第44课课后习题0设置计时器,下边是小甲鱼提供的代码,问题在 #低位不够,需向高位借位 那块代码那里
import time as t
class MyTimer():
def __init__(self):
self.begin=0
self.end=0
self.lasted=[]
self.prompt='未开始计时!'
self.unit=['年','月','天','小时',',分','秒']
self.borrow=[0,12,31,24,60,60] #为简单,默认一个月31天
def __str__(self):
return self.prompt
__repr__=__str__
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):
temp=self.end[index]-self.begin[index]
#低位不够,需向高位借位
if temp<0:
#测试高位是否有的借,没得借的话向再高位借
i=1
while self.lasted[index-i]<1:
self.lasted[index-i]+=self.borrow[index-i]-1 #####问题:这里index的高位(即index-1)不够,向再高位(index-2)借位,同时后边减一应该是因为低位(index)的借位,可是为什么在执行完while后,又减了一次1.
self.lasted[index-i-1]-=1
i+=1
self.lasted.append(self.borrow[index]+temp)
self.lasted[index-1]-=1 ######问题:这里为什么又减了一次1(我理解不执行while语句的话减了一次,执行的话感觉减多了一次)
else:
self.lasted.append(temp)
#由于高位随时会被借位,所以打印要放在最后
for index in range(6):
if self.lasted[index]:
self.prompt+=(str(self.lasted[index])+self.unit[index])
#为下一轮计时初始化变量
self.begin=0
self.end=0
我懂了,兄弟
出了while,分钟位确实多减了一个1,但是这一层for循环仅仅只储存了秒位(最后一位)而已
下一次循环中,index本身+1,最后一位为分钟位,由start-end重新计算,之前的毫无影响
(快给我最佳,快给我最佳  )
|
|