鱼C论坛

 找回密码
 立即注册
查看: 935|回复: 13

[已解决]44讲,魔法方法:简单定制的d0,时间相减得负值,大神求助!

[复制链接]
发表于 2020-5-26 13:24:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 我下何从 于 2020-5-26 14:01 编辑

import time as t                                                            在借位那里自己写的,就是出错。。。但是不知道为啥出错,小白求助
class MyTimer():
    def __init__(self):
            self.unit=['年','月','日','时','分','秒']
            self.prompt="未开始计时"
            self.lasted=[]
            self.begin=0
            self.end=0
        

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

   
    #停止计时
    def stop(self):
        if not self.begin:
            print('请先计时')
        else:
            self.end=t.localtime()
            self._calc()
            print("计时结束")

    #计算计时时间
    def _calc(self):
        self.listed=[]
        self.prompt='总共运行了'
        for index in range(6):
            self.listed.append((self.end[index]-self.begin[index]))
            if self.listed[index]<0:
                    #秒:
                    if self.unit[index] in self.unit[5]:                                          #索引值每个确定,当相减的后者为负值的时候,向前借一位
                        self.listed[index-1]-=1                                                      #按我的想法是,即使前面那位是0,被借了变成-1,也可以在下次循环再往前补回来,但是结果却不行,问问为啥啊...
                        self.listed[index]=60+self.listed[index]
                    #分:
                    elif self.unit[index] == self.unit[4]:
                        self.listed[index-1]-=1
                        self.listed[index]=60+self.listed[index]
                    #时:
                    elif self.unit[index] == self.unit[3]:
                        self.listed[index-1]-=1
                        self.listed[index]=24+self.listed[index]
                    #日:
                    elif self.unit[index] == self.unit[2]:
                        self.listed[index-1]-=1
                        self.listed[index]=31+self.listed[index]
                    #月:
                    elif self.unit[index] == self.unit[1]:
                        self.listed[index-1]-=1
                        self.listed[index]=12+self.listed[index]
        for index in range(6):
            if self.lasted[index]>0:
                    self.prompt += str(self.lasted[index]) + self.unit[index]
最佳答案
2020-5-26 14:41:47
我下何从 发表于 2020-5-26 14:38
老哥我想问下,标准答案里self.lasted=[] 这里是是空列表  为什么下面借位的时候可以直接   while self.l ...

因为刚刚开始的时候 temp 不可能 < 0 会先执行else 里面的代码块哦~~

这是出错的结果

这是出错的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-26 13:27:52 | 显示全部楼层
    def __add__(self, other):
        propmt = '总共运行了'
        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
你忘记加self 了


import time as t

class MyTimer():
    def __init__(self):
        self.unit = ['年', '月', '日', '时', '分', '秒']
        self.prompt = "未开始计时"
        self.lasted = []
        self.begin = 0
        self.end = 0

    def __repr__(self):
        return self.prompt

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

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

    # 停止计时
    def stop(self):
        if not self.begin:
            print('请先计时')
        else:
            self.end = t.localtime()
            self._calc()
            print("计时结束")

    # 计算计时时间
    def _calc(self):
        self.listed = []
        self.prompt = '总共运行了'
        for index in range(6):
            self.listed.append((self.end[index] - self.begin[index]))
            if self.listed[index] < 0:
                # 秒:
                if self.unit[index] in self.unit[5]:  # 索引值每个确定,当相减的后者为负值的时候,向前借一位
                    self.listed[index - 1] -= 1  # 按我的想法是,即使前面那位是0,被借了变成-1,也可以在下次循环再往前补回来,但是结果却不行,问问为啥啊...
                    self.listed[index] = 60 + self.listed[index]
                # 分:
                elif self.unit[index] == self.unit[4]:
                    self.listed[index - 1] -= 1
                    self.listed[index] = 60 + self.listed[index]
                # 时:
                elif self.unit[index] == self.unit[3]:
                    self.listed[index - 1] -= 1
                    self.listed[index] = 24 + self.listed[index]
                # 日:
                elif self.unit[index] == self.unit[2]:
                    self.listed[index - 1] -= 1
                    self.listed[index] = 31 + self.listed[index]
                # 月:
                elif self.unit[index] == self.unit[1]:
                    self.listed[index - 1] -= 1
                    self.listed[index] = 12 + self.listed[index]
        for index in range(6):
            if self.lasted[index] > 0:
                self.prompt += str(self.lasted[index]) + self.unit[index]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 13:59:07 | 显示全部楼层

emmm其实问题不在这里,我并没有调用这个+,就是单纯那个借位的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 14:15:32 | 显示全部楼层
我下何从 发表于 2020-5-26 13:59
emmm其实问题不在这里,我并没有调用这个+,就是单纯那个借位的问题

嗯  我知道问题不在那 可是那边如果没改 你下次运行也会出错 只是现在是被索引给先出错了  

代码太多了 看头疼,不是自己写的思路没那么清晰 所以可能来看的人比较少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 14:18:25 | 显示全部楼层
Twilight6 发表于 2020-5-26 14:15
嗯  我知道问题不在那 可是那边如果没改 你下次运行也会出错 只是现在是被索引给先出错了  

代码太多 ...

嗯嗯,其实这道题前面的代码我基本没动,就是那个借位那里我和标准答案有点不同, 就是不太理解我借位为啥除了问题,老哥你在做这题的时候怎么做的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 14:19:16 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-26 14:25 编辑
我下何从 发表于 2020-5-26 14:18
嗯嗯,其实这道题前面的代码我基本没动,就是那个借位那里我和标准答案有点不同, 就是不太理解我借位为 ...

 def __calc(self):
        self.prompt = '总共运行时间为'
        for index in range(6):
            judge = self.end[index] - self.begin[index]
            if judge < 0 :
                new_lasted = self.ary[index-1] + judge
                self.lasted.append(new_lasted)
                if index >= 1 :
                    self.lasted.insert(index-1,self.lasted[index-1]-1)
                    self.lasted.pop(index)
            else:
                self.lasted.append(judge)
        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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 14:38:14 | 显示全部楼层

老哥我想问下,标准答案里self.lasted=[] 这里是是空列表  为什么下面借位的时候可以直接   while self.lasted[index-i] < 1:      这样子不会报错吗?在不存在值的列表里进行索引,在这while之后才会输入值给列表呀  
                                                                                   

老哥厉害!我看了下标准答案

老哥厉害!我看了下标准答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 14:41:47 | 显示全部楼层    本楼为最佳答案   
我下何从 发表于 2020-5-26 14:38
老哥我想问下,标准答案里self.lasted=[] 这里是是空列表  为什么下面借位的时候可以直接   while self.l ...

因为刚刚开始的时候 temp 不可能 < 0 会先执行else 里面的代码块哦~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 14:45:04 | 显示全部楼层
Twilight6 发表于 2020-5-26 14:41
因为刚刚开始的时候 temp 不可能 < 0 会先执行else 里面的代码块哦~~

老哥,你学python多久了啊,学了二十多天的我感觉除了简单一点的题会做,其他基本都有看答案,而隐约觉得前面的题让现在的我来做,即使当时我想了很久也会做了,现在也不一定会做,有点打击信心啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 14:46:18 | 显示全部楼层
我下何从 发表于 2020-5-26 14:45
老哥,你学python多久了啊,学了二十多天的我感觉除了简单一点的题会做,其他基本都有看答案,而隐约觉得 ...

我这题当时也卡了好久呢,几个小时不停改,有的时候改半天还回到原点....

我注册时间就是开始学Python 的时间嘿嘿  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 14:48:10 | 显示全部楼层
Twilight6 发表于 2020-5-26 14:46
我这题当时也卡了好久呢,几个小时不停改,有的时候改半天还回到原点....

我注册时间就是开始学Python ...

那你现在python不是就是基本学完了呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 14:49:43 | 显示全部楼层
我下何从 发表于 2020-5-26 14:48
那你现在python不是就是基本学完了呀

没   学到80课时就没继续看了 最近准备学下数据可视化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 14:50:29 | 显示全部楼层
Twilight6 发表于 2020-5-26 14:49
没   学到80课时就没继续看了 最近准备学下数据可视化

噢噢,这样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 14:56:26 | 显示全部楼层
Twilight6 发表于 2020-5-26 14:49
没   学到80课时就没继续看了 最近准备学下数据可视化

老哥能加个QQ吗,有些学python的疑惑想问一波
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 04:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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