class Time(object):
def __init__(self,hour=0, minute= 0, second=0):
if type(hour) != int or type(minute) != int or type(second) != int or hour < 0 or hour > 23 or minute < 0 or minute > 59 or second < 0 or second > 59:
raise AssertionError
self.hour = hour
self.minute = minute
self.second = second
def __add__(self,right):
d = 0
m = 0
if type(right) != Time and type(right)!= int:
raise TypeError
if type(right) == int:
self.second += right
if self.second > 59:
d = self.second // 60
m = self.second % 60
self.minute += d
self.second = m
if self.minute > 59:
d = self.second // 60
m = self.second % 60
self.hour += d
self.minute = m
if self.hour > 23:
self.hour -= 12
elif type(right) == Time:
self.second = self.second + right.second
if self.second > 59:
d = self.second // 60
m = self.second % 60
self.minute += d
self.second = m
if self.minute > 59:
d = self.second // 60
m = self.second % 60
self.hour += d
self.minute = m
if self.hour > 23:
self.hour -= 12
self.minute = self.minute + right.minute
if self.minute > 59:
d = self.minute // 60
m = self.second % 60
self.hour = self.hour + d
self.minute = m
if self.hour > 23:
self.hour -= 12
return self
我正在编写+运算符以允许添加Time
对象和int
,从而产生新的Time
对象。 right可以是时间对象,也可以是整数。如果是整数,则应将其视为秒。应允许Time
+ int
和int
+ Time
,并且具有相同的含义。
正如你所看到的,我的代码有点乱。而且,它没有产生正确的结果。看错误如下:
*Error: t+70 -> 12:01:11am but should -> 12:01:10am
*Error: t+3600 -> 12:11:11am but should -> 1:00:00am
*Error: t+86400 -> 12:11:11am but should -> 12:00:00am
*Error: t -> 12:11:11am but should -> 12:00:00am
*Error: Time(4,56,23)+500 -> 4:43:43am but should -> 5:04:43am
*Error: Time(23,58,6)+736 -> 11:22:22pm but should -> 12:10:22am
*Error: 1+t raised exception TypeError: unsupported operand type(s) for +: 'int' and 'Time'
*Error: 70+t raised exception TypeError: unsupported operand type(s) for +: 'int' and 'Time'
有人可以帮我修改我的代码或告诉我一个更好的方法,以便我可以简化我的代码吗?提前致谢。
答案 0 :(得分:1)
或告诉我一个更好的方法
使用datetime
。它提供了您所需要的一切:
import datetime
start = datetime.datetime(2000, 1, 1, 12)
for second in [70, 3600, 86400]:
date = start + datetime.timedelta(seconds=second)
print(date.time())
输出:
12:01:10
13:00:00
12:00:00
如果您想拥有自己的课程,可以在班级中使用datetime
::
class Time(object):
def __init__(self, hour=0, minute= 0, second=0):
self._date = datetime.datetime(2000, 1, 1, hour, minute, second)
@property
def hour(self):
return self._date.hour
@property
def minute(self):
return self._date.minute
@property
def second(self):
return self._date.second
def __add__(self, other):
time_ = (self._date + datetime.timedelta(seconds=int(other))).time()
return Time(time_.hour, time_.minute, time_.second)
def __radd__(self, other):
return self.__add__(other)
尝试一下:
>>> t = Time(12, 0, 0)
>>> t2 = t + 3600
>>> t2.hour
13
>>> t3 = 3600 + t
>>> t3.hour
13