Python 如何将秒转换为分钟,将分钟转换为小时

Python 如何将秒转换为分钟,将分钟转换为小时,python,class,Python,Class,当我输入时间时,比如当我输入t=time(0,0,90)时。 如何让代码返回0:1:30 我该如何做下面的工作呢? 添加一个名为increment的方法。这将使当前时间增加1秒。确保检查了所有边界条件。当时间增加到23:59:59时,它应该滚动到00:00:00 当我输入时间时,比如当我输入t=time(0,0,90)时。如何让代码返回0:1:30 这可以通过简单地将秒移动到分钟,将分钟移动到小时来完成,并根据需要进行缩放。首先: class time: def __init__(self,hr

当我输入时间时,比如当我输入t=time(0,0,90)时。 如何让代码返回0:1:30

我该如何做下面的工作呢? 添加一个名为increment的方法。这将使当前时间增加1秒。确保检查了所有边界条件。当时间增加到23:59:59时,它应该滚动到00:00:00

当我输入时间时,比如当我输入t=time(0,0,90)时。如何让代码返回0:1:30

这可以通过简单地将秒移动到分钟,将分钟移动到小时来完成,并根据需要进行缩放。首先:

class time:
def __init__(self,hrs,mins,secs):

    self.hrs = hrs
    self.mins= mins
    self.secs = secs

def __str__(self):
    return (str(self.hrs%24)+":"+str(self.mins)+":"+str(self.secs))

def __repr__(self):
    return (str(self.hrs%24)+":"+str(self.mins)+":"+str(self.secs))
执行此操作的代码相对简单:

hh = 0
mm = 0
ss = 90
请注意,这不是最有效的方法,尤其是当值可能很高时。如果这是一种可能性,您最好选择以下方式:

while ss >= 60:
    ss -= 60
    mm += 1
while mm >= 60:
    mm -= 60
    hh = (hh + 1) % 24
添加一个名为increment的方法。这将使当前时间增加1秒。确保检查了所有边界条件。当时间增加到23:59:59时,它应该滚动到00:00:00

遵循类似的模式(并且假设您已经修复了它以确保值被正确钳制),这也是相对容易的

mm += (ss // 60) ; ss = ss % 60
hh += (mm // 60) ; mm = mm % 60
hh = hh % 24

请注意,我没有将其集成到您的特定代码中,我更多的是将Python视为一种伪代码语言(它擅长于此)。那是因为这是课堂作业,你自己做会学到更多(当然,一旦你知道怎么做)


您应该使用我提供的算法,并根据自己的代码对其进行调整。

我建议您创建一个方法来添加小时分钟和秒,增量方法只调用添加秒方法。在他们达到各自极限时处理的方法中

ss = (ss + 1) % 60            # add second, wrapping if needed.
if ss == 0:                   # if second wraps, do same to minute.
    mm = (mm + 1) % 60
    if mm == 0:               # if minute wraps, increment hour.
        hh = (hh + 1) % 24

您可以自己运行此代码

我会选择完全不同的路线。在这里展示,以防对您有所帮助

class time:
    def __init__(self,hrs,mins,secs):
        self.secs = secs % 60
        self.mins = (mins + (secs // 60)) % 60
        self.hrs = (hrs + (mins // 60)) % 24

    def add_hour(self):
        if self.hrs == 23:
            self.hrs = 0
        else:
            self.hrs += 1


    def add_min(self):
        if self.mins == 59:
            self.add_hour()
            self.mins = 0
        else:
          self.mins += 1

    def add_sec(self):
        if self.secs == 59:
            self.add_min()
            self.secs = 0
        else:
            self.secs += 1

    def increment(self):
      self.add_sec()

    def __str__(self):
        return (f"{self.hrs}:{self.mins}:{self.secs}")

    def __repr__(self):
        return (f"{self.hrs}:{self.mins}:{self.secs}")

t = time(23,59,59)
print(t)
#23:59:59
t.increment()
print(t)
#0:0:0
t = time(0,0,90)
print(t)
#0:1:30

依我看,这是最简单、最直接的方法。如果有多个值必须保持同步,我的建议是不要将它们分开存储:只需将它们一起存储在基础系统中,并在用户需要时将它们分开。

我喜欢你的想法,非常优雅。我只是基于OP的原始代码,做得很好,只是一个小小的挑剔。由于时间必须限制在一天之内,所以无论何时设置或更改时间(在
\uuuu init\uuuu
increment
中),您都应该
时间=时间%86400
。@paxdiablo哦,您是对的,我错过了那个要求!请务必注意,您的类名为
time
,这将与内置模块冲突。我建议至少重命名为
Time
class Time:
    def __init__(self, hh, mm, ss):
        self.time = hh*3600 + mm*60 + ss # Total seconds

    @property
    def hours(self):
        return (self.time % 86400) // 3600

    @property
    def mins(self):
        return (self.time % 3600) // 60

    @property
    def secs(self):
        return self.time % 60

    def increment(self):
        self.time += 1