题目:
If I leave my house at 6:52 am and run 1 mile at an easy pace (8:15 per mile), then 3 miles at
tempo (7:12 per mile) and 1 mile at easy pace again, what time do I get home for breakfast?
代码第一版是这样的。
#!/user/bin/python
#encoding=utf-8
#Filename:EX_Chapter3_NO3.py
class myTime:
def __init__ (self,hour,minute,second):
self.hour=hour
self.minute=minute
self.second=second
#两个时间对象相同
def addObjTime (self,intime):
self.hour+=intime.hour
self.minute+=intime.minute
self.second+=intime.second
#一个时间对象乘以倍数
def Multi(self,intimes):
self.hour=self.hour*intimes
self.minute=self.minute*intimes
self.second*=intimes
beginTime=myTime(6,52,0)
easyTime=(0,8,15)
tempo=(0,7,12)
beginTime=beginTime.addObjTime(easyTime.Multi(1))
beginTime=beginTime.addObjTime(tempo.Multi(3))
beginTime=beginTime.addObjTime(easyTime.Multi(1))
结果却报了这样的错:
---------- Python27 ----------
Traceback (most recent call last):
File "EX_Chapter3_NO3.py", line 22, in
beginTime=beginTime.addObjTime(easyTime.Multi(1))
AttributeError: 'tuple' object has no attribute 'Multi'
输出完成 (耗时 0 秒) - 正常终止
既然这样,问题出在哪里呢,看
easyTime=(0,8,15)
tempo=(0,7,12)
可以知道,我的本意是要创建一个时间对象的,结果却创建了一个tuple对象。这就是问题所在了。
找到了问题,改掉他。
源代码为:
#!/user/bin/python
#encoding=utf-8
#Filename:EX_Chapter3_NO3.py
class myTime:
def __init__ (self,hour,minute,second):
self.hour=hour
self.minute=minute
self.second=second
#两个时间对象相同
def addObjTime (self,intime):
self.hour+=intime.hour
self.minute+=intime.minute
self.second+=intime.second
#一个时间对象乘以倍数
def Multi(self,intimes):
self.hour=self.hour*intimes
self.minute=self.minute*intimes
self.second*=intimes
beginTime=myTime(6,52,0)
easyTime=myTime(0,8,15)
tempo=myTime(0,7,12)
beginTime=beginTime.addObjTime(easyTime.Multi(1))
beginTime=beginTime.addObjTime(tempo.Multi(3))
beginTime=beginTime.addObjTime(easyTime.Multi(1))
可以看到,修改完成,但是运行还是报错啊。
是返回值的问题。
现在修改成如下
#!/user/bin/python
#encoding=utf-8
#Filename:EX_Chapter3_NO3.py
class myTime:
def __init__ (self,hour,minute,second):
self.hour=hour
self.minute=minute
self.second=second
#两个时间对象相同
def addObjTime (self,intime):
self.hour+=intime.hour
self.minute+=intime.minute
self.second+=intime.second
return self
#一个时间对象乘以倍数
def Multi(self,intimes):
self.hour=self.hour*intimes
self.minute=self.minute*intimes
self.second*=intimes
self=adjsttime(self)
return self
#使规范化
def adjusttime (self):
upminute=self.second/60
self.second=self.second%60
self.minute+=upminute
upHour=self.minute/60
self.minute=self.minute%60
self.hour=(self.hour+upHour)%24
return self
def showtime (self):
print "%d时%d分%d秒"%(self.hour,self.minute,self.second)
beginTime=myTime(6,52,0)
easyTime=myTime(0,8,15)
tempo=myTime(0,7,12)
beginTime=beginTime.addObjTime(easyTime.Multi(1))
beginTime=beginTime.addObjTime(tempo.Multi(3))
beginTime=beginTime.addObjTime(easyTime.Multi(1))
但是还是有问题的。adjusttime(self)应该改为self.adjusttime()
艹了,python这点太反人类了,艹了。
最后源代码是
#!/user/bin/python
#encoding=utf-8
#Filename:EX_Chapter3_NO3.py
class myTime:
def __init__ (self,hour,minute,second):
self.hour=hour
self.minute=minute
self.second=second
#两个时间对象相同
def addObjTime (self,intime):
self.hour+=intime.hour
self.minute+=intime.minute
self.second+=intime.second
self=self.adjusttime()
return self
#一个时间对象乘以倍数
def Multi(self,intimes):
self.hour=self.hour*intimes
self.minute=self.minute*intimes
self.second*=intimes
self=self.adjusttime()
return self
#使规范化
def adjusttime(self):
upminute=self.second/60
self.second=self.second%60
self.minute+=upminute
upHour=self.minute/60
self.minute=self.minute%60
self.hour=(self.hour+upHour)%24
return self
def showtime (self):
print "%d时%d分%d秒"%(self.hour,self.minute,self.second)
beginTime=myTime(6,52,0)
easyTime=myTime(0,8,15)
tempo=myTime(0,7,12)
beginTime=beginTime.addObjTime(easyTime.Multi(1))
beginTime=beginTime.addObjTime(tempo.Multi(3))
beginTime=beginTime.addObjTime(easyTime.Multi(1))
beginTime.showtime()