---
# System prepended metadata

title: 1148. 三角形判斷以及歸類

---

# 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)
```