python:简单定制

基本要求:
– 定制一个计时器的类
– start和stop方法代表启动计时和停止计时
– 假设计时器对象t1,print(t1)和直接调用t1均显示结果
– 当计时器未启动或已经停止计时,调用stop方法会给予温馨的提示
– 两个计时器对象可以进行相加:t1 + t2
– 只能使用提供的有限资源完成

你需要使用这些资源:

  • 使用time模块的localtime方法获取时间
    – 扩展阅读:time模块详解
    https://fishc.com.cn/forum.php?mod=viewthread&tid=51326&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
  • time.localtime返回struct_time的时间格式
  • 表现你的类:
    str 和 repr (双下划线省略)

str魔法方法的使用:

#__str__使用:被打印的时候需要以字符串的形式输出的时候,
就会找到这个方法,并将返回值打印出来

>>> class A():
	def __str__(self):
		return "小甲鱼是帅哥"
	
>>> a=A()
>>> a
<__main__.A object at 0x00000233F611AC88>
>>> print(a)
小甲鱼是帅哥

repr魔法方法的使用:

#返回一个对象的可打印字符串
>>> class B():
	def __repr__(self):
		return "小甲鱼是帅哥"

>>> b=B()
>>> b
小甲鱼是帅哥
>>> 

计时器的类:

import time as t

class MyTimer():
    def start(self):
        self.start = t.localtime()
        print("计时开始...")


    def stop(self):
        self.stop = t.localtime()
        self._calc()
        print("计时结束...")


    def _calc(self):
        self.lasted = []
        self.prompt="总共运行了"
        for index in range(6):
            self.lasted.append(self.stop[index] - self.start[index])
            self.prompt += str(self.lasted[index])

        print(self.prompt)

运行结果:

>>> t1 = MyTimer()
>>> t1.start()
计时开始...
>>> t1.stop()
总共运行了000006
计时结束...

改良版:

import time as t
class MyTimer():
    
    def __init__(self):
        self.unit = ['年','月','天','小时','分钟','秒']
        self.prompt = '未开始计时!'
        self.lasted = []
        self.begin = 0
        self.end = 0

    def __repr__(self):
        return self.prompt

    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()开始计时"   ######
        print("计时开始...")

    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):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[index]:
                self.prompt += (str(self.lasted[index]) + self.unit[index])
                
        self.begin = 0   #######
        self.end = 0

上面小甲鱼的方案还有可以改进的地方:

如果开始计时的时间是(2022年2月22日16:30:30),停止时间是(2025年1月23日15:30:30),那按照小甲鱼方法的计算方式会得到结果(3年-1月1天-1小时),对此我们应该做一些转换。
现在计算机的运行速度都非常快,而这里程序的最小计算单位是秒,精度上远远不足。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值