<!-- 自訂CSS設定 -->
<style>
.comment {
font-size:70%;
color: rgba( 200, 200, 200, 0.9 );
}
.tag {
padding: .4em;
padding-bottom: .3em;
margin: 0;
font-size: 95%;
font-family: Consolas;
background-color: rgba( 200, 200, 200, .3 );
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
}
.block {
width:auto;
padding: .05em;
font-family: Consolas;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
background: rgba(255, 255, 255, .1);
display:block;
}
</style>
<!-- 內建CSS設定 -->
<style>
/* 單行codeblock */
code:not([class$="hljs"]){
background: rgba(255, 255, 255, .1);
padding: 0px;
margin: 2px;
font-size: 85%;
border-radius: 5px;
}
code:not([class$="hljs"]):hover{
background: rgba(255, 255, 255, .3);
}
/* 單行codeblock (瀏覽模式) */
.markdown-body code, .markdown-body tt{
padding: 0px;
padding-top: .2em;
padding-bottom: .2em;
font-size: 85%;
background-color: rgba( 0, 0, 0, .04 );
border-radius: 3px;
}
</style>
# <span class="block"> Lesson 1 </span>
----
**:pencil2::** 嘗試看看吧!
**:bulb::** 小技巧
**:rocket::** 一些進階觀念以及使用方法,包含很多Python核心的「魔法」以致於有點難理解 (可以直接忽略這部分)
---
## Python 小知識
----
:::spoiler Q: 為什麼叫Python? <span class="hint">(點我show答案)</span>
A: 因為作者很喜歡[Monty Python](https://zh.wikipedia.org/wiki/%E8%92%99%E6%8F%90%C2%B7%E6%B4%BE%E6%A3%AE)

:::
----
:::spoiler Q: 學Python2 還是 Python3? <span class="hint">(點我show答案)</span>
A: 如果沒有學2的理由就學3 ouo
:::
----
:::spoiler Q: Python能做甚麼? <span class="hint">(點我show答案)</span>
A:
- 網路爬蟲與擷取資訊(beautifulsoup)
- 數據分析與視覺化(matplotlib)
- 機器學習與人工智慧(sklearn)
- 網站開發(flask)
- 遊戲開發(pygame)
- 工具指令(os)
:::
---
## 輸出
----
### print()
<span class="block">print(<字串>)
將參數字串(使用「"」或「'」包圍起來的文字)顯示到螢幕上</span>
``` python
print('Hello World!')
# Hello World!
```
----
試著輸出
"Everything in "Python" is an object~"
----
出事囉~
``` python
print("Everything in "Python" is an object")
```
``` yaml
File "<ipython-input-1-f813ba328c1e>", line 1
print("Everything in "Python" is an object")
^
SyntaxError: invalid syntax
```
----
**解決方法 :** 加入「\」
``` python
print("Everything in \"Python\" is an object")
# Everything in "Python" is object~
```
----
:bulb: 可以使用單引號包圍字串 做出區隔
```python
print('Everything in "Python" is an object')
```
----
### 跳脫字元「\」
讓後面的字元**跳脫**原來的意思
----
幾個例子
- \\\ 反斜線
- \\' 單引號
- \\" 雙引號
- \\n 換行
- \\t tab
- \\b backspace
---
## Data Type
----
### type()
> `type(<物件>)`
回傳輸入物件的**類別**
``` python
type('Hello World')
# str
type(9857)
# int
type(True)
# bool
print(type(8129))
# <class 'int'>
```
----
不同類別不能直接做運算
``` python
print(1 + 1)
# 2
print('1' + 1)
# TypeError: can only concatenate str (not "int") to str
```
----
### Python內建資料(物件)型態
----
| 資料型態 | 中文名 | 範例 |
|:- |:- | :- |
|str|字串|`"字串"` `'8129'`|
|
|bool|布林|`True` `False`|
|int|整數|`1` `8129`|
|float|浮點數|`1.0` `0.8129`|
|
|list|串列| `[8, 1, 2, 9]`|
|tuple|元組| `(8, 1, 2, 9)` |
|dict|字典|`{"team" : 8129}`
|set|集合| `{8, 1, 2, 9}` |
----
以後會有更詳細的介紹
目前只要記住**字串**、**布林**和**整數**即可
----
:rocket: 隱式轉換
可藉由多載運算子讓兩個不同的類別可以直接運算
---
## Variable 變數
----
**合法的變數名稱**
可包含`數字` ,`英文字符`,`底線(_)`
並以英文字符或底線開頭
事實上Python可以以中文作為變數名稱
但**相當不建議**
----
編程時常會用底線和大小寫的組合區分不同類型的名稱
| 類型 | 舉例 |
|- |- |
|常數|`SNAKE_CASE`|
|{變數\|屬性}<br/>{函式\|方法}|`lowerCamelCase` `snake_case`<br/><span class="comment">(兩個都有人用 但同個程式使用統一的命名方式)</span>|
|類別|`UpperCamelCase`|
---
## Operators 算子
----
### 運算子
| 運算子 | 使用 | 輸出 |
|:- |:- | :- |
|加 (`+`)|`5 + 2`| `7` |
|減 (-)|`5 - 2`| `3` |
|整除 (//)|`5 // 2`| `2` |
|除 (/)|`5 / 2`| `2.5` |
|乘 (*)|`5 * 2`| `10` |
|平方 (**)|`5 ** 2`| `25` |
|
|根號|`25 ** (1/2)`| `5` |
----
### 運算子的優先順序
| 順序 | 算子 | 中文 |
|:- |:- | :- |
|1|`**`| 次方 |
|2|`*、/、%、//`| 乘、除、餘數、整數除法|
|3|`+、-`| 加法、減法 |
|4|`>>、<<`| 右移、左移(位元運算子) |
|5|`&`| 與(位元運算子) |
<span class="comment">
其他就自己google咯~
</span>
----
### in-place operation
```python
a = 0
a += 1
# 相當於 a = a + 1
print(a)
# 1
# 加減乘除都可以用此方法
```
----
### 比較算子
| 算子 | 中文
|:- | :- |
|`>、<`| 大於、小於 |
|`>=、<=`| 大於等於、小於等於|
|`==`| 等於 |
|`!=`| 不等於 |
回傳一個**布林值**
----
## 布林邏輯
----
|運算子|接收值|真值|輸出|
|:- | :- |:-|-|
|and|2|2 |True|
|or |2|>0|True|
|any|n|n |True|
|all|n|>0|True|
`not` 將結果翻轉
`not True` -> `False`
`not False` -> `True`
----
這裡有一個需要注意的地方:
邏輯運算子的優先順序為
not -> and -> or
也就是說
False and False or True and
----
```python
print(True and True)
# True
print(False and True or True)
print(any(False, True, False, False))
# True
```
:pencil2: 自己試試看吧!
----
:rocket: `+=` 的含意
Pyhon藉由`__iadd__`控制「`+=`」的行為
在物件沒有`__iadd__`方法時會轉而調用`__add__`
這時候的+=變成一種**語法糖**
---
## 流程控制
----
### 條件式
----
### if
> `if <布林值> :`
**如果**布林值為真(True) 執行區塊內的程式碼
別忘記冒號和縮排哦
```python=
# a > b 會回傳一個布林值
if a > b:
print('a大於b')
```
----
### elif
> `elif <布林值> :`
**否則如果**
當if沒有執行 就會進到`elif`區塊
```python=3
elif a < b:
print('a小於b')
```
也可以連用多個elif哦
----
### else
**否則**
當所有的條件式都未成立
進入`else`區塊
```python=5
else:
print('a等於b')
```
----
:rocket: 三元運算子
`result = a if <布林值> else b`
也可以用 `(a,b)[<布林值>]` 的方式實現
原理:
int(True) -> 1
int(False) -> 0
將布林值轉換為1和0 並以此取值
雖然比較短但**可讀性較差**
---
### 迴圈
----
while
----
`while <布林值> :`
用於多次重複一段代碼
直到<布林值>為False
while True 無窮迴圈
break
跳出一段迴圈
continue
跳回循環頂部
停止目前的運算 從頭運行迴圈內的代碼
----
:pencil2: Zerojudge a024
```python=
a, b = input().split()
a = int(a)
b = int(b)
# your code
```
----
```python=5
while b != 0:
a, b = b, a%b
# 等同於:
# c = a%b
# a = b
# b = c
print(a)
```
這裡使用到了**輾轉相除法**的技巧
---
{"metaMigratedAt":"2023-06-16T10:40:36.547Z","metaMigratedFrom":"YAML","title":"Lesson 1","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"parallaxBackgroundImage\":\"https://cdn.discordapp.com/attachments/887196342135451652/889752537513750588/image0.png\",\"parallaxBackgroundSize\":\"2100px 1000px\",\"defaultTiming\":120}","contributors":"[{\"id\":\"35809032-c270-45a6-adab-a7e7a63da25b\",\"add\":11917,\"del\":7923},{\"id\":\"a41c05df-55bf-44dc-9b5f-6e53858b0a77\",\"add\":3065,\"del\":743}]","description":":pencil2:: 嘗試看看吧!:bulb:: 小技巧:rocket:: 一些進階觀念以及使用方法,包含很多Python核心的「魔法」以致於有點難理解 (可以直接忽略這部分)"}