鱼C论坛

 找回密码
 立即注册
查看: 2370|回复: 2

[已解决]计时器题目

[复制链接]
发表于 2021-5-21 16:30:38 | 显示全部楼层 |阅读模式
5鱼币
import time as t

class MyTimer:
    def __init__(self):
        self.begin = 0
        self.end = 0
        self.list = []
        self.unit = ["年","月","日","时","分","秒"]
        
    def start(self):
        self.begin = t.localtime()
        return type(self.begin)

    def stop(self):
        self._calc()
        self.end = t.localtime()

##    def _calc(self):
##        
##        for i in range(6):
##            self.list.append(self.end[i]-self.begin[i])
##        for j in range(0,6):
##            print(str(self.list[j])+unit[j])
    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
        
            
m = MyTimer()

line 28, in _calc
    self.lasted.append(self.end[index] - self.begin[index])
TypeError: 'int' object is not subscriptable

为什么这里报成int呀,小甲鱼代码里calc也是这么写的呀,求助大佬们.这个就是计时器那个题目
最佳答案
2021-5-21 16:30:39
本帖最后由 阿奇_o 于 2021-5-21 17:47 编辑

首先因为,你初始化时self.begin=0, self.end=0,  0就是int整型!整型肯定不能用[] 。

其次,用 localtime 是不是太那个了。。
假设self.begin 刚好是 ..59秒,两秒后 stop() 那 self.end的秒数,就是 01秒,
这个时候,秒数相减,即 self.end[5] - self.begin[5] 你如何得到正确的秒数差?考虑进制的情况?分时天月年 都考虑?……

所以,我个人是不建议用 time.localtime() 来做计时的,我选择用time.time(),不仅精确、易懂,对秒分时的进制处理也更方便。

  1. from time import time, sleep, localtime

  2. # 用time.time()精确计时
  3. class MyTimer():
  4.     def start(self):
  5.         self.begin = time()
  6.         print("计时器已启动,正在计时……")

  7.     def stop(self):
  8.         self.end = time()
  9.         print("计时器已停止。")
  10.         lasted = self._cal()
  11.         return lasted

  12.     def _cal(self):
  13.         seconds = self.end - self.begin # 精确运行秒数(浮点数)
  14.         mins, sec = divmod(seconds, 60) # 满60秒,即进1分钟
  15.         hours, min = divmod(mins, 60)  # 满60分钟,即进1小时(最大以小时来衡量)

  16.         return f"计时共计:{int(hours)}小时 {int(min)}分钟 {sec}秒"


  17. mt = MyTimer()
  18. mt.start()
  19. sleep(2)
  20. print(mt.stop())
复制代码

最佳答案

查看完整内容

首先因为,你初始化时self.begin=0, self.end=0, 0就是int整型!整型肯定不能用[] 。 其次,用 localtime 是不是太那个了。。 假设self.begin 刚好是 ..59秒,两秒后 stop() 那 self.end的秒数,就是 01秒, 这个时候,秒数相减,即 self.end[5] - self.begin[5] 你如何得到正确的秒数差?考虑进制的情况?分时天月年 都考虑?…… 所以,我个人是不建议用 time.localtime() 来做计时的,我选择用time.time(),不仅精确、 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-21 16:30:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿奇_o 于 2021-5-21 17:47 编辑

首先因为,你初始化时self.begin=0, self.end=0,  0就是int整型!整型肯定不能用[] 。

其次,用 localtime 是不是太那个了。。
假设self.begin 刚好是 ..59秒,两秒后 stop() 那 self.end的秒数,就是 01秒,
这个时候,秒数相减,即 self.end[5] - self.begin[5] 你如何得到正确的秒数差?考虑进制的情况?分时天月年 都考虑?……

所以,我个人是不建议用 time.localtime() 来做计时的,我选择用time.time(),不仅精确、易懂,对秒分时的进制处理也更方便。

  1. from time import time, sleep, localtime

  2. # 用time.time()精确计时
  3. class MyTimer():
  4.     def start(self):
  5.         self.begin = time()
  6.         print("计时器已启动,正在计时……")

  7.     def stop(self):
  8.         self.end = time()
  9.         print("计时器已停止。")
  10.         lasted = self._cal()
  11.         return lasted

  12.     def _cal(self):
  13.         seconds = self.end - self.begin # 精确运行秒数(浮点数)
  14.         mins, sec = divmod(seconds, 60) # 满60秒,即进1分钟
  15.         hours, min = divmod(mins, 60)  # 满60分钟,即进1小时(最大以小时来衡量)

  16.         return f"计时共计:{int(hours)}小时 {int(min)}分钟 {sec}秒"


  17. mt = MyTimer()
  18. mt.start()
  19. sleep(2)
  20. print(mt.stop())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-21 16:35:50 From FishC Mobile | 显示全部楼层
begin和end不都是整型数值,你给他安个中括号是为哪端

评分

参与人数 1鱼币 +3 收起 理由
星回8 + 3 谢谢呀

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 07:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表