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