# Python tutorial by.yoyolee49
## 小提示
下面的教學都會搭配一個小題目用來練習用
我們給的是zerojudge上的題目
所以要先辦個帳號喔(用google帳號就能辦ㄌ)
那如果你的程度夠好可以在我們給的網站上找更難的題目做!
## 介紹python是啥
==python==(n.)
/ˈpʌɪθ(ə)n/
:snake:
a large heavy-bodied non-venomous snake occurring throughout the Old World tropics, killing prey by constriction and asphyxiation.
出現於亞馬遜從林裡的一種蟒蛇
## 介紹程式語言python是啥
python 是程式語言的一種
出名於其函式庫,真的是超多模組能用的,
又因為最近AI新起所以變成大家都想學的東西!!
### 與c++的差別
c++和python比起來難學很多,因為處理的東西比python多
可是相對地跑起來比python==快很多==
所以python拿來比賽真的很虧!!!

可愛的貓咪:arrow_heading_up:
## 寫你的第一行程式碼!!
```=python
print("hello world!!")
```
這個 :arrow_heading_up: 的用途就是讓你的程式顯示出hello world的字樣喔!!是不是超帥的!!
[小試身手!](https://zerojudge.tw/ShowProblem?problemid=a001)
>:::spoiler 為何要輸出hello world不輸出別的啊?
>
>大家學一個程式語言都會先讓他吐這串的
>這是工程師的浪漫懂不懂!!!
>
## 資料型態
python 的資料型態 ==不用宣告== !!!!!!
想知道宣告資料型態是啥 去學C++
:hamburger: :sandwich: :pizza: 以下為資料型態們
>1/. 數值型態:`int , float, bool`
>2/. 字串型態:`str, chr`
>3/. 容器型態:`list, dict, tuple`
### 宣告方法 :arrow_double_down:
"=" 是賦質 不懂看下面
#### 數值型態
>:::spoiler **整數** -- interger, int
>宣告變數x為1
>整數就是==整數==,不是小數,不是根號,更不是虛數
>```python=
>x = 1 #不用像c++一樣 ==> int a = 1
>```
>:::spoiler **浮點數** -- float
>宣告x為 3.14159265359
>浮點數就是==小數==
>```python=
>x = 3.14159265359 #就等於就好
>```
>:::spoiler **布林值** -- bool
>布林值有分為 ==True== 和 ==False==
>怎麼用會在後面的**運算**講解
>```python=
>x = True
>y = False
>```
#### 字串型態
>:::spoiler **字元** -- character, chr
>一個英文字母就是一個字元
>
>python處理英文字元是參照ascii code
>其他國語言就是用unicode啦~~
>ps.python的字元和字串基本上是沒人在管ㄉ
>
>宣告x為 'y'
>```python=
>x = 'y' #完全不用 #用 '' 不是 "" 喔
>```
>特殊字元: ==換行符號 ‘\n’==
>:::spoiler **字串** -- string, str
>宣告x為"yoyosohandsome"
>```python=
>x = "yoyosohandsome" #超方便
>```
#### 容器型態
>:::spoiler **陣列** -- list
>宣告 a 為 [0,1,2,3] 的陣列
>```python=
>a = [0,1,2,3] #c才需要宣告大小
>```
>然後想要取出 a 裡面的第一個和第二個資料可以這樣寫
>``` = python
>a = [0,1,2,3]
>print("the first element in a is : ", a[0], "\nand the second is : ", a[1], sep = '')
>```
>沒錯! ==想拿到第一個資料是[0]不是[1]喔== 超級重要 :exclamation:
>還有! python還可以從後面開始抓資料
>``` = python
>a = [0,1,2,3]
>print("the last element in a is : ", a[-1], sep = '')
>```
>沒錯!就是用 -1 喔
>-2, -3 ...都可以
>::: info
>a[數字] 那個數字不可以超過 a 的大小喔
>:::
>:::spoiler **集合(吧)** -- tuple
>你一定很好奇tuple是啥對吧!
>其實tuple和list差不多
>只是list是==可變動的==(mutable)
>而tuple是==不可變動的==(immutable)
>不可變動就是裡頭的資料不能變動,無論是長度或內容呦!
>```python=
>a = (1,2,3) #想動這裡面的東西會吐error給你
>```
>:::spoiler **字典** -- dictionary, dict
>宣告 a 為 {'a':1, 'b':2, 'c':3} 的字典
>
>字典就是會有一個 key 對上一個 value,並且可以利用 key 來得到 value
>'a' :arrow_right: key
> 1 :arrow_right: value
>所以就不用去找你的東西的位置在第幾個ㄌ!
>可以直接使用你的key就找到那個value (在做查表的東西的時候很好用)
>eg. ascii碼的題目,或身分證字號的題目
>```python=
>a = {'a':1, 'b':2, 'c':3}
>print(a['a'])
>```
## 基本運算和字串處理
這邊教的就是電腦的加減乘除
還有字串的處理
是一定要熟悉的東西喔!!
### 基本運算! :arrow_double_down:
>:::spoiler **加法**
>2.讓a和b相加
>```python=
>a=1
>b=2
>print(a+b)
>```
>2.==一個會讓數學家爆氣的東西==
>可是要記得 =="="== 是宣告的意思
>不是等於!!! :hamster:
>這邊是讓a加1 #有兩種寫法
>```python=
>a=1
>a=a+1 #比較好理解
>print(a)
>```
>or
>```python=
>a=1
>a+=1
>print(a) #比較常用
>```
>[誒幹是穿山甲誒](https://zerojudge.tw/ShowProblem?problemid=a002)
>:::spoiler **減法**
>1.讓a和b相減
>```python=
>a=1
>b=2
>print(a-b)
>```
>2.這邊是讓a減1 #跟加法基本一樣
>```python=
>a=1
>a=a-1 #比較好理解
>print(a)
>```
>or
>```python=
>a=1
>a-=1
>print(a) #可是瑞凡 用了這個就回不去了 沒關係就用這個吧!
>```
>:::spoiler **乘法**
>讓a和b相乘 :muscle:
>``` python=
>a=3
>b=2
>print(a*b)
>```
>這邊是讓a乘2 #有兩種寫法
>``` python=
>a=1
>a=a*2 #比較好理解
>print(a)
>```
>or
>``` python=
>a=1
>a*=2
>print(a) #比較常用
>```
>:::spoiler **除法** -- 最重要
>讓a和b相除
>除法有分多種 1.取餘數 2.取商數 3.除好除滿(就除盡啦)
>``` = python
>a = 13
>b = 4
>print(a/b) #除好除滿
>print(a//b)#取商數
>print(a%b) #取餘數(不是百分比)
>```
>==也有/=, %=, //=的用法==
>[0除以0是?](https://zerojudge.tw/ShowProblem?problemid=a003)
[筍克里斯多夫安東尼奧班尼迪克希爾為特歐薩絲](https://zerojudge.tw/ShowProblem?problemid=a017)
[原影片](https://www.youtube.com/watch?v=1Nq0PA1KTQQ)
給我回家看 :arrow_heading_up: 不准上課看!!!
### 字串處理QQ :arrow_double_down:
>:::spoiler 字串的加法
>下面這串會顯示什麼呢?
>```=python
>a = '1'
>b = '2'
>print(a+b) #會顯示3嗎??
>```
>:::spoiler **上面的答案**
>阿是不會自己跑跑看膩 還想看答案
>蛤你說你已經打好了發現你被騙了是12?
>笑死
>
>沒啦 字串的加法其實就只是把兩堆字串頭尾相接而已
>沒有什麼相加什麼的
>:::spoiler **字元轉ascii** --解題會用到
>我把轉回來也在這邊教好ㄌ :laughing:
>``` =python
>a = 'a'
>b = 97
>a = ord(a) #字元轉ascii
>b = chr(b) #ascii轉字元
>print(a,b)
>```
>
>[幫幫dora 把你媽媽信用卡上面的幾個號碼念出來喔](https://zerojudge.tw/ShowProblem?problemid=a065)
>ps. 我找不到那張梗圖QQ
## 邏輯判斷
在程式語言中very important 的一環
初始的程式語言就是由一堆莫名其妙的邏輯閘組合而成
這邊會教到if else, (and, or, not) 那堆
看不懂正常

下面有教學 :arrow_heading_down:
>:::spoiler **邏輯閘**
>邏輯閘是啥呢?
>邏輯閘就是國中教的 :arrow_right: 且(and),或(or),非(not)
>會跟什麼搭配呢?
>會跟 真(True), 假(False)搭配
>那這些的邏輯都可以參考真值表!
>
>程式範例 :arrow_heading_down:
>```=python
>true_and_false = True and False
>true_or_false = True or False
>not_true = not True
>print("true_and_false = ", true_and_false,"\n" ,"true_or_false = ", true_or_false, "not true = ", not_true, sep='')
>```
>:::spoiler 除了true 和 false還有別的嗎
>
>
>python裡面有個叫truethy 和falsy的鬼東西(我記得是這樣叫
>後面復贈介紹!
>ps.謝謝it幫幫忙上的大神 :arrow_right: [truthy and falsy](https://ithelp.ithome.com.tw/articles/10228227)
>:::spoiler **關係運算子**
>* a == b :arrow_left: 如果a 和 b==相同==的話會回傳true
>* a != b :arrow_left: 如果a 和 b==不相同==的話會回傳true
>* a >= b :arrow_left: 如果a ==大於等於==b 回傳true
>* a > b :arrow_left: 如果a ==大於==b 回傳true
> * 小於也長上面那樣
>
>ps. 看完if-else判斷應該可以更懂
>
>:::spoiler **if-else判斷式**
>這邊介紹一下if else的用途
>『如果我肚子餓,就要吃漢堡, 如果不餓,就喝水』
>如果是程式的話就會長這樣 :arrow_heading_down:
>```=python
>if 肚子餓:
> 吃漢堡
>elif 不餓:
> 喝水
>```
>下面是一張工程師梗圖 :arrow_heading_down:
>
>這就是依照上面的邏輯寫的!
>
>這邊是語法簡介 :arrow_double_down:
>```=python
>if a == 1:
> print("a=1")
>elif a == 2:
> print("a=2")
>elif a == 3:
> print("a==3")
>else:
> print("a != 1 and a != 2 and a != 3")
>```
>if-else總共有三個東西 if, elif, else
>剛開始都是==先從if開始判斷== ==接著判斷elif==, 直到所有ㄉelif判斷完, ==才判斷else==
>如果if(包含elif) 後面的東西是 ==truthy== 的話就會執行下面
>### 巢狀if-else
>if裡面還可以再包一個if的判斷式 :arrow_heading_down:
>```=python
>jason = "gay"
>if jason == "gay":
> if not (jason == "gay"):
> print("That's not real")
> print("yeah, he is pretty gay")
>```
>
[我的電腦快沒電啦QQ](https://zerojudge.tw/ShowProblem?problemid=a148)
## 補充 - how to input :arrow_double_down:
input() :arrow_left: 這個函式就是輸入用
他的會回傳一個 ==str==(無論是輸入數字或小數,都是回傳str)
然後他一次讀一行(遇到\n停下)
然後input( :dog: ) 這個函式
狗狗的位置可以放str進去
那個str會顯示給使用者看到 ~~(就是叫那群傻逼不要幹嘛用的)~~
```=python
jason_de_height = input()
print(jason_de_height) #會回傳你剛剛打的東西,以str型態
```
那如果我們想讓他變成 int 然後算社長的BMI之類的呢
我們就把它輸入後變成 int 吧!
```=python
jason_de_height = int(input())
print(jason_de_height) #會回傳你剛剛打的東西,以int型態
```
## 迴圈 :arrow_double_down:
python裡面有兩種迴圈!!
for迴圈 and while迴圈!!
今天先教 while
下次再教 for :laughing: :laughing:
那你應該好奇迴圈是在幹嘛的吧 :grey_question:
迴圈和判斷邏輯一樣在程式語言裡面超重要
因為電腦勝於人類的地方正是其速度
能夠比人類算東西算快很多
所以迴圈正可以幫人類去解決那些繁複需要大量重複的計算~~
喔對迴圈還能執行迭代,又名把list的元素一個一個取出,這也是一個很important的功能
> :::spoiler while迴圈
> 首先語法!
> 我想要讓while迴圈輸出三次“華麗的一擊”可以這樣寫 :arrow_heading_down:
>
> ```=python
> a = 0
> while a < 3:
> print("華麗的一擊")
> a += 1
> ```
> 
>
> 那麼用人類的話會長這樣
> ```python
> while 判斷式:
> 動作
> ```
> 如果會在迴圈的開頭都判斷一次
> 如果過了話 就執行動作 然後再判斷一次看要不要跑下一次
> 其實跟if還蠻像的 只是if只能跑一次 而且if有elif
> :::spoiler **迴圈用特殊指令** - 打10顆星
> 1.break :arrow_right: 就是立馬==跳出迴圈==
> ```=python
> a = 0
> while a != 5:
> if a == 3:
> print("break a at 3")
> break
> print("now, a is ", a)
> a += 1
> ```
> 2.continue :arrow_right: ==馬上跑下一圈==
> ```=python
> a = 0
> while a != 5:
> if a == 3:
> continue
> print("now, a is ", a)
> a += 1
> ```
> 3.pass :arrow_right: 這是個很謎的東西 能==不做事==(?)
> ```=python
> a = 0
> while a != 5:
> if a == 3:
> pass
> print("now, a is ", a)
> a += 1
> ```
> ps. pass的用法是 因為python的==執行==那塊不能是空的
> 所以就設計了pass (我猜啦)
[不要管裡面的for](https://zerojudge.tw/ShowProblem?problemid=a244)