第044讲: 魔法方法:简单定制 | 学习记录(小甲鱼零基础入门学习Python)

(标答出处: 鱼C论坛)
《零基础入门学习Python》

动动手:
在这里插入图片描述

#记载时间模块
import time as t 

class Mytimer :
    def __init__ (self) :
        self.unit = ['年','月','天','时','分','秒']
        self.prompt = '未开始计时'
        self.lasted = []
        self.begin = 0
        self.end = 0 

    #输入对象直接输出
    def __str__ (self) :
        return self.prompt

    def __repr__ (self) :
        return self.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._cacul()
            print ('计时结束!')
    
    #内部计算运行时间
    def _cacul(self) :
        self.prompt = '总共运行了'
        self.lasted = []
        for index in range (6) :
            self.lasted.append(self.end[index] - self.begin[index])
        self._judge1()
        for index in range (6) :
            if self.lasted[index] :
                    self.prompt += (str(self.lasted[index]) + str(self.unit[index]))
        #为下一轮计数初始化变量
        self.begin = 0
        self.end = 0

    #计算两个时间累计和
    def __add__ (self,other) :
        self.prompt = '两次总共运行了'
        self.result = []
        for index in range (6) :
            self.result.append(self.lasted[index] + other.lasted[index])
        self._judge2()
        for index in range (6) :
            if self.result [index] :
                    self.prompt += str( self.result[index] ) + self.unit[index] 
        return self.prompt

    #判断两个数据是否出现负数
    def _judge1(self) :
        for index in range (6) :
            if self.lasted[ index ] < 0 :
                #当负数出现时,前一位-1
                self.lasted [ index-1 ] -= 1
                #当负数出现在分秒时,+60
                if index == 5 or index == 4:
                    """self.lasted [ index -1 ] -= 1"""
                    self.lasted [ index ] += 60
                #当负数出现在时时,+24
                elif index == 3 :
                    """self.lasted [ index-1 ] -= 1"""
                    self.lasted [ index ] += 24
                #当负数出现在天时,+31
                elif index == 2 :
                    """self.lasted [ index-1 ] -= 1"""
                    self.lasted [ index ] +=31
                #当负数出现在月时,+12
                elif index == 1 :
                    """self.lasted [ index-1 ] -= 1"""
                    self.lasted [ index ] += 12

    #判断两个数据是或否可以进位
    def  _judge2 (self) :
        for index in range (5 , -1 , -1) :
            if index == 5 or index == 4 :
                if self.result [ index ] >= 60 :
                    self.result [ index - 1 ] += 1
                    self.result [ index ] -= 60
            elif index == 3 :
                if self.result [ index ] >= 24 :
                    self.result [ index - 1 ] += 1
                    self.result [ index ] -= 24
            elif index == 2 :
                if self.result [ index ] >= 31 :
                    self.result [ index - 1 ] += 1
                    self.result [ index ] -= 31
            elif index == 1 :
                if self.result [ index ] >= 12 :
                    self.result [ index - 1 ] += 1
                    self.result [ index ] -= 12
            else :
                pass 

t1 = Mytimer()
print (t1)
t1.stop()
t1.start()
t.sleep(35)
t1.stop() 
print (t1)
t2 = Mytimer()
print (t2)
t2.stop()
t2.start()
t.sleep(40)
t2.stop()
print (t2)
print (t1+t2)

运行结果:
在这里插入图片描述
小甲鱼答案:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#记载时间模块
import time as t 

class Mytimer :
    def __init__ (self) :
        self.unit = ['年','月','天','时','分','秒']
        self.prompt = '未开始计时'
        self.lasted = 0.0
        self.begin = 0
        self.end = 0 
        self.default_timer = t.perf_counter

    #输入对象直接输出
    def __str__ (self) :
        return self.prompt

    def __repr__ (self) :
        return self.prompt

    #计算两个时间累计和
    def __add__ (self,other) :
        self.result = self.lasted + other. lasted
        self.prompt = '总共运行了 %0.2f 秒' %self.result
        return self.prompt

    #开始计时模块
    def start (self) :
        self.begin = self.default_timer()
        self.prompt = '请先调用stop()停止计时!'
        print ('计时开始...')

    #停止计时模块
    def stop (self) :
        if not self.begin :
            print ('请先调用start()开始计时!')
        else :
            self.end = self.default_timer()
            self._cacul()
            print ('计时结束!')
    
    #内部计算运行时间
    def _cacul(self) :
        self.lasted = self.end - self.begin
        self.prompt = '总共运行了 %0.2f 秒' %self.lasted
        #为下一轮计数初始化变量
        self.begin = 0
        self.end = 0

    #设置定时器( timer,pref_counter() 或 time.process_time() )
    def set_timer (self ,timer ) :
        if timer == 'process_time' :
            self.default_timer = t.process_time
        elif timer == 'pref_counter' :
            self.default_timer = t.perf_counter
        else :
            print('输入无效请重新输入!')

t1 = Mytimer()
print (t1)
t1.stop()
t1.start()
t.sleep(54.56)
t1.stop() 
print (t1)
t2 = Mytimer()
print (t2)
t2.stop()
t2.start()
t.sleep(65.7)
t2.stop()
print (t2)
print (t1+t2)

运行结果:
在这里插入图片描述
在这里插入图片描述

#记载时间模块
import time as t 

class Mytimer :
    def __init__ (self , func , count = 1000000 ) :
        self.prompt = '未开始计时!'
        self.lasted = 0.0
        self.func = func
        self.count = count
        self.default_timer = t.perf_counter

    #输入对象直接输出
    def __str__ (self) :
        return self.prompt

    __repr__ = __str__

    #计算两个时间累计和
    def __add__ (self,other) :
        self.result = self.lasted + other. lasted
        self.prompt = '总共运行了 %0.2f 秒' %self.result
        return self.prompt

    #启动计时器
    def timing (self) :
        self.begin = self.default_timer()
        for i in range (self.count) :
            self.func()
        self.end = self.default_timer()
        self._cacul()

    #内部计算运行时间
    def _cacul(self) :
        self.lasted = self.end - self.begin
        self.prompt = '总共运行了 %0.2f 秒' %self.lasted
        #为下一轮计数初始化变量
        self.begin = 0
        self.end = 0

    #设置定时器( timer,pref_counter() 或 time.process_time() )
    def set_timer (self ,timer ) :
        if timer == 'process_time' :
            self.default_timer = t.process_time
        elif timer == 'pref_counter' :
            self.default_timer = t.perf_counter
        else :
            print('输入无效请重新输入!')

def test () :
    text = "I love Fishc.com!"
    char = 'o'
    if char in text :
        pass 


t1 = Mytimer(test)
t1.timing()
print (t1)
t2 = Mytimer(test,100000000)
t2.timing()
print (t2)
print (t1+t2)

运行结果:
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值