鱼C论坛

 找回密码
 立即注册
查看: 2685|回复: 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(),不仅精确、易懂,对秒分时的进制处理也更方便。
from time import time, sleep, localtime

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

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

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

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


mt = MyTimer()
mt.start()
sleep(2)
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(),不仅精确、易懂,对秒分时的进制处理也更方便。
from time import time, sleep, localtime

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

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

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

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


mt = MyTimer()
mt.start()
sleep(2)
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, 2025-1-15 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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