python koans: Triangle.py, about_triangle_project2.py 題解

about_triangle_prject2的代碼沒有什麼特別:python

def test_illegal_triangles_throw_exceptions(self):
        with self.assertRaises(TriangleError):
            triangle(0, 0, 0)

這是一個with context manager,assertRaises如今在python3裏面已經支持使用with了,因此運行順序應該是創建assertRaises>運行triangle(0,0,0)>assertRaises __exit__的對應。不過這一題主要須要書寫的部分不在這裏,而是triangle.pyruby

def triangle(a, b, c):
    side_arr = sorted([a,b,c])
    if side_arr[0]<=0 or side_arr[2]>= side_arr[0]+side_arr[1]:
        raise TriangleError
    else:
        subEdge = set([a,b,c])
        if len(subEdge) == 1:
            return 'equilateral'
        elif len(subEdge) == 2:
            return 'isosceles'
        else:
            return 'scalene'

# Error class used in part 2.  No need to change this code.
class TriangleError(Exception):
  pass

這裏面關鍵的內容是下面:koa

side_arr = sorted([a,b,c])
    if side_arr[0]<=0 or side_arr[2]>= side_arr[0]+side_arr[1]:
        raise TriangleError
    else:

簡單說就是兩個條件,首先不能有任何一個邊長度小於等於0(選取三個邊裏面最小的),而後最長邊應該短於另外兩邊的和,若是上面的條件不能達到,那麼就raise一個自建的error Class:TriangleErroride

固然TriangleError只是一個空的類,可是不要緊,這道題這樣就已通過了。ui

之因此寫這個,主要是以前在這裏堵了好久,最近在stackoverflow看到了ruby koans裏面關於這道題的討論才弄明白該怎麼寫。stackoverflow的相關連接在下面:this

http://stackoverflow.com/questions/3834203/ruby-koan-151-raising-exceptionscode

相關文章
相關標籤/搜索