ronald627 发表于 2020-3-31 00:58:14

python入门44课问题

视频中完整代码:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import time


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

    def __str__(self):
      return self.prompt

    __repr__ = __str__

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

      return prompt

    def start(self):
      # 开始计时
      self.begin = time.localtime()
      self.prompt = '提示:请先调用stop()停止计时'
      print('计时开始')

    # 结束计时
    def stop(self):

      if not self.begin:
            print('提示:请先调用start()进行计时!')
      else:
            self.end = time.localtime()
            self._calc()
            print('计时结束')

    # 计算时长
    def _calc(self):

      self.lasted = []
      self.prompt = '总共运行了'
      for index in range(6):
            print(index)
            self.lasted.append(self.end - self.begin)
            if self.lasted:
                self.prompt += (str(self.lasted) + self.unit)
      # 释放初始化
      self.begin = 0
      self.end = 0



计算时长的函数中index带入的那个range这个6是怎么来的?我试了下其他数字,比如改成10,就报错元组循环报错,小于6在返回复制prompt的时候self.lasted的时候就有问题。

heidern0612 发表于 2020-3-31 07:43:04

本帖最后由 heidern0612 于 2020-3-31 07:45 编辑

这个index指的是time.localtime()返回序列标号,6的话只计算前六位。

*:time.struct_time(tm_year=2016, tm_mon=11, tm_mday=27, tm_hour=10, tm_min=26, tm_sec=5, tm_wday=6, tm_yday=332, tm_isdst=0)

也就是只计算了年、月、日、时、分、秒,后面的周几,第几天什么的都没包括在内。

calc里for迭代的结果就是年减年,月减月,日减日,时减时,分减分,秒减秒。一共6次迭代。

ronald627 发表于 2020-3-31 12:20:57

heidern0612 发表于 2020-3-31 07:43
这个index指的是time.localtime()返回序列标号,6的话只计算前六位。

*:time.struct_time(tm_year=2016 ...

懂了,等于在for的迭代中,返回年月小时的时候返回都是0,然后用if去判断拿到第几位有数字返回,然后对应的到self.unit里面找对应的单位。这样理解没问题吧

heidern0612 发表于 2020-3-31 13:32:10

ronald627 发表于 2020-3-31 12:20
懂了,等于在for的迭代中,返回年月小时的时候返回都是0,然后用if去判断拿到第几位有数字返回,然后对应 ...

是的.{:5_105:}
页: [1]
查看完整版本: python入门44课问题