QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
416
查看: 400|回复: 7

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

[复制链接]
最佳答案
0 
累计签到:142 天
连续签到:1 天
wow7jiao 发表于 2017-12-27 22:55:52 4007 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 wow7jiao 于 2017-12-29 11:59 编辑
  1. import time as t

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

  13.     __repr__ = __str__

  14.     def __add__(self, other):
  15.         prompt = "总共运行了"
  16.         result = []
  17.         for index in range(6):
  18.             result.append(self.lasted[index] + other.lasted[index])
  19.             if result[index]:
  20.                 prompt += (str(result[index]) + self.unit[index])
  21.         return prompt
  22.    
  23.     # 开始计时
  24.     def start(self):
  25.         self.begin = t.localtime()
  26.         self.prompt = "提示:请先调用 stop() 停止计时!"
  27.         print("计时开始...")

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

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

  42.             # 低位不够减,需向高位借位
  43.             if temp < 0:
  44. [color=Red]                # 测试高位是否有得“借”,没得借的话向再高位借......
  45.                 i = 1
  46.                 while self.lasted[index-i] < 1:
  47. [color=Blue]                    self.lasted[index-i] += self.borrow[index-i] - 1[/color]--->为什么减法的优先级比+= 高
  48.                     self.lasted[index-i-1] -= 1
  49.                     i += 1
  50.                
  51.                 self.lasted.append(self.borrow[index] + temp)
  52.                 self.lasted[index-1] -= 1[/color]--->减1次数太多.循环里面也在减,跳出循环还在-1
  53.             else:
  54.                 self.lasted.append(temp)

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

楼层
跳转到指定楼层
最佳答案
0 
累计签到:142 天
连续签到:1 天
wow7jiao  楼主| 发表于 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
最佳答案
923 
累计签到:307 天
连续签到:60 天
BngThea 发表于 2017-12-28 09:03:08 | 显示全部楼层
因为  a += b-1 等价于
a = a + (b - 1)

你的代码有没有问题你自己跑一遍看看结果很预期是否一致就明白了
如果有不一致的地方,请贴出报错或怀疑的地方
最佳答案
27 
累计签到:163 天
连续签到:1 天
左手十字 发表于 2017-12-28 09:05:43 From FishC Mobile | 显示全部楼层
self.end=t.localtime()应该发生在_calc()之后
最佳答案
0 
累计签到:142 天
连续签到:1 天
wow7jiao  楼主| 发表于 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秒。循环看不懂。又不好验证
最佳答案
923 
累计签到:307 天
连续签到:60 天
BngThea 发表于 2017-12-28 10:39:25 | 显示全部楼层
wow7jiao 发表于 2017-12-28 10:29
1.temp>0 例如:5秒-3秒。理解
2.temp

高位怎么会反复无借?1月那里就可以借啊
你把你的例子代入到代码中,逐条进行分析试试
最佳答案
0 
累计签到:142 天
连续签到:1 天
wow7jiao  楼主| 发表于 2017-12-29 13:15:01 | 显示全部楼层
看样子我的问题很难的
最佳答案
0 
累计签到:142 天
连续签到:1 天
wow7jiao  楼主| 发表于 2018-1-11 12:24:54 | 显示全部楼层

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2018-4-23 03:48

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