作业要求: 给规定的时钟分钟秒钟读数,程序就从给定的读数开始走表
上面就是程序最终需要的效果图
解题
先说一下走表过程需要思考如下过程:
1.走表秒针先走
2.秒针到60分针加1,且秒针需要重置为0
3.同样分钟走到60,时针需要加1,分钟需要重置为0
4.最后是时针,时针到24时时,也需要重置为0
考虑到如上的情况,在巩固一下面向对象的思想和基础我们就可以动手解题了。
我直接贴上代码吧
import time class Clock_Time(object): # 构造方法 def __init__(self, hour, min, second): self.hour = hour self.min = min self.second = second # 定义类方法 def go_time(self): # 时间是秒先走 秒走到60分钟+1,分钟走到60 时钟+1 # 因此先让秒自加1 self.second += 1 # 当秒为60时 if self.second == 60: # 分钟自加1 self.min += 1 # 把秒钟重置为0 self.second = 0 # 当分钟为60时 if self.min == 60: # 时钟自加1 self.hour += 1 # 把分钟重置为0 self.min = 0 # 当时钟为24时 if self.hour == 24: # 把时钟重置为0时 self.hour = 0 def display_time(self): print('{}:{}:{}'.format(self.hour, self.min, self.second)) if __name__ == "__main__": # 实例化对象 clock = Clock_Time(23,59,58) while True: clock.display_time() time.sleep(1) clock.go_time()
输出结果如下:
这里我们遇到一个问题 当时钟上的三个数小于10时,只会有一位数,我懂各位强迫症的想法
因此我们这里引入 str.zfill()方法(点击可直接到菜鸟教程)
先讲一下str.zfill()的用法
Python zfill()方法
Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
zfill()方法语法:str.zfill(width) width -- 指定字符串的长度。原字符串右对齐,前面填充0。
实例:
用实例看一下就明白了
str_num = '1' str_num1 = '11' # 总共2位,差1位,在左边用0补齐 print(str_num.zfill(2)) # 总共4位,差3位,在左边用0补齐 print(str_num.zfill(4)) # 总共10位,差8位,在左边用0补齐 print(str_num1.zfill(10))
输出结果:
接下来我们对最初的解题在 show_time方法引入str.zifill()就可以了
直接看代码
import time class Clock_Time(object): # 构造方法 def __init__(self, hour, min, second): self.hour = hour self.min = min self.second = second # 定义类方法 def go_time(self): # 时间是秒先走 秒走到60分钟+1,分钟走到60 时钟+1 # 因此先让秒自加1 self.second += 1 # 当秒为60时 if self.second == 60: # 分钟自加1 self.min += 1 # 把秒钟重置为0 self.second = 0 # 当分钟为60时 if self.min == 60: # 时钟自加1 self.hour += 1 # 把分钟重置为0 self.min = 0 # 当时钟为24时 if self.hour == 24: # 把时钟重置为0时 self.hour = 0 def display_time(self): # 引入str.zfill()方法 hour_str = str(self.hour) min_str = str(self.min) second_str = str(self.second) print('{}:{}:{}'.format(hour_str.zfill(2), min_str.zfill(2), second_str.zfill(2))) # print('{}:{}:{}'.format(self.hour, self.min, self.second)) if __name__ == "__main__": # 实例化对象 clock = Clock_Time(23,59,58) while True: clock.display_time() time.sleep(1) clock.go_time()
看结果: