---
# System prepended metadata

title: 語法講義
tags: [HackerSir]

---

# 語法講義
請善用ctrl + f找你想要的語法
###### tags: `HackerSir`

[toc]

## 輸入輸出
<table>
    <tbody>
        <tr>
            <td>輸入</td>
            <td>input</td>
        </tr>
        <tr>
            <td>輸出</td>
            <td>output</td>
        </tr>
    </tbody>
</table>

```python=
name = input() # 輸入到name裡
print('hello') # 輸出hello
print(name) # 輸出name的值
print('hello', name) # 輸出hello 名字，中間隔一個空格
```

## 變數
變數名稱 = 值
```python=
# 把a的值設成3
a = 3
# 把b的值設成輸入的值，之後轉成整數
b = int(input())
print(a + b)
```

一些比較單純的型態
| 描述 | 名稱 | 轉換到這個型態 |
| ---- | ---- | ---- |
| 整數  | int | int() |
| 小數  | float | float() |
| 布林  | float | float() |


一些功能比較多的型態
| 描述 | 名稱 | 轉換到這個型態 |
| ---- | ---- | ---- |
| 字串 | string | str() |
| 列表 | list | list() |
| 字典 | dictionary | dict() |

## 數學
<table>
    <tbody>
        <tr>
            <td>加法</td>
            <td>+</td>
        </tr>
        <tr>
            <td>減法</td>
            <td>-</td>
        </tr>
        <tr>
            <td>乘法</td>
            <td>*</td>
        </tr>
        <tr>
            <td>除法(小數)</td>
            <td>/</td>
        </tr>
        <tr>
            <td>取商數</td>
            <td>//</td>
        </tr>
        <tr>
            <td>取餘數</td>
            <td>%</td>
        </tr>
        <tr>
            <td>次方</td>
            <td>**</td>
        </tr>
    </tbody>
</table>

```python=
a = 5
b = 3
print(a + b) # 8
print(a - b) # 2
print(a * b) # 15
print(a / b) # 1.6666666666666667
print(a // b) # 1
print(a % b) # 2
print(a ** b) # 125
```

## 條件判斷
if elif else
由上往下判斷，中間遇到一個成立的就會略過其他的
```python=
score = 97
if score >= 90:
    print('學霸')
elif score >= 60:
    print('及格')
else:
    print('當掉')
# 輸出學霸
```

都用if的話就會每個獨立做判斷
```python=
score = 65
if score >= 90:
    print('學霸')
if score >= 60:
    print('及格')
if score >= 0:
    print('當掉')
# 輸出:
# 及格
# 當掉
```

### 比較數字
<table>
    <tbody>
        <tr>
            <td>等於</td>
            <td>==</td>
        </tr>
        <tr>
            <td>小於</td>
            <td>&lt</td>
        </tr>
        <tr>
            <td>小於等於</td>
            <td>&lt=</td>
        </tr>
        <tr>
            <td>大於</td>
            <td>&gt</td>
        </tr>
        <tr>
            <td>大於等於</td>
            <td>&gt=</td>
        </tr>
    </tbody>
</table>

```python=
my_score = 59
your_score = 99
if my_score == your_score:
    print("我們同分欸")
elif my_score < your_score:
    print("您好強")
elif my_score > your_score:
    print("我好強")
# 輸出您好強
```

### 邏輯運算
<table>
    <tbody>
        <tr>
            <td>真</td>
            <td>True</td>
        </tr>
        <tr>
            <td>假</td>
            <td>False</td>
        </tr>
        <tr>
            <td>且</td>
            <td>and</td>
        </tr>
        <tr>
            <td>或</td>
            <td>or</td>
        </tr>
        <tr>
            <td>否定</td>
            <td>*</td>
        </tr>
    </tbody>
</table>

```python=
money = 50
price = 25
hungry = False

if money < price:
    print("沒錢qwqb")
elif money >= price and not hungry:
    print("錢夠但肚子不會餓，省下來吧")
elif money >= price and hungry:
    print("有點餓，買個麵包吧")
# 輸出錢夠但肚子不會餓，省下來吧
```

## 迴圈
for迴圈: 主要用在知道會做幾次迴圈，或是要把列表裡的項目全部看過一遍時使用
```python=
for i in range(3):
    print("我是數字" + str(i))
# 輸出:
# 我是數字0
# 我是數字1
# 我是數字2
```

```python=
fruits = ["香蕉", "奇異果", "葡萄"]
for fruit in fruits:
    print(fruit)
# 輸出:
# 香蕉
# 奇異果
# 葡萄
```

while迴圈: 主要用在不知道要迴圈幾次，但是知道什麼時候要結束迴圈使用
```python=
name = input("請輸入你的名字(最多十個字): ")
# 只要名字的長度超過十個字就繼續迴圈，讓使用者重新輸入
while len(name) > 10:
    print("你的名字太長了，可以縮寫一下嗎qwq")
    name = input("請輸入你的名字(最多十個字): ")
# 迴圈結束後輸出使用者的名字
print("你的名字是:", name)
```

### 迴圈控制
<table>
    <tbody>
        <tr>
            <td>略過這次執行，跳到下一次的迴圈</td>
            <td>continue</td>
        </tr>
        <tr>
            <td>終止迴圈執行</td>
            <td>break</td>
        </tr>
    </tbody>
</table>

```python=
for i in range(5):
    if i == 3:
        # 數字是3的話會略過數數字的程式，跳到4繼續數
        print("我不喜歡" + str(i) + "，不想數他")
        continue
    print("正在數數字" + str(i))
# 輸出:
# 正在數數字0
# 正在數數字1
# 正在數數字2
# 我不喜歡3，不想數他
# 正在數數字4
```

```python=
for i in range(5):
    if i == 3:
        # 數字是3的話會停止整個迴圈
        print("我超級不喜歡" + str(i) + "，不想再數數了")
        break
    print("正在數數字" + str(i))
# 輸出:
# 正在數數字0
# 正在數數字1
# 正在數數字2
# 我超級不喜歡3，不想再數數了
```

## 函式
`def 函式名稱(參數):`宣告函式
```python==
# 沒有參數，純粹輸出問候
def say_hello():
    print("hello :3")

# 呼叫say_hello
say_hello()

#輸出hello :3
```

括號裡面可以放參數，讓外面把數值傳進函式，在函式裡面做運算
```python=
# 用華氏溫度當參數，輸出攝氏溫度的值
def fahrenheit_to_celcius(f):
    print((f - 32) * 5 // 9)

temperature = 70
# 把現在的溫度(華氏)傳入轉成攝氏的函式
fahrenheit_to_celcius(temperature)
# 輸出21
```

`return`可以把值傳回呼叫函式的地方，方便之後運用
```python=
# 用華氏溫度當參數，計算攝氏溫度的值
def fahrenheit_to_celcius(f):
    # 改成傳回攝氏的值
    return (f - 32) * 5 // 9

temperature = 70
# 把轉成攝氏的溫度記錄下來
temp_celcius = fahrenheit_to_celcius(temperature)

# 根據攝氏溫度輸出文字
if temp_celcius >= 30:
    print('熱死')
elif temp_celcius >= 15:
    print('剛好')
else:
    print('冷死')
# 輸出剛好
```

## 模組
`import 模組名稱` 把模組底下的東西全部匯入，呼叫時寫`模組名稱.函式名稱`
```python=
# 使用random裡的shuffle和choice函式
import random

cards = [1, 2, 3, 4, 5]
random.shuffle(cards) # 洗牌
print(cards) # 輸出洗牌後的結果
print(random.choice(cards)) # 隨機選一張牌
```

`from 模組名稱 import 函式名稱` 只匯入模組底下指定的函式，呼叫時寫`函式名稱`就好了
```python=
# 使用random裡的shuffle和choice函式
from random import shuffle, choice

cards = [1, 2, 3, 4, 5]
shuffle(cards) # 洗牌
print(cards) # 輸出洗牌後的結果
print(choice(cards)) # 隨機選一張牌
```

`from 模組名稱 import *` 把所有東西匯入，呼叫時寫`函式名稱`就可以，但需要小心撞名
```python=
# 使用random裡的shuffle和choice函式
from random import *

cards = [1, 2, 3, 4, 5]
shuffle(cards) # 洗牌
print(cards) # 輸出洗牌後的結果
print(choice(cards)) # 隨機選一張牌
```

## 一些型態的功能
### 字串
<table>
    <tbody>
        <tr>
            <td>取字串中的某個字</td>
            <td>字串[索引值]</td>
        </tr>
        <tr>
            <td>連結字串</td>
            <td>字串 + 字串</td>
        </tr>
        <tr>
            <td>重複字串</td>
            <td>字串 * 整數</td>
        </tr>
    </tbody>
</table>

```python=
s = 'owo'
print(s + 'b')
print(s * 5)
# 輸出:
# owob
# owoowoowoowoowo
```

用for迴圈遍歷字串中的每一個字
```python=
message = "secret message"
for character in message:
    if character == 's':
        print('5', end='')
    else:
        print(character, end='')
# 輸出5ecret me55age
```

我知道沒人喜歡這個不過format真的好用qwqb
`字串.format()`做特殊格式設定
純粹填入變數:
```python=
s = '現在是{}{}點{}分'
time_of_day = '早上'
hour = 10
minute = 40
print(s.format(time_of_day, hour, minute))
# 輸出現在是早上10點40分
```

填入變數並做格式設定:
```python=
r = 1.61803
print("黃金比例是{:.3f}".format(r))
```

字串切割
<table>
    <tbody>
        <tr>
            <td>字串[開始:結束]</td>
        </tr>
        <tr>
            <td>字串[開始:結束:間隔]</td>
        </tr>
    </tbody>
</table>

```python=
s = "HackerSir"
print(s[0:6])
print(s[0:9:2])
# 輸出:
# Hacker
# HceSr
```

### 列表
<table>
    <tbody>
        <tr>
            <td>創建新的列表</td>
            <td>list() 或 []</td>
        </tr>
        <tr>
            <td>新增項目</td>
            <td>列表.append()</td>
        </tr>
        <tr>
            <td>刪除項目</td>
            <td>列表.remove()</td>
        </tr>
        <tr>
            <td>清除所有項目</td>
            <td>列表.clear()</td>
        </tr>
        <tr>
            <td>排序所有項目</td>
            <td>列表.sort()</td>
        </tr>
        <tr>
            <td>取最大值</td>
            <td>max(列表)</td>
        </tr>
        <tr>
            <td>取最小值</td>
            <td>min(列表)</td>
        </tr>
        <tr>
            <td>取總和</td>
            <td>sum(列表)</td>
        </tr>
    </tbody>
</table>

用for迴圈遍歷列表中的每個項目
```python=
scores = [31, 46, 24, 97, 74, 26, 83]
# 用for迴圈對每一個分數做調分
for i in range(len(scores)):
	# 開根號後乘10
	# 注意要對list裡的項目改值一定要用for i in range語法
	# for score in scores中是把scores裡的東西複製一份，
	# 沒辦法改動到scores的內容
	scores[i] = round(scores[i] ** 0.5 * 10)

print(scores)
scores.sort()
print(scores)
# 輸出:
# [56, 68, 49, 98, 86, 51, 91]
# [49, 51, 56, 68, 86, 91, 98]
```

### 字典
<table>
    <tbody>
        <tr>
            <td>創建新的字典</td>
            <td>dict() 或 {}</td>
        </tr>
        <tr>
            <td>新增項目</td>
            <td>字典[鍵] = 值 或 字典.update()</td>
        </tr>
        <tr>
            <td>刪除項目</td>
            <td>字典.pop()</td>
        </tr>
    </tbody>
</table>

用for迴圈遍歷字典中的每個項目
```python=
menu = {'咖啡': 50, '綠茶': 25, '開水': 0}
for drink, price in menu.items():
	print('飲料:', drink, '價格:', price)
# 輸出:
# 飲料: 咖啡 價格: 50
# 飲料: 綠茶 價格: 25
# 飲料: 開水 價格: 0
```
