Python44 课后题的第0题的代码修改
本帖最后由 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 = #用于调整负数值的显示。
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+other.lasted)
if result:#result不为0时才输出,可省略例如0天0小时等无用字符。
prompt +=(str(result)+self.unit)
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-self.begin
print('Temp值:{}'.format(temp))#调试用
if temp <0: #低位不够减,向高位借
self.lasted.append(self.borrow + temp)##当前位加借位值
print('last1进来了:{}'.format(self.lasted))
self.lasted -=1 ##高位减一
print('last2进来了:{}'.format(self.lasted))
################################################################################################################
i=1
while self.lasted<0: ##self.lasted当前高一位的值,假设小于1,则没得'借',再向高一位借。
self.lasted += self.borrow#self.borrow为高位借值列表。
#自己先向高位借对应的数再借给低一位。
self.lasted -=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-self.begin) ##计算相减结果,放入列表。引入借数后取消这一行
if self.lasted:##self.lasted不为0时,才执行下面语句进行赋值
self.prompt +=(str(self.lasted)+self.unit) #把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
我也发现了... 我草,天才程序员,这么好的帖子居然没人顶 最后的__add__的加法模块跟着楼主的程序学习,改了好半天才改好,唉,基础还是不太扎实啊! 楼主这个calc函数设计得太好了一看就懂了谢谢 我也发现了,艹!!!!,浪费了我很长时间!!还以为自己理解错了!!就是它自己有问题!!!!!!!! 楼主代码修改得好!
页:
[1]