鱼C论坛

 找回密码
 立即注册
查看: 1969|回复: 8

python 44颗后第一题 请前辈看看有没有可能是写错了

[复制链接]
发表于 2017-12-27 22:55:52 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 wow7jiao 于 2017-12-29 11:59 编辑
import time as t

class MyTimer:
    def __init__(self):
        self.unit = ['年', '月', '天', '小时', '分钟', '秒']
        self.borrow = [0, 12, 31, 24, 60, 60]
        self.prompt = "未开始计时!"
        self.lasted = []
        self.begin = 0
        self.end = 0
    
    def __str__(self):
        return self.prompt

    __repr__ = __str__

    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 start(self):
        self.begin = t.localtime()
        self.prompt = "提示:请先调用 stop() 停止计时!"
        print("计时开始...")

    # 停止计时
    def stop(self):
        if not self.begin:
            print("提示:请先调用 start() 进行计时!")
        else:
            self.end = t.localtime()
            self._calc()
            print("计时结束!")

    # 内部方法,计算运行时间
    def _calc(self):
        self.lasted = []
        self.prompt = "总共运行了"
        for index in range(6):
            temp = self.end[index] - self.begin[index]

            # 低位不够减,需向高位借位 
            if temp < 0:
                # 测试高位是否有得“借”,没得借的话向再高位借......
                i = 1
                while self.lasted[index-i] < 1:
                    self.lasted[index-i] += self.borrow[index-i] - 1--->为什么减法的优先级比+= 高 
                    self.lasted[index-i-1] -= 1
                    i += 1
                
                self.lasted.append(self.borrow[index] + temp)
                self.lasted[index-1] -= 1--->减1次数太多.循环里面也在减,跳出循环还在-1
            else:
                self.lasted.append(temp)

        # 由于高位随时会被借位,所以打印要放在最后
        for index in range(6):
            if self.lasted[index]:
                self.prompt += str(self.lasted[index]) + self.unit[index]
        
        # 为下一轮计时初始化变量
        self.begin = 0
        self.end = 0

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

使用道具 举报

 楼主| 发表于 2017-12-28 10:52:28 | 显示全部楼层
本帖最后由 wow7jiao 于 2017-12-28 14:53 编辑
BngThea 发表于 2017-12-28 10:39
高位怎么会反复无借?1月那里就可以借啊
你把你的例子代入到代码中,逐条进行分析试试


就是反复无借,去最后借位,这个代码就饶进去了。

例如:

1天0时0分5秒-30秒= 23时59分35秒

i = 1:
self.lasted[index-i] += self.borrow[index-i] -1#分位59分,这个好理解
self.lasted[index-i-1] -=1#小时位是0,0-1,小时是-1小时

i=2:
小时位-1循环跳出

self.lasted.append(self.borrow[index] + temp)#这个好理解 60秒+(-25秒),把秒位写好
self.lated[index -1] -= 1.#这里就不好理解了分位= 59分 -1分 = 58分?这个地方看不懂了

再加上外面还套着一个for循环(for index inrange(6)),就完全看不出思路了


我把时间拨快了1小时,结果不对。。。
QQ截图20171228150027.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-28 09:03:08 | 显示全部楼层
因为  a += b-1 等价于
a = a + (b - 1)

你的代码有没有问题你自己跑一遍看看结果很预期是否一致就明白了
如果有不一致的地方,请贴出报错或怀疑的地方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-28 09:05:43 From FishC Mobile | 显示全部楼层
self.end=t.localtime()应该发生在_calc()之后
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-28 10:29:16 | 显示全部楼层
BngThea 发表于 2017-12-28 09:03
因为  a += b-1 等价于
a = a + (b - 1)

1.temp>0 例如:5秒-3秒。理解
2.temp<0,高位上一位有借,例如1分1秒-30秒。理解
3.temp<0,高位反复无借,例如:1月0天0时0分5秒-30秒。循环看不懂。又不好验证
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-28 10:39:25 | 显示全部楼层
wow7jiao 发表于 2017-12-28 10:29
1.temp>0 例如:5秒-3秒。理解
2.temp

高位怎么会反复无借?1月那里就可以借啊
你把你的例子代入到代码中,逐条进行分析试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-29 13:15:01 | 显示全部楼层
看样子我的问题很难的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-1-11 12:24:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-2 00:31:57 | 显示全部楼层
https://fishc.com.cn/thread-121501-1-2.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 22:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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