這是自己做的練習,可能有錯誤,歡迎討論和各種最佳化重構方案。
根據反饋,或者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.xposition0>>> j.yposition0>>> j = Point(x = 9)>>> j.xposition9>>> j.yposition0>>> j = Point(1)>>> j.xposition1>>> j.yposition0>>> j = Point(1, 2)>>> j.xposition1>>> j.yposition2
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.slopeLingeSegment1 = 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。沒有達到題目的要求。