---
# System prepended metadata

title: 基礎語法-1

---

---
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)

