练习:数字时钟(Python 自定义类)


Python 官网https://www.python.org/




  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……



练 习
数字时钟
(Python 自定义类)




        目录


  1、自定义类 LocaltimeShow(当前时间显示)
  2、实现时钟显示有两种方式
  3、本练习完整源码

回首页

  看到大佬的自定义类 Clock(电子时钟)——点击链接打开大佬博文,近文末有电子时钟完整源码——,才看到自己以前的练习代码《当前时间显示器(代码屏显)》《python中文日期时间显示》有多丑😄😄。
  赶紧滴,跟着大佬学一个。🤩🤩


自定义类 LocaltimeShow(当前时间显示):

class LocaltimeShow:
    ''' 显示当前时间 '''
    
    def __init__(self):
        '''
        初始化变量:
        self.hour 小时数
        self.minute 分钟数
        self.sec 秒数
        '''
        
        from time import localtime # 加载当前时间获取方法。
        t = localtime() # 获取当前时间数组。
        self.sec = t[5] # 取秒。
        self.minute, self.hour = t[4], t[3]%12 # 取分、时(小时数,24小时显示直接取,12小时显示模12)。


    def run(self):
        ''' 时钟走字 '''
        
        self.sec += 1
        if not self.sec%60: # 分钟数进位。
            self.sec = 0
            self.minute += 1
            if not self.minute%60: # 小时数进位。
                self.minute = 0
                self.hour += 1
                if not self.hour%12: # 12小时显示模12。
                    self.hour = 0
                

    def show(self):
        '''
         返回时钟显示格式化字符串。
         (用自定义工具模块 color(),
         返回绿色字符控制的格式化时间字符串。)
         '''
        return f" {self.hour:0>2}:{self.minute:0>2}:{self.sec:0>2} "

  此自定义 LacaltimeShow 类,有三个属性,self.hour(时)、self.minute(分)、self.sec(秒),两个方法 run(时钟走字)、show(当前时钟字符格式化字符串返回)。类属性时、分、秒从 time 模块的 localtime() 方法获取的当前时间数组中获取。


回首页


实现时钟显示有两种方式:

一、while 循环一秒一次获取当前时间数组并从中读取时、分、秒,实现当前时钟显示。


if __name__ == '__main__':
    from time import sleep # 加载时间模块 sleep() 方法。
    
    while True: # 一直循环。
        t = LocaltimeShow() # 自定义类实例。
        print(color(t.show(),'f_green').center(59, '-'), end='\r') # end='\r',回车不换行,时钟字符始终在同一位置刷新。
        sleep(1) # 一秒刷新显示一次。
代码运行效果

在这里插入图片描述

二、获取当前时间数组并从中读取时、分、秒,while 循环一秒一次调用自定义类 run(时钟走字) 方法走字,实现当前时钟显示。


if __name__ == '__main__':
    from time import sleep # 加载时间模块 sleep() 方法。
    t = LocaltimeShow() # 自定义类实例。

    while True: # 一直循环。
        print(color(t.show(),'f_green').center(59, '-'), end='\r') # end='\r',回车不换行,时钟字符始终在同一位置刷新。
        sleep(1) # 暂停1秒。
        t.run() # 调用时钟走字方法走字。
    
代码运行效果

在这里插入图片描述

  值得注意的是:经过试炼,发现用自定义类的run方法实现时钟显示代码运行所消耗的时间累积会造成时间误差,运行代码时间越长误差越大。“每次打印都从当前时间数组取值”的实现方式相对较好,每秒都在修正时钟显示误差(每次打印)。
  冒个泡:我看过大佬的“电子时钟”代码,就热炒热卖“背”下来了,在“时钟走字”方法中的是sleep(1)后再走一秒。比对大佬代码,他是在调用run()方法是才 sleep(1)的,为了和大佬保持“高度一致”,我调整的我的代码。(无所谓谁优谁劣,只是喜好和习惯而已,实现效果“完全一致”。我喜好和习惯的逻辑与大佬稍有差迟而已,不必介怀。)


回首页

本练习完整源码
(完整代码为最后完成调试后的最终代码,前面贴出的代码是调试出功能就上传的,可能后来已作优化。完整代码中的对应部分,可能比前面贴出的“ 高级 ”哦。这是个人记笔记定CSDN博文的习惯所致,敬请谅解。) 我的解题思路,已融入代码注释 ,博文中就不再赘述。(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
#!/sur/bin/nve python
# -*-  coding:utf8  -*-
#qpy:console
from mypythontools import TimeSpan, \
wait, color, cut_line
print (f"\n\n{color(' 试炼数据正在制造…… ','f_green').center(49, '-')}")


class LocaltimeShow:
    ''' 显示当前时间 '''
    
    def __init__(self):
        '''
        初始化变量:
        self.hour 小时数
        self.minute 分钟数
        self.sec 秒数
        '''
        
        from time import localtime # 加载当前时间获取方法。
        t = localtime() # 获取当前时间数组。
        self.sec = t[5] # 取秒。
        self.minute, self.hour = t[4], t[3]%12 # 取分、时(小时数,24小时显示直接取,12小时显示模12)。


    def run(self):
        ''' 时钟走字 '''
        
        self.sec += 1
        if not self.sec%60: # 分钟数进位。
            self.sec = 0
            self.minute += 1
            if not self.minute%60: # 小时数进位。
                self.minute = 0
                self.hour += 1
                if not self.hour%12: # 12小时显示模12。
                    self.hour = 0
                

    def show(self):
        '''
         返回时钟显示格式化字符串。
         (用自定义工具模块 color(),
         返回绿色字符控制的格式化时间字符串。)
         '''
        return f" {self.hour:0>2}:{self.minute:0>2}:{self.sec:0>2} "


if __name__ == '__main__':
    from time import sleep
    
    # 实现方式一
    while True:
        t = LocaltimeShow() # 自定义类实例。
        print(color(t.show(),'f_green').center(59, '-'), end='\r') # end='\r',回车不换行,时钟字符始终在同一位置刷新。
        sleep(1) # 一秒刷新显示一次。

    # 实现方式二
    t = LocaltimeShow() # 自定义类实例。
    while True:
        print(color(t.show(),'f_green').center(59, '-'), end='\r') # end='\r',回车不换行,时钟字符始终在同一位置刷新。
        sleep(1) # 暂停1秒。
        t.run() # 调用时钟走字方法走字。



大佬博文(点击下面链接打开大佬博文,近文末有电子时钟完整源码)


我以前的丑代码博文笔记:


回目录


My Up and Down
__上一篇:__ 练习:小炼二维数组

__下一篇:__ 单词记忆系统一:菜单循环和菜单确认(Python 自定义类、自定义模块的相对路径import)

我的HOT博:
推荐条件 点阅破千

回目录


老齐漫画头像

精品文章:

来源:老齐教室


回目录

Python 入门指南【Python 3.6.3】

好文力荐:

CSDN实用技巧博文:


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值