--- title: '基礎語法(hello world ~ 運算子)' disqus: hackmd --- 第一節社課 === ## 前言 第一次編講義,看不懂或寫爛請多多包涵qwq ## 如何開始自己的第一次Python 雖然很多人可能已經會了,但還是講一下避免有人不知道 ### 1.找到python在哪 假如你是在復旦的電腦教室,在搜尋欄打`idle`應該就找的到了 ![image](https://hackmd.io/_uploads/HJsk_OXMee.png) 依照版本不同可能會有不同的圖示 ### 2.打開你的第一個檔案 點擊左上角的`file` ![image](https://hackmd.io/_uploads/B1xUudQGle.png) 點擊最上面的的`New File` ![image](https://hackmd.io/_uploads/B1Z_uO7fxl.png) 這樣子就完成寫python需要的前置作業了,接下來就開始實際操作吧! --- # Hello, world # 學程式的第一步當然是先試著輸出點簡單的東西 ```python= print("Hello, world!") ``` `print()` 就是 Python 的輸出指令,字串要用引號包起來(單/雙引號都行)。 你想印什麼都可以塞進去,甚至可以直接印數字: ```python= print(13579) ``` :::warning :warning:注意這裡因為沒加符號電腦是判成單純數字。 ::: ```python= print("123456") ``` 今天這樣寫的話裡面的123456會被判斷為"字串"。 :::info :::spoiler 為甚麼大家第一個程式都寫`Hello, world`呢 ? :information_source: 可以參考[維基百科](https://zh.wikipedia.org/zh-tw/Hello_World) 簡單來說就是很久以前有人這樣寫,後面的人覺得很酷把他寫到自己的C教學書裡,就一路傳承到今天了 ::: ## 輸入 input() ## 要讓使用者輸入東西,用 `input()`。 這裡需要注意,直接做輸入電腦一律判成字串 ```python= your_text = input() print(your_text) # 你輸入什麼就輸出什麼 ``` 如果希望電腦判斷輸入的是數字或其他資料型態,可以這樣改 ```python= your_num = int(input()) ``` 通常題目會要你一次輸入好幾個字串,可以這樣寫: ```python= x, y = input().split() ``` `.split()`是你希望以什麼來分段,不填入的話預設是空格。 例如: ```python= x, y = input().split(=) #輸入1+2=3 => x:1+2, y:3 (str) ``` :::warning :warning: 這些資料型態會是字串(str)。 ::: 如果你要整數,一樣要再包一層 int: ```python= x, y = map(int, input().split()) ``` 如果看不懂也沒關係,看到題目多練幾次熟起來自然也可以學會。 :::info :::spoiler 至於資料型態是什麼? 講義的後面有,想要先瞭解的可以先去看看。 連結:[資料型態](https://hackmd.io/h4MAOwqyTpmrBxnq0xyP6A?view#%E8%B3%87%E6%96%99%E5%9E%8B%E6%85%8B) ::: ## 多行輸入 有時候題目會給你很多行輸入,一直到沒有資料為止(例如 Judge 平台) ```python= while True: try: s = input() print(s) except EOFError: break ``` 這個寫法很常見,可以先記下來,之後會一直用到。 :::info :::spoiler 至於具體來說是什麼意思... ==while True:== 的意思是永遠都會重複執行下面的程式碼,直到程式裡面有 ==break== 跳出迴圈,或使用者手動中止程式(例如 Ctrl + C)。 ==try:== 表示嘗試執行下面的程式碼。 ==except EOFError:== 表示當發生EOF(End Of File)錯誤時,執行底下的==break==。 :::success 這邊看不懂沒關係,之後也會了解到。 ::: --- # 資料型態 # ## int(整數) ## 最基本的資料型態,只能儲存數字且不接受小數點。 ```python= x = 5 y = 7 print(x + y) # 12 ``` ## float(小數/浮點數) ## 有小數點就會自動是 float 型態: ```python= pi = 3.1415926 print(type(pi)) # <class 'float'> ``` ## str(字串) ## 所有用引號包起來的都是字串。 字串有很多內建功能,也很容易操作。 ```python= s = "konpeko" print(s[0]) # k print(s[-1]) # o (由後往前數) print(s[1:4]) # onp ``` :::warning 記得str並不是從[1]開始,而是從[0],也就是前閉後開。 ::: :::info :::spoiler 前閉後開是什麼意思? ```python= text[start:end] ``` start:從這個位置開始。以上面的例子來說,就是s[1]的位置是被包含、會輸出的。 end:到這個位置前一格結束。以上面的例子來說,就是s[4]的位置是不會輸出的。 ==請注意,這裡的s[1]是`o`不是`k`,s[4]是`e`不是`p`== ::: #### 把字串加起來 你可以直接「`+`」把字串連在一起,這是 Python 很厲害的地方。 ```python= s1 = "12345" s2 = "6789" print(s1 + s2) # 123456789 ``` #### 把字串乘上數字 也可以用「`*`」連接2個字串。 ```python= s1 = "12345" print(s1 * 3) # 123451234512345 ``` 如果你想讓中間有空格,或是任何想要的字串,可以自己加: ```python= s1 = "Pekora" s2 = "cute" print(s1 + " " + s2) # Pekora cute ``` ```python= s1 = "Pekora" s2 = "cute" print(s1 + " is " + s2) # Pekora is cute ``` 或者直接 print 多個變數,Python 會自動幫你加空格: ```python= s1 = "MAIMAI" s2 = "DX" print(s1, s2) # MAIMAI DX ``` --- 格式化字串(f-string)可以在輸出的時候讓程式更好讀懂 ```python= name = "pekora" y = 3 print(f"{name} 是 {y} 期生成員") # pekora 是 3 期生成員 ``` 還有一些酷酷的內建函式可以用: ```python= s = "TEmPTaTiON" print(s.lower()) # temptation 全部換成小寫 print(s.upper()) # TEMPTATION 全部換成大寫 print(s.count('T')) # 3 找出有幾個你指定的字元 print(len(s)) # 10 s有多長 ``` ## bool(布林值) ## bool 只有兩個值:`True(真)、False(假)` :::warning :warning: 它們都是關鍵字,第一個字母要大寫,不能寫成 true 或 false(那樣會CE)。 ::: 他們被用來表示判斷的結果: ```python= a = True b = False print(a) # True print(type(a)) # <class 'bool'> print(5 > 3) # True print(5 == 10) # False ``` 當然也有些神奇的用法: ```python= bool(0) # False bool(1) # True bool("") # False(空字串) bool("Hello World") # True(非空字串) bool([]) # False(空陣列) bool([0, 1]) # True(非空陣列) ``` 這可以讓他們變成布林值的型態。 --- # 條件判斷 # ## if ## 當我們想要判斷一件事情是否成立,就需要用到條件判斷了~ `if`、`elif`和`else`是最基本的條件判斷式。 ```python= if 1 + 4 == 3: print('1 + 4 = 3') #1 + 4 不等於 3 所以不會輸出 elif 1 + 7 == 8: print('1 + 7 = 8') #1 + 7 等於 8 而且面的if或elif都不成立 所以會輸出 else: print('my math is so bad qwq') #已經有if或elif成立則不會跑進來 ``` 由此可知`if`代表著條件判斷的開始,`elif`代表中間的歷程, 而`else`代表前面的`if`和`elif`都不成立而執行的結果。 --- # 運算子 # ## 算術運算子 ## 正如我們熟知的數學一樣: - `+` 加 - `-` 減 - `*` 乘 - `/` 除 ```python= print(7 + 2) #9 print(7 - 2) #5 print(7 * 2) #14 print(7 / 2) #3.5 ``` python也有很多一般數學不會看到的運算子,像是: - `//` 整除 - `%` 取餘數 - `**` 次方 ```python= print(7 // 2) # 3 print(7 % 2) # 1 print(2 ** 5) # 32 ``` ## 比較運算子 ## 比較運算子最常用來和前面教的"條件判斷"配合,他們用來表示一個條件是否成立。 常見的有: - `==` 等於 - `!=` 不等於 - `>` 大於 - `<` 小於 - `>=` 大於等於 - `<=` 小於等於 ```python= print(1 == 1) #True print(3 != 1) #True print(7 > 1) #True print(0 < 1) #True print(4 >= 1) #True print(-2 <= 1) #True ``` ## 邏輯運算子 ## 用來表示"且" "或" "非"的運算子,分別是: - `and` 兩者都要成立 - `or` 有一個成立就可以 - `not` 後面的判斷為 False 才會是 True ```python= if 1 == 1 and 1 != 27: #1 is true print('1 is true') if 1 == 2 or 1 != 27: #2 is true print('2 is true') if not 1 != 27: #3不會輸出因為1 != 27為 true print('3 is true') ``` ## 屬於運算子 表示b中是否有a - `a in b` b中有a則True,否則False - `a not in b` b中沒有a則True,否則False ```python= s1 = 'peko is cute' s2 = 'cute' if s2 in s1: print(f"As we all know, {s1}") #我們都知道s1中有s2的cute -> As we all know, peko is cute else: print(f"{s2} is not in {s1}") ``` --- # 作業題目 基礎題:[a001](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a001)、[a014](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a014)、[a021](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a021) 進階題:[b172](http://203.64.191.163/ShowProblem?problemid=b172)