AttributeError: 'tuple' object has no attribute 'Multi'

题目:

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 <module>
    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))
可以看到,修改完成,但是运行还是报错啊。
错误描述如下:
---------- Python27 ----------
Traceback (most recent call last):
  File "EX_Chapter3_NO3.py", line 22, in <module>
    beginTime=beginTime.addObjTime(easyTime.Multi(1))
  File "EX_Chapter3_NO3.py", line 11, in addObjTime
    self.hour+=intime.hour
AttributeError: 'NoneType' object has no attribute 'hour'
输出完成 (耗时 0 秒) - 正常终止

是返回值的问题。
现在修改成如下

#!/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()
          

显示的结果为
---------- Python27 ----------
7时30分6秒


输出完成 (耗时 0 秒) - 正常终止



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值