payton24 发表于 2017-12-7 16:25:21

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

wow7jiao 发表于 2018-1-7 15:41:19

我也发现了...

wow7jiao 发表于 2018-1-11 12:16:47

我草,天才程序员,这么好的帖子居然没人顶

无名老张4646 发表于 2018-9-11 17:33:05

最后的__add__的加法模块跟着楼主的程序学习,改了好半天才改好,唉,基础还是不太扎实啊!

joelau 发表于 2020-4-7 23:31:05

楼主这个calc函数设计得太好了一看就懂了谢谢

jswangbing 发表于 2021-3-8 22:44:40

我也发现了,艹!!!!,浪费了我很长时间!!还以为自己理解错了!!就是它自己有问题!!!!!!!!

zhuchuanhan 发表于 2022-3-29 17:49:46

楼主代码修改得好!
页: [1]
查看完整版本: Python44 课后题的第0题的代码修改