|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 payton24 于 2017-12-7 16:31 编辑
做课后题44,也是折腾了一下,发现甲鱼老师的代码好像有点问题,修改了一下。
主要是_calc模块的时间处理逻辑有问题,附上测试代码。
正常运行时可以去掉print()以及begin、end的初始值,欢迎探讨,看看还有没有缺漏的地方。
- ##定制一个计时器的类
- ##start和stop代表启动计时和停止计时
- ##t1=MyTimer()
- ##t1.start()
- ##t1.stop()
- ##t1和t2是计时器对象,直接调用t1或print(t1)均可显示结果。
- ##当计时器未启动或者已经停止计时,调用stop方法给予温馨提示
- ## t1:未开始计时!
- #### t1.stop '提示:请先调用start()开始计时'
- ## t1.start() '计时开始'
- ## t1.stop () '计时结束'
- ## t1 '总共运行了5秒'
- ## t1+t2 总共运行了8秒
- ##两个计时器对象可以进行相加:例如t1=5,t2=3,则t1+t2=8
- ##只能使用有限资源完成。
- ##使用time的localtime方法获取时间
- ## time.localtime返回时间元组(struct_time)
- ##表现你的类 __str__ 和 __repr__
- 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
- ## self.startmark = 0
-
- def __str__(self):
- return self.prompt #使用魔法方法代替打印,调用print(t1)时显示self.prompt的内容。
- __repr__ = __str__ #将打印的内容赋值到__repr__,调用t1时显示结果。
- def __add__(self,other): ##显示t1+t2的结果。
- prompt = "总共运行了" #这是个局部变量,与self.prompt不同
- result = []
- for index in range(6):
- result.append(self.lasted[index]+other.lasted[index])
- if result[index]: #result不为0时才输出,可省略例如0天0小时等无用字符。
- prompt +=(str(result[index])+self.unit[index])
- return prompt
-
-
- ##开始计时
- def start(self):
- ## self.startmark =1
- ## self.begin = t.localtime()
- self.begin = (2017, 11, 22, 14, 0, 47) ##调试结果用
- self.prompt ='提示:请先调用stop()停止计时'
- #如果没有执行t1.stop()语句马上调用t1,则self.prompt的内容发生变化,并显示提示语句。
- print("计时开始...")
- ##停止计时
- def stop(self):
- ## if self.startmark == 0: #设置self.startmark进行提示
- if not self.begin:
- print('提示:请先调用start()开始计时')
- else:
- ## self.end = t.localtime()
- self.end = (2017, 11, 22, 15, 0, 41) ##调试结果用
- self._calc()
- print("计时结束!")
- ##内部方法,计算运行时间
- def _calc(self):
- self.lasted = [] ##存放最终计算结果。
- self.prompt = "总共运行了"
- for index in range(6):
- temp=self.end[index]-self.begin[index]
- print('Temp值:{}'.format(temp)) #调试用
- if temp <0: #低位不够减,向高位借
- self.lasted.append(self.borrow[index] + temp) ##当前位加借位值
- print('last1进来了:{}'.format(self.lasted))
- self.lasted[index-1] -=1 ##高位减一
- print('last2进来了:{}'.format(self.lasted))
- ################################################################################################################
- i=1
- while self.lasted[index-i]<0: ##self.lasted[index-i]当前高一位的值,假设小于1,则没得'借',再向高一位借。
- self.lasted[index-i] += self.borrow[index-i] #self.borrow[index-i]为高位借值列表。
- #自己先向高位借对应的数再借给低一位。
- self.lasted[index-i-1] -=1 ##高二位自动减1。
- i +=1 ##循环判断比自己高位的执行情况
- print('while我进来了!{}'.format(self.lasted)) ##调试用
- ################################################################################################################
- else:
- self.lasted.append(temp) ##存放结果
- ##由于高位随时会借位,等self.lasted存放完最终结果后再依次调用。
- for index in range(6):
- ## self.lasted.append(self.end[index]-self.begin[index]) ##计算相减结果,放入列表。引入借数后取消这一行
- if self.lasted[index]: ##self.lasted[index]不为0时,才执行下面语句进行赋值
- self.prompt +=(str(self.lasted[index])+self.unit[index]) #把self.lasted的值加入进来。
-
- ## print(self.prompt) #使用魔法方法代替打印
- ##为下一轮计时初始化变量
- self.begin = 0
- self.end = 0
-
- t1 = MyTimer()
- t2 = MyTimer()
- t1.start()
- t1.stop()
- ##t2.start()
- ##t2.stop()
- ##t1
- ##t2
- ##t1+t2
复制代码 |
|