Python:类和对象



我不知道为什么当我运行我的代码返回错误的值。

from __future__ import annotations

class Duration:
def __init__(self):
self.hours = 0
self.days = 0
self.weeks = 0
def extendBy(self, hr: int) -> None:  # there is a problem
print({self.weeks}, {self.days}, {self.hours})
if hr + self.hours < 24:
self.hours = hr
if hr + self.hours > 23:
self.hours = ((hr + self.hours) % 24)
self.days += int((hr - self.hours) // 24)
if self.days > 6:
if self.days % 7 == 0:
self.weeks = int(self.days // 7)
self.days = 0
else:
self.days = self.days % 7
self.weeks = int(self.days // 7)
print({self.weeks}, {self.days}, {self.hours})

这些是我用来测试代码的断言

a = Duration()
a.extendBy(25)
assert (a.weeks == 0 and a.days == 1 and a.hours == 1)
a.extendBy(24)
assert (a.weeks == 0 and a.days == 2 and a.hours == 1)
a.extendBy(7*24)
assert (a.weeks == 1 and a.days == 2 and a.hours == 1)

当我打印出我的代码,我得到一个正确的结果数周和数小时,但几天我总是得到错误的结果。如果有人知道,请帮助我。

当我阅读你的代码时,我无法弄清楚你的逻辑是什么,所以我重写了一些逻辑,同时仍然保持整体结构相同:

class Duration:
def __init__(self):
self.hours = 0
self.days = 0
self.weeks = 0
def extendBy(self, hr):
if hr + self.hours < 24:
self.hours += hr
if hr + self.hours > 23:
self.days += (hr + self.hours) // 24
self.hours = (hr + self.hours) % 24
if self.days > 6:
self.weeks += self.days // 7
self.days = self.days % 7
print(self.weeks, self.days, self.hours)
a = Duration()
a.extendBy(25)
assert (a.weeks == 0 and a.days == 1 and a.hours == 1)
a.extendBy(24)
assert (a.weeks == 0 and a.days == 2 and a.hours == 1)
a.extendBy(7*24)
assert (a.weeks == 1 and a.days == 2 and a.hours == 1)

但是像这样的东西可以用更简单的代码用divmod来写,试着看看你能不能弄清楚。

我看到你的代码中有几个问题。不同的问题会在不同的地方损坏您的数据。例如,如果hrself.hours都很小,则您的第一个赋值会做错误的事情(它会丢弃self.hours而不是将它们加在一起)。

self.hours = hr

与其修复每个问题,我建议简化代码,这样你就不会有那么多条件情况需要处理。这里有一个简单的方法,使用divmod(在一个步骤中获得一个除数和余数),并无条件地更新日期和星期(尽管它们在加零后通常是相同的)。

def extendBy(self, hr: int) -> None:
days, self.hours = divmod(self.hours + hr, 24)
weeks, self.days = divmod(self.days + days, 7)
self.weeks += weeks

最新更新