追逐我的明天 发表于 2025-4-25 16:10:29

python44讲

import time as t
class MyTimer:
    def __str__(self):
      return self.prompt
    __repr__ = __str__
    #开始计时
    def start(self):
      self.begin = t.localtime()
      print('开始计时...')
    #停止计时
    def stop(self):
      self.end = t.localtime()
      self._calc()
      print('停止计时')
    #内部方法,计算运行时间
    def _calc(self):
      self.lasted = []
      self.prompt = '总共运行'
      for index in range(6):
            self.lasted.append(self.end - self.begin)
            self.prompt += str(self.lasted)
问题:不显示运行时间

FishC 发表于 2025-4-25 16:11:55

解答:代码问题与修正方案

你的代码存在三个主要问题:


[*]问题1:使用 t.localtime() 记录时间(返回结构化时间对象,无法直接相减)
[*]问题2:self.lasted = 未初始化且未正确计算时间差
[*]问题3:self.prompt 字符串拼接逻辑错误


修正后的完整代码


import time as t

class MyTimer:
    def __str__(self):
      return self.prompt
    __repr__ = __str__
   
    def start(self):
      self.begin = t.time()# 改用时间戳
      print('开始计时...')
   
    def stop(self):
      self.end = t.time()    # 改用时间戳
      self._calc()
      print('停止计时')
   
    def _calc(self):
      # 计算时间差(秒为单位)
      lasted_seconds = self.end - self.begin
      
      # 转换为时分秒格式
      hours = lasted_seconds // 3600
      minutes = (lasted_seconds % 3600) // 60
      seconds = lasted_seconds % 60
      
      # 生成易读提示
      self.prompt = f"总共运行了{int(hours)}小时{int(minutes)}分{seconds:.2f}秒"


改进说明


[*]改用 t.time() 记录时间戳,支持直接相减计算差值
[*]通过 divmod 计算时分秒,避免直接操作 struct_time 的复杂性
[*]使用 f-string 格式化输出结果,代码更简洁易读


(调用示例:timer = MyTimer() → timer.start() → 执行被测代码 → timer.stop() → print(timer))

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 2025-4-25 17:23:24

本帖最后由 player-none 于 2025-4-25 17:25 编辑

import time as t
class MyTimer:
    #上面两个方法没有必要
    #开始计时
    def start(self):
      self.begin = t.time()
      print('开始计时...')
    #停止计时
    def stop(self):
      self.end = t.time()
      self._calc()
      print('停止计时')
    #内部方法,计算运行时间
    def _calc(self):
      prompt = f'总共运行{self.end - self.start}秒'
      print(prompt)

追逐我的明天 发表于 2025-4-25 17:34:16

player-none 发表于 2025-4-25 17:23


我跟着视频打的代码,他是有问题吗,还是什么其他原因

player-none 发表于 2025-4-25 17:40:24

追逐我的明天 发表于 2025-4-25 17:34
我跟着视频打的代码,他是有问题吗,还是什么其他原因

估计是你应该在执行完所有命令之后加一行print(变量名),你忘加了(time.localtime用法我不太清楚)

我的代码能正确执行吗

追逐我的明天 发表于 2025-4-25 19:35:51

player-none 发表于 2025-4-25 17:40
估计是你应该在执行完所有命令之后加一行print(变量名),你忘加了(time.localtime用法我不太清楚)

...

"D:\python\044\微信图片_20250425193321.png"

player-none 发表于 2025-4-25 21:06:59

追逐我的明天 发表于 2025-4-25 19:35


图片一直在转,显示不出来

jackz007 发表于 2025-4-25 21:44:57

本帖最后由 jackz007 于 2025-4-25 22:39 编辑

      代码没有问题,只需要加上对象定义、方法调用、信息显示等代码即可看到效果
# 以下是楼主的代码

import time as t
class MyTimer:
    def __str__(self):
      return self.prompt
    __repr__ = __str__
    #开始计时
    def start(self):
      self.begin = t.localtime()
      print('开始计时...')
    #停止计时
    def stop(self):
      self.end = t.localtime()
      self._calc()
      print('停止计时')
    #内部方法,计算运行时间
    def _calc(self):
      self.lasted = []
      self.prompt = '总共运行'
      for index in range(6):
            self.lasted.append(self.end - self.begin)
            self.prompt += str(self.lasted)

# 以下是新添加的代码

r = MyTimer()
r . start()
t . sleep(10)
r . stop()
print(r . prompt)

      把上面的代码保存为文件 "mt.py"

      【运行实况】:

D:\\>python mt.py
开始计时...
停止计时
总共运行0000010

D:\\>
页: [1]
查看完整版本: python44讲