def __init__(self,num=0,denom=1):
self.num = num
self.denom = denom
if type(self.num)!= int or type(self.denom)!= int:
raise AssertionError
if self.denom < 0:
self.denom = -self.denom
self.num = -self.num
if self.num == 0:
self.denom = 1
from fractions import gcd
f = gcd(self.denom,self.num)
int(f)
if f < 0:
f = -f
self.denom = self.denom/f
self.num = self.num /f
self.denom = int(self.denom)
self.num = int(self.num)
def __repr__(self):
s = 'Fraction' + str(('('+str(self.num)+','+str(self.denom)+')'))
return s
def __str__(self):
s = str(self.num) +'/'+ str(self.denom)
return s
def __bool__(self):
if self.num/self.denom == 0:
return False
else:
return True
def __getitem__(self,i):
if i == 0 or i[0] == 'n':
return self.num
if i == 1 or i[0]=='d':
return self.denom
else:
raise TypeError
指令:写一个__getitem__
方法,返回参数为0的分子或任何前缀为“numerator”的字符串;返回参数为1的分母或任何前缀为“分母”的字符串。
例如,如果x = Fraction(1,2)
,则x[0]
和x[’num’]
返回1.
提示:请参阅str.find
函数或前缀处理。在其他情况下提高TypeError
:例如。 x[2]
或x[’foo’]
。
the input is listed as follow:
43e-->f[1]-->2
44e-->f['d']-->2
45e-->f['denom']-->2
46e-->f['denominator']-->2
47^-->f[-1]-->TypeError
48^-->f['x']-->TypeError
the Error I get is:
43 *Error: f[1] raised exception TypeError: 'int' object is not subscriptable
有人可以告诉我如何修复__getitem__
功能并消除错误?
答案 0 :(得分:-1)
问题是i==0 or i[0]=='n'
。
当您使用f[1]
时,它会检查i==0
(1==0
),但它会给出错误,因此会检查i[0]=='n'
(1[0]=='n'
)并收到错误消息。
您可以使用isinstance(variable, type)
来检查int
和str
if isinstance(i, int):
if i == 0:
...
elif i == 1:
...
else:
raise ...
elif isinstance(i, str) and len(i)>0:
if 'numerator'.startswith(i):
...
elif 'denominator'.startswith(i):
...
else:
raise ...
else:
raise ...