这是自己做的练习,可能有错误,欢迎讨论和各种优化重构方案。
根据反馈,或者code review,对本篇文章答案或者相关内容的更新补充,一般会被添加在本篇博客的评论中。
尽量保证每题的答案代码是完整的,不仅仅是函数或者类,打开Python 2.7的IDLE,将代码完整拷贝进去,就能调试运行。
欢迎访问Balian在博客园的家。 http://www.cnblogs.com/balian
13-5.
几何。建立一个由有序数值对(x,y)组成的Point类,它代表某个点的X坐标和Y坐标。X坐标和Y坐标在实例时被传递给构造器,如果没有给出他们的值,则默认为坐标的原点。
【答案】
代码如下:
>>> class Point(object): ... def __init__(self, x = 0, y = 0): ... self.xposition = x ... self.yposition = y ... >>> j = Point() >>> j.xposition 0 >>> j.yposition 0 >>> j = Point(x = 9) >>> j.xposition 9 >>> j.yposition 0 >>> j = Point(1) >>> j.xposition 1 >>> j.yposition 0 >>> j = Point(1, 2) >>> j.xposition 1 >>> j.yposition 2
13-6.
几何。创建一个直线/直线段类。除主要的数据属性:一对坐标值(参见上一个练习)外,它还具有长度和斜线属性。你需要覆盖__repr__()方法(如果需要的话,还有__str__()方法),使得代表那条直线(或直线段)的字符串表示形式是由一对元组构成的元组,即((x1,y1)、(x2,y2))。总结:
__repr__() 将直线的两个端点(始点和止点)显示成一对元组
length 返回此线段的长度 - 不要使用“len”,因为这样使人误解它是整型。
slope 返回此线段值线段的斜率(或在适当的时候返回None)
【答案】
代码如下:
class Segment(object): 'Class about a line segment' def __init__(self, x1 = 0, y1 = 0, x2 = 0, y2 = 0): self.x1 = x1 self.y1 = y1 self.x2 = x2 self.y2 = y2 def position(self): self.point1 = (self.x1, self.y1) self.point2 = (self.x2, self.y2) return (self.point1, self.point2) def length(self): self.length = ((self.x2 - self.x1) ** 2 + (self.y2 - self.y1) ** 2) ** 0.5 return self.length def slope(self): if self.x1 == self.x2: self.slope = 'None' else: self.slope = (self.y2 - self.y1) / (self.x2 * 1.0 - self.x1) return self.slope LingeSegment1 = Segment(0, 0, 3, 4) print 'Line Position is: ', LingeSegment1.position() print 'Length is: ', LingeSegment1.length() print 'Line slope is: ', LingeSegment1.slope()
【执行结果】
Line Position is: ((0, 0), (3, 4))
Length is: 5.0
Line slope is: 1.33333333333
【未完】
本题没有按照题目的要求覆盖__repr__()方法,而是定义了新方法position。没有达到题目的要求。