# 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拿來比賽真的很虧!!! ![](https://i.imgur.com/YHp1Dug.jpg) 可愛的貓咪:arrow_heading_up: ## 寫你的第一行程式碼!! ```=python print("hello world!!") ``` 這個 :arrow_heading_up: 的用途就是讓你的程式顯示出hello world的字樣喔!!是不是超帥的!! [小試身手!](https://zerojudge.tw/ShowProblem?problemid=a001) >:::spoiler 為何要輸出hello world不輸出別的啊? > >大家學一個程式語言都會先讓他吐這串的 >這是工程師的浪漫懂不懂!!! >![](https://i.imgur.com/gcvpMoB.jpg) ## 資料型態 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? >笑死 >![](https://i.imgur.com/yNadWQO.png) >沒啦 字串的加法其實就只是把兩堆字串頭尾相接而已 >沒有什麼相加什麼的 >:::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) 那堆 看不懂正常 ![](https://i.imgur.com/EbVocNF.jpg) 下面有教學 :arrow_heading_down: >:::spoiler **邏輯閘** >邏輯閘是啥呢? >邏輯閘就是國中教的 :arrow_right: 且(and),或(or),非(not) >會跟什麼搭配呢? >會跟 真(True), 假(False)搭配 >那這些的邏輯都可以參考真值表! >![](https://i.imgur.com/BWxNFtb.png) >程式範例 :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還有別的嗎 >![](https://i.imgur.com/wifQRVF.jpg) >![](https://i.imgur.com/2yUsp5L.jpg) >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: >![](https://i.imgur.com/SOESOHq.jpg) >這就是依照上面的邏輯寫的! > >這邊是語法簡介 :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") >``` >![](https://i.imgur.com/tsZFBvL.jpg) [我的電腦快沒電啦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 > ``` > ![](https://i.imgur.com/4zN2Qv6.jpg) > > 那麼用人類的話會長這樣 > ```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)