鱼C论坛

 找回密码
 立即注册
查看: 2987|回复: 11

第44课中,为什么最后要初始化为0

[复制链接]
发表于 2016-2-21 13:29:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import time as t

class C:
    def __init__(self):
        self.unit = ['年','月','日','时','分','秒']
        self.prompt = '未开始计时,请先调用start()开始计时'
        self.begin = 0
        self.end = 0
        self.lasted = []

    def __add__(self,other):
        prompt = '总共运行了'
        result = []
        for index in range(6):
            result.append(self.lasted[index] + other.lasted[index])
            if result[index]:
                prompt += str(result[index]) + self.unit[index]
        return prompt   

    def __str__(self):
        return self.prompt
    __repr__ = __str__
   
    def start(self):
        print('计时开始')
        self.prompt = '请先调用stop(),停止计时'
        self.begin = t.localtime()

    def stop(self):
        if not self.begin:
            print('请先调用start(),开始计时')
        else:
            self.end = t.localtime()
            self.calc()
            print('计时结束')

   def calc(self):
        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

这是小甲鱼在44讲中的代码,但是我疑惑,为什么需要最后的为下一轮计时初始化变量。
我发现不初始化变量好像也不影响结果呀!?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-2-21 13:33:16 | 显示全部楼层
>>> a = C()
>>> a
未开始计时,请先调用start()开始计时
>>> a.start()
计时开始
>>> a.stop()
计时结束
>>> a
总共持续了5秒
>>> b = C()
>>> b.stop()
请先调用start(),开始计时
>>> b.start()
计时开始
>>> b.stop()
计时结束
>>> b
总共持续了5秒
>>> b + a
'总共运行了10秒'


#这是我未初始化变量的运行,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-21 13:47:25 | 显示全部楼层
吕浩 发表于 2016-2-21 13:33
>>> a = C()
>>> a
未开始计时,请先调用start()开始计时

初始化是对该类的实例而言的, 你两次计时实例化了两个对象, 当然看不出效果了, 试试同一个对象计时两次
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-21 14:08:41 | 显示全部楼层
hldh214 发表于 2016-2-21 13:47
初始化是对该类的实例而言的, 你两次计时实例化了两个对象, 当然看不出效果了, 试试同一个对象计时两次

>>> a = C()
>>> a.start()
计时开始
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=5, tm_sec=57, tm_wday=6, tm_yday=52, tm_isdst=0)
>>> a.stop()
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=6, tm_sec=1, tm_wday=6, tm_yday=52, tm_isdst=0)
计时结束
>>> a
总共持续了1分-56秒
>>> a.start()
计时开始
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=6, tm_sec=8, tm_wday=6, tm_yday=52, tm_isdst=0)
>>> a.stop()
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=6, tm_sec=13, tm_wday=6, tm_yday=52, tm_isdst=0)
计时结束
>>> a
总共持续了1分-56秒
>>> ------以下是未初始化变量---------------------------------------------------------------------------------
>>> b = C()
>>> b.start()
计时开始
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=7, tm_sec=38, tm_wday=6, tm_yday=52, tm_isdst=0)
>>> b.stop()
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=7, tm_sec=43, tm_wday=6, tm_yday=52, tm_isdst=0)
计时结束
>>> b
总共持续了5秒
>>> b.start()
计时开始
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=7, tm_sec=50, tm_wday=6, tm_yday=52, tm_isdst=0)
>>> b.stop()
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=21, tm_hour=14, tm_min=7, tm_sec=58, tm_wday=6, tm_yday=52, tm_isdst=0)
计时结束
>>> b
总共持续了5秒


结果是一样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-21 14:11:09 | 显示全部楼层
吕浩 发表于 2016-2-21 14:08
>>> a = C()
>>> a.start()
计时开始

而且两次的第二下计时,计算时间间隔都不是第二次的时间间隔,都是第一次计时时候的时间间隔
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-21 15:13:35 | 显示全部楼层
吕浩 发表于 2016-2-21 14:11
而且两次的第二下计时,计算时间间隔都不是第二次的时间间隔,都是第一次计时时候的时间间隔

如果你是copy的老师的代码, 就不会出现两次都是一样的结果, 我的结果是这样的
  1. >>> a.start()
  2. 计时开始...
  3. >>> a.stop()
  4. 计时结束!
  5. >>> a
  6. 总共运行了 3.25 秒
  7. >>> a.start()
  8. 计时开始...
  9. >>> a.stop()
  10. 计时结束!
  11. >>> a
  12. 总共运行了 5.51 秒
  13. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-21 16:04:11 | 显示全部楼层
不清0 第2次就可以直接调用stop不会提示“|请先调用start(),开始计时”
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-21 16:06:41 | 显示全部楼层
hldh214 发表于 2016-2-21 15:13
如果你是copy的老师的代码, 就不会出现两次都是一样的结果, 我的结果是这样的

我刚刚还复制了另外一位鱼油上传的代码,但是也没有你的达到你的效果,能否把你的代码上传下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-21 16:07:14 | 显示全部楼层
kunaiai 发表于 2016-2-21 16:04
不清0 第2次就可以直接调用stop不会提示“|请先调用start(),开始计时”

恩恩 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-21 16:24:22 | 显示全部楼层
吕浩 发表于 2016-2-21 16:06
我刚刚还复制了另外一位鱼油上传的代码,但是也没有你的达到你的效果,能否把你的代码上传下。

我知道了 我没有在calc函数下  写入 self.lasted = [ ]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-21 16:34:40 | 显示全部楼层
吕浩 发表于 2016-2-21 16:24
我知道了 我没有在calc函数下  写入 self.lasted = [ ]

解决了吗.....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-21 16:39:56 | 显示全部楼层

恩 是的 谢谢啦,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-19 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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