本帖最后由 屁哥 于 2018-7-13 11:21 编辑
题目: 如果开始计时的时间是(2022年2月22日16:30:30),停止时间是(2025年1月23日15:30:30),那按照我们用停止时间减开始时间的计算方式就会出现负数,你应该对此做一些转换。
答案代码:import time as t
class MyTimer:
def __init__(self):
self.unit = ['年', '月', '天', '小时', '分钟', '秒']
self.borrow = [0, 12, 31, 24, 60, 60]
self.prompt = '未开始计时!'
self.lasted = []
self.begin = 0
self.end = 0
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() 停止计时'
return '计时开始'
# 停止计时
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
self.lasted[index - i - 1] -= 1
i += 1
self.lasted.append(self.borrow[index] + temp)
self.lasted[index-1] -= 1
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
这里 循环部分 不太理解 求指教
def _calc(self):
self.lasted = []
self.prompt = '总共运行了'
for index in range(6):
temp = self.end[index] - self.begin[index] # 结束时间减去开始时间 赋值给 temp
# 位低不够减 需向高位借位
if temp < 0: # 如果结果小于0 就是出现了负数的时间,数学减法中的向前借位
# 测试高位是否有得'借',没得借的话向再高位借.....
i = 1 # 赋值1给变量 i
while self.lasted[index - i] < 1: # 用循环 判断lasted 列表中的结果是否小于1 如果小于1 执行下面借位代码
# 上面这句有点不懂 self.lasted 这个列表中有值么? 什么时候添加进列表的? 现在这个列表时空的吧..
self.lasted[index - i] += self.borrow[index - i] - 1
# 这句[index- i] 向上借位,比如天向月借位,月就加12-1(也不对啊,10月19日,减去9月20日,是前面的10月+(12-1)=21月)?
self.lasted[index - i - 1] -= 1 # 这里如果继续上面的逻辑下来,(21-2)月=19-10=9个月 ?
i += 1 # 这里循环一圈 i + 1 是怎么回事?
self.lasted.append(self.borrow[index] + temp) # 这就往列表里添加数值了,括号里有点懂又不懂...
self.lasted[index-1] -= 1 # 对应索引值 减一 再减一 ? 没读下来 彻底懵了
else:
self.lasted.append(temp) # 这个好理解了,如果结果不小于1 直接添加列表里面了.
## 等等 小于1 ? 如果结果是 0 呢? 0也正常啊,10月-10月 正好是0 (31日 -31日 = 0日) 上面循环为什么是小于1而不是小于0 ?
太笨了,注释代码 自己把自己整蒙了,求指点指点,我知道我不是这块料,但是我就是想学. 先谢谢了 |