我做了下面的课程。到目前为止,我的袖子里什么都没有:我可以看到属性
lower_value
和 upper_value
,以及 print
带有 dunder __repr__
. 的对象
from functools import reduce
class UnidimensionalSet(object):
pass
def checkIntervalAttrs(lower_value, upper_value, \
lower_is_closed, upper_is_closed):
is_number=(isinstance(lower_value, float) or \
isinstance(lower_value, int)) and \
(isinstance(upper_value, float) or \
isinstance(upper_value, int))
is_not_number_msg='Lower and upper values must have type float or int!'
is_not_bool_msg='Lower and upper interval values closedness must have type bool!'
is_closed_is_bool=isinstance(lower_is_closed, bool) and \
isinstance(upper_is_closed, bool)
lower_lesser_than_upper = lower_value < upper_value
lower_upper_msg='Lower value must be lesser than upper values'
if(not is_number):
raise TypeError(is_not_number_msg)
if(not is_closed_is_bool):
raise TypeError(is_not_bool_msg)
if(not lower_lesser_than_upper):
raise Exception(lower_upper_msg)
class Interval(UnidimensionalSet):
def __init__(self, lower_value, upper_value, \
lower_is_closed=True, upper_is_closed=True):
checkIntervalAttrs(lower_value, upper_value, \
lower_is_closed, upper_is_closed)
self.lower_value = lower_value
self.upper_value = upper_value
self.lower_is_closed = lower_is_closed
self.upper_is_closed = upper_is_closed
def __repr__(self):
a = self.lower_value
b = self.upper_value
lbracket = '[' if self.lower_is_closed else '('
rbracket = ']' if self.upper_is_closed else ')'
return '{lbracket}{a}, {b}{rbracket}'.format(a=a, b=b, lbracket=lbracket, rbracket=rbracket)
def __len__(self):
return self.upper_value-self.lower_value
但是,通过尝试长度操作
len(Interval(2.4,4.2))
,我收到以下错误。我能看懂,但看不懂,你能吗?
TypeError: 'float' object cannot be interpreted as an integer