这是自己做的练习,可能有错误,欢迎讨论和各种优化重构方案。
根据反馈,或者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。没有达到题目的要求。

posted on 2012-09-14 10:07  balian  阅读(1393)  评论(2编辑  收藏  举报