# 1148. 三角形判斷以及歸類 ## 方法與素材 笑死 1. 用`input.split()`處理單行輸入,不管怎樣都先split,如果要檢查是不是-1的話就`tri[0] == "-1"` 常見錯誤:`tri[0] == -1`,輸入是字串,這個比對的是數字,永遠都不會成立 ```python triangle = input().split() if triangle[0] == "-1": break ``` 2. 把數字拿出來丟給a, b, c,小技巧:不管怎樣直接把最大的丟給c,這樣後面判斷就很簡單 怎用?可以想想,其實只有以下幾種情況: 1. a最大 2. b最大 3. c最大 其中需要換的只有1跟2,所以我們就檢查這兩種情況: ```python #拿出來要記得轉int a, b, c = int(triangle[1]), int(triangle[2]), int(triangle[3]) if (a > c): a, c = c, a # 沒錯,可以這樣交換 if (b > c): b, c = c, b ``` 3. 接下來檢查就超簡單,先把不是三角形的給判斷了,再檢查剩下的即可: ```python if (a + b <= c or b + c <= a or a + c <= b): not_triangle.append(name) elif (a*a + b*b > c*c): acute.append(name) elif (a*a + b*b < c*c): abtuse.append(name) elif (a*a + b*b == c*c): right.append(name) ``` 4. 因為題目要求輸出要照字母順序,所以我們sort(全部放進去完再sort就好,省時間): ```python not_triangle.sort() acute.sort() abtuse.sort() right.sort() ``` 5. 輸出比較奇怪一點,要怎麼讓字母中間是逗號呢?有很多種方法,提供一種直觀的和一種常用但比較難懂的 1. 用string的join,若是純粹要把一堆字母連接起來的話我們通常會: ``` "".join([有一堆字母的list]) ``` 前面的引號其實就是代表每個字母中間要塞什麼,所以如果要逗號的話就放逗號即可,然後如果陣列沒東西要輸出None: ```python print("Not Triangle:", ",".join(not_triangle) if not_triangle else None) # if not_tiangle 的意思是如果not_triangle有東西的話,就會成立 # if [陣列名稱] 就是在檢查陣列有沒有東西 ``` 2. 用星號(*)拆包,如果在一個在陣列前面放星號的話,這個動作叫做拆包,他會把陣列裡面的東西一個一個拿出來(有點像for loop)但不是,下面給一個範例: ```python l = [1, 3, 4, 5] print(*l) # 輸出:1 3 4 5 # 如果加上sep="," print(*l, sep=",") # 輸出:1,3,4,5 ``` 所以這裡就可以這樣: ```python print("Not Triangle: ", end='') if not_triangle: print(*not_triangle, sep=",") # 不是None的話才能拆包,不然會error else: print(None) ``` ## Code ```python= not_triangle, acute, abtuse, right = [], [], [], [] while True: triangle = input().split() if (triangle[0] == "-1"): break #拿出來要記得轉int name, a, b, c = triangle[0], int(triangle[1]), int(triangle[2]), int(triangle[3]) if (a > c): a, c = c, a # 沒錯,可以這樣交換 if (b > c): b, c = c, b if (a + b <= c or b + c <= a or a + c <= b): not_triangle.append(name) elif (a*a + b*b > c*c): acute.append(name) elif (a*a + b*b < c*c): abtuse.append(name) elif (a*a + b*b == c*c): right.append(name) not_triangle.sort() acute.sort() abtuse.sort() right.sort() print("Not Triangle:", ",".join(not_triangle) if not_triangle else None) print("Acute Angle:", ",".join(acute) if acute else None) print("Obtuse Angle:", ",".join(abtuse) if abtuse else None) print("Right Angle:", ",".join(right) if right else None) ```