<style>
.new {
color: red;
font-weight: bold;
}
</style>
# Python Basic
###### tags: `presentation` `sprout`
資訊之芽 熊育霆 2022/3/6
---
## 在開始之前
----
### 肌肉記憶 Muscle Memory
等等中間會不時穿插一些練習時間
把每個範例在你的電腦上照著打一遍,善用你的肌肉記憶把 python 的語法記熟
(實作比抄筆記還要有用許多)
----
### 注意事項
我會假設所有學員以前從來沒有接觸過程式語言
----
如果你有學過其他程式語言,這對你來說可能十分簡單(很多概念是重複或者相同的)
----
你可以在不影響課堂的狀況下做其他與程式學習相關的事情,但請先確定你已經掌握了我今天要講的大部分內容
----
Questions?
---
## Objectives
你在這一個小時會學會:
----
學會這個
```python
print("Hello, World!")
```
----
學會這個
```python
name = input()
print("Hello,", name)
```
----
學會一卡車的程式概念
----
學會一些 `print` 的花式用法
```python=
print("早上好中国", "现在我有冰七令", "我很喜欢冰七令")
print("早上好中国", "现在我有冰七令", "我很喜欢冰七令", sep="\n")
print("早上好中国", "现在我有冰七令", "我很喜欢冰七令", sep="~")
print("早上好中国", "现在我有冰七令", "我很喜欢冰七令", end="~~~")
print("早上好中国", "现在我有冰七令", "我很喜欢冰七令", sep="~", end="~~~")
```
----
學會資料型別使用 `type`
```python=
type("1")
type(1)
type(1.0)
```
----
學會加減乘除
```python=
x, y = 12, 5
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x // y)
print(x % y)
print(x ** y)
print(-x)
print(+x)
```
----
了解程式碼如何運行
```python=
x, y = 12, 5
# 1
temp = x
x = y
y = temp
# 2
x, y = y, x
```
----
也許可以看懂這個
<!-- ![](https://i.imgur.com/yuEGCYg.jpg) -->
<img src="https://i.imgur.com/yuEGCYg.jpg" alt="drawing" width="350"/>
Source: [here](https://www.facebook.com/JinShanSt/posts/450044196742803)
----
Questions?
---
## Hello, World!
----
語法:
```python
print("Hello, World!")
```
----
```python
print("Hello, World!")
```
* `print(x)`: 輸出 / 打印 / output `x`
* `"Hello, World!"`: 內容為 "Hello, World!" 的<span class="new">字串 (string)</span>
字串是什麼呢?你可以先暫時把字串當成「以引號包起來的一段文字」。
----
也可以把 "Hello, World!" 替換成其他字串
```python=
print("Never gonna give you up")
print("Buenos días, mucho gusto")
print("早上好中国")
print("一生懸命勉強すればきっと合格します。")
```
----
如果把 `print` 拼錯,電腦會告訴你有錯誤
```python=
orint("Hello, World!")
```
----
![](https://i.imgur.com/gPjWy9d.png)
----
所以...現在是練習時間
----
### 練習時間0
用 `print` 輸出自己的名字
```python
print("熊育霆") # example
```
----
### 練習時間1
[neoj 3000](https://neoj.sprout.tw/problem/3000/)
----
Questions?
---
## 程式碼的執行順序
----
你可以將程式碼理解成「一連串由電腦執行的指令」
----
當然,程式語言越是符合人類閱讀習慣,對程式設計師來說就越是容易編寫與理解
----
所以...我們閱讀 python 程式碼時是從第一行讀到最後一行,那電腦執行 python 程式碼時應該如何執行?
* (1) 從第一行執行到最後一行
* (2) 從最後一行倒過來執行到第一行
* (3) 唐鳳會控制你的電腦
----
答案:(1)
----
Questions?
---
## 註解 (comments)
----
註解是什麼?
----
我們先來看看[維基百科](https://en.wikipedia.org/wiki/Comment_(computer_programming))怎麼說
In computer programming, a comment is a programmer-readable explanation or annotation in the source code of a computer program. They are added with the purpose of making the source code easier for humans to understand, and are generally ignored by compilers and interpreters. The syntax of comments in various programming languages varies considerably.
----
這是中文
在電腦語言中,註解是電腦語言的一個重要組成部分,用於在原始碼中解釋代碼的功用,可以增強程式的可讀性,可維護性,或者用於在原始碼中處理不需執行的代碼段,來除錯程式的功能執行。
----
如果你還是覺得太長
1. **解釋程式碼的功用**
2. **增強程式的可讀性**
3. 增強程式的可維護性
4. 處理不需執行的代碼段
----
廢話這麼多不如直接看例子吧
----
```python=
print("Hello, World!")
# 電腦會跳過這行
print("Hi mom") # 嗨,媽媽,這些中文字也不會被執行
'''
這幾行也
不會被
執行
'''
print("1 + 1 =", 1 + 1) # 1 + 1 = 2
```
----
#### 單行註解
每一行的 `#` 之後的文字都會被電腦忽略
```python=
print("Hello, World!")
# 電腦會跳過這行
print("Hi mom") # 嗨,媽媽,這些中文字也不會被執行
```
----
#### 多行註解
用 `"""` 包起來的程式區塊會被電腦忽略
```python=
print("Hi mom")
"""
這幾行也
不會被
執行
"""
print("1 + 1 =", 1 + 1)
```
----
#### Vscode 快捷鍵小補帖
`Ctrl` + `/`: 把選取的程式碼註解掉
----
Questions?
---
## 輸出 output
----
### 什麼是[輸出](https://dict.revised.moe.edu.tw/dictView.jsp?ID=133047&q=1&word=%E8%BC%B8%E5%87%BA)
電腦資料、信號的發出輸送。
Any information processed by and sent out from a computer or other electronic device is considered output.
----
想一想:由上一頁的定義,你覺得有哪些東西算是輸出 / 輸出裝置?
----
* 圖像 / 電腦螢幕
* 文字 / 列印機
* 音訊 / 喇叭
* ...
----
最簡單的輸出:將電腦文字打印到螢幕上
----
Python 中的 `print` 函式很好地幫我們處理好了這件事情
----
相對於輸出的概念為「輸入」,後面會再細講。
----
Question?
---
## `print` 的花式用法
這裡的東西不用硬逼自己全部記起來,需要用到時再回來翻就好,多用幾次自然就記起來了
----
### 名詞介紹
為了方便大家理解,這裡先非常不嚴謹地介紹兩個名詞
* 函數 (function):形式如 `func(arg1, arg2, ...)` 的東西
* 參數 (parameter):上一行括號內的 `arg1`, `arg2`
幾周以後的講師會細講這些東西
----
給有程式語言基礎的同學:
我知道參數和引數不一樣,但為了避免混淆先統一叫參數 sorry
----
### sep
----
`print` 可以吃多個參數
```python=
print("Hello,", "it's me.", "KONO DIO DA!")
# Hello, it's me. KONO DIO DA!
```
第二行的 `#` 後面是實際上輸出的東西
每段字串之間預設以空白分隔
----
如果想用其他東西分隔每個字串呢?
```python=
print("Hello,", "it's me.", "KONO DIO DA!", sep="~~~")
# Hello,~~~it's me.~~~KONO DIO DA!
print("Hello,", "it's me.", "KONO DIO DA!", sep="")
# Hello,it's me.KONO DIO DA!
print("Hello,", "it's me.", "KONO DIO DA!", sep="...") # 財哥體
# Hello,...it's me....KONO DIO DA!
```
sep 應該是指 separate
----
![](https://i.imgur.com/BFg8znq.png)
----
### end
end 是這小節的標題,還沒下課
----
此外,`print` 預設結尾換行。可以先理解成每次 print 後電腦會按一次 enter
```python=
print("123")
print("456")
print("789")
"""123
456
789
"""
```
----
我們也可以把結尾的換行替換成其他東西
```python=
print("123", end="...")
print("456", end="~~~")
print("789", end="です") # 伊綱體
# 123...456~~~789です
```
----
當然,end 可以跟 sep 混用
```python
print("Hello,", "it's me.", "KONO DIO DA!", sep="...", end="です") # 財哥伊綱體
# Hello,...it's me....KONO DIO DA!です
```
----
Questions?
![](https://pbs.twimg.com/media/EzbBLmpVcAgn9qp.jpg:small)
---
## 變數與賦值
----
### 什麼是變數 What are variables?
----
Variables are containers for storing data values.
----
變數是用來儲存資料數值的容器。
----
什麼意思呢?我們來看一些例子
----
```python=
name = "Megumin"
print("Hi,", name) # Hi, Megumin
```
這兩段程式的效果是一樣的
```python
print("Hi,", "Megumin")
```
----
```python=
master = "Megumin"
action = "EXPLOSION!!!!"
print(master, "says:", action) # Megumin says: EXPLOSION!!!!
```
這兩段程式的效果是一樣的
```python
print("Megumin", "says:", "EXPLOSION!!!!")
```
----
![](https://c.tenor.com/F9phHgGD6BIAAAAC/megumin-kono-suba.gif)
----
補充給學過 C 或 C++ 等語言的同學:
Python 的變數不用宣告資料型態,直接賦值即可
----
### 賦值 assign
----
等號 `=` 是什麼意思?
----
請先忘記你在數學課學的等號
----
這一行程式碼
```python=
name = "Megumin"
```
做了兩件事情:
1. 告訴電腦有一個變數叫做 `name`
2. 把 "Megumin" 這個字串指派 / 賦予給 `name` 這個變數
----
### 變數命名規則
----
According to [this](https://www.w3schools.com/python/python_variables_names.asp):
![](https://i.imgur.com/6iG11oa.png)
----
一個變數名稱可以很短 (`x`, `y`) 或者具有描述性 (`carname`, `total_volume`)。以下是 python 的變數命名規則:
----
* 變數名稱的開頭必須是字母或者底線,不能以數字開頭
* 變數名稱只能包含字母、數字與底線 (A-z, 0-9, \_)
* 變數名稱的大小寫不一樣則被視為不同變數 (age, Age 和 AGE 是三個不一樣的變數)
* 不能是關鍵字,如 `if`, `else`, `while`, `for`, `pass` 等等,但我們其實還沒學到什麼是關鍵字,這個知道一下就好
* (補充) 其實變數名稱可以是中文但我個人不建議
----
合法的變數名稱
```python=
jojo
jo1
heil2u
jo_jo
O_O
abcd1234
_
# 補充:_ 這個變數名稱比較特別,一般會拿來表示「這是 I don't care 的變數」
# 例如 for _ in range(10): ...
my_var
```
----
非法的變數名稱
```python=
F-MEGA
jo-jo
1jo
123
?_?
my var
```
----
小測驗:哪些是合法變數名稱?哪些是非法變數名稱?
```python=
majiyabakune
2022sprout
UMU
=_=
a1b2c3d4
<(_ _)>
Illegal
```
----
### 我有選擇障礙,怎麼取名好呢?
取一個有意義的名稱即可,例如
* 想存人名,用 name
* 想存車子品牌,用 car 或 brand 或 car_brand
* 想存年齡,用 age
----
### 那我可以亂取名嗎?
個人建議養成好習慣 (?)
----
Questions?
---
## 花式賦值
----
```python=
x = 5
y = 6
```
可以一行內完成嗎?
----
```python=
x, y = 5, 6
```
----
範例:把 `x` 和 `y` 內存放的資料交換
```python=
x = y
y = x
```
這樣寫會有什麼問題?
----
```python=
tmp = x
x = y
y = tmp
```
----
更短的寫法
```python=
x, y = y, x
```
----
Questions?
----
### 作業(不用交)
看懂這則漫畫
<img src="https://i.imgur.com/yuEGCYg.jpg" alt="drawing" width="350"/>
----
![](https://i.imgur.com/E7OAnlY.png)
temp
---
## 輸入 `input()`
----
### 什麼是輸入
電腦資料、信號的接收儲存。
Information fed into a data processing system or computer.
----
想一想:由上一頁的定義,你覺得有哪些東西算是輸入 / 輸入裝置?
----
* 圖像 / 相機鏡頭
* 文字 / 鍵盤
* 音訊 / 麥克風
* 滑鼠點擊、移動 / 滑鼠
* ...
----
我們經常需要電腦程式與使用者互動
例:在唉居照片上點兩下 -> like
例:輸入帳號密碼後按確認 -> 登入
----
最簡單的輸入方式即「使用者從鍵盤輸入文字」
----
`input` 函數幫我們處理了「輸入文字」
----
範例:
```python=
name = input("Input your name: ")
print("Hi,", name)
```
----
![](https://i.imgur.com/VFrzdO9.gif)
----
`input` 語法
```python=
input(prompt)
```
* `prompt`: 提示字串 (非必要)
----
```python=
name = input("Input your name: ")
```
1. 電腦向使用者提示 "Input your name: "
2. 使用者輸入文字後換行
3. 變數 `name` 接收這段文字
----
更多範例
```python=
name = input()
age = input()
print("Hi", name, ", you are", age, "years old.")
```
----
### 注意
每次執行到 `input()` 電腦就會等待使用者輸入,直到換行(不是讀到空白為止)
----
Questions?
---
## 運算子 operator
----
跟大家在數學課學到的加減乘除差不多
----
範例(為了方便講解,容我偷渡一下整數`int`)
```python=
print(1 + 1) # 2
print("Hello, " + "World!") # Hello, World!
name = "Super Cat Man"
print("Hello, " + name) # Hello, Super Cat Man
```
----
運算子有分為一元運算子與二元運算子,就跟大家在數學課學到的一樣
```python=
x, y = 12, 5
print(x + y) # 17
print(x + 10) # 22
print(+x) # 12
print(-x) # -12
```
----
也可以把多個運算子串起來
```python=
print(-2 + (3 + 1) * 4 - 5 / 6) # 13.166666666666666
```
當然,會符合「先乘除後加減」等等我們熟悉的運算規則。
----
後面的小節會依序介紹每種資料型別的運算子作用
如果你很好奇 python 有哪些運算子的話,可以上網找找或是看一下[這個](https://www.w3schools.com/python/python_operators.asp)
----
Questions?
---
## 資料型別 & `type`
----
### 什麼是資料型別 What Are Data Types?
「資料型別」在程式設計領域中,是十分重要的概念
變數能以不同的資料型別儲存資料,不同的資料型別能夠做到不一樣的事情,行為也不太一樣
----
以下列出一些學員們在第一階段會碰到的所有資料型別
* Text Type: `str`
* Numeric Types: `int`, `float`
* Sequence Types: `list`, `tuple`, `range`
* Mapping Type: `dict`
* Boolean Type: `bool`
* `builtin_function_or_method`
不用特別記起來,我也沒有記
----
### 怎麼知道這東西屬於哪種資料型別?
使用 `type`
```python=
print(type("Hello, World!")) # <class 'str'>
```
----
語法
```python=
type(x)
```
* `x`: 你想問的東東
----
試試看吧
```python=
print(type(1))
print(type(1.0))
print(type("1.0"))
print(type(1 + 2j))
print(type(print))
print(type(type))
```
----
### 為什麼要區分資料型別?
這段程式碼,兩行的輸出結果是一樣的
```python=
print("1") # 1
print(1) # 1
```
----
但是...速度與激情9 比 bing chilling
```python=
print("1" + "2") # 12
print(1 + 2) # 3
```
兩行的輸出結果不一樣
----
Questions?
![](https://i.ytimg.com/vi/p6TbqE51UV0/maxresdefault.jpg)
---
## 字串 `str`
----
前面已經偷渡了十分多的字串概念
```python=
name = "Rick Astley"
song = "Never Gonna Give You Up"
```
----
### 什麼是字串
字串 (string):一段文字
----
Python 中的字串是以引號包起來的
```python=
"bing chilling" # 用雙引號包起來
'bing chilling' # 用單引號包起來
```
兩個字串對電腦來說是一樣的
----
### 運算子
字串有
1. 加法 (串接)
2. 正整數乘法 (複製)
----
```python=
name = "Madoka"
print("Hello, " + name) # Hello, Madoka
print(name * 3) # MadokaMadokaMadoka
```
----
![](https://i.imgur.com/IBlxy6h.png)
----
Questions?
![](https://i.imgur.com/zXcbD6r.png)
---
## 字串的花式用法
----
### 跳脫字元 [Escape character](https://en.wikipedia.org/wiki/Escape_character)
可以在字串裡面放單引號、雙引號嗎?
----
當然可以,但是有一些要注意的地方
```python=
print("Hello. It's me.") # 這行語法正確
print('Hello. It's me.') # 這行會送給你 error
```
----
如果我就是想用單引號包住字串呢?也可以
```python=
print('Hello. It\'s me.') # Hello. It's me.
```
像這種反斜線配上某個字元的用法被稱為「跳脫字元」
其他比較常見的跳脫字元還有 `\n` 換行、`\"` 雙引號等
----
因為每年都會有人問,這裡額外補充一下
反斜線在鍵盤上的位置為 enter 的上方、backspace 的下方
----
### 多行字串
`"""` 除了用在多行註解以外,也可以用來表示多行字串
```python=
print("""這幾行
會被
印出來 :)""")
```
同樣地,`"""` 可以換成 `'''`
----
### f-strings
Python 3.6 新加入的語法
這算是進階用法,但我覺得沒有很難理解,而且十分好用,就擺進來了當作補充
----
我們前面教到
```python=
name = "Megumin"
print("Hello,", name)
```
但如果我們想印出的東西很長而且包含了很多變數呢?
----
範例:幫吉良吉影做自我介紹
![](https://64.media.tumblr.com/9feae8bedecfafe7c6a43eb3183b89e8/tumblr_okiwwiwwSY1qbrflqo1_540.gifv)
----
> 我的名字叫吉良吉影,33歲。住在杜王町東北部的別墅區一帶,未婚。
```python=
name = "吉良吉影"
age = 33
address = "杜王町東北部的別墅區一帶"
marriage_status = "未婚"
```
----
用加的
```python=
print("我的名字叫" + name + "," + age + "歲。住在" + address + "," + marriage_status + "。")
```
![](https://i.imgur.com/Y8y6SkZ.png)
很醜而且容易出錯
----
`sep=""`
![](https://i.imgur.com/9pKWzzO.png)
```python=
print("我的名字叫", name, ",", age, "歲。住在", address, ",", marriage_status, "。", sep="")
```
----
f-string
![](https://i.imgur.com/FjVhkfn.png)
```python=
print(f"我的名字叫{name},{age}歲。住在{address},{marriage_status}。")
```
----
f-string 用法
```python=
f"bla bla bla {variable_name} bla bla"
```
引號前面加上f,中間要替換的東西用 `{}` 裡面包變數名稱
----
往後你在 debug 時可能會遇到需要把許多變數印出來的狀況
```python=
name = "Kira Yoshikage"
age = 33
print("name=", name, "age=", age)
```
----
使用 f-string
```python=
print(f"name={name} age={age}")
```
----
更棒的作法:變數名稱後面加上等號
```python=
print(f"{name=} {age=}")
# name='Kira Yoshikage' age=33
```
----
Questions?
---
## 整數 `int`
就是大家在數學課學的整數,英文全名 integer
----
### 運算
加減乘除、取餘數、次方、取負號
```python=
x, y = 13, 5
print(x + y) # 18
print(x - y) # 8
print(x * y) # 65
print(x / y) # 2.6,注意這裡算出來已經不是整數了
print(x // y) # 2,除法取整
print(x % y) # 3
print(x ** y) # 371293
print(-x) # -13
print(+x) # 13
```
----
有先乘除後加減等運算子的優先次序,當然也跟大家在數學課學到的一樣。
```python=
print(1 + 2 * 3) # 7
print((1 + 2) * 3) # 9
```
----
而且他可以算到超級大的數字,只要你的電腦夠好(?
```python=
print(3 ** 10000) # 3 的 10000 次方
# 16313501853426258743032567291811547168121324535825379939348203261918257308143190787480155630847848309673252045223235795433405582999177203852381479145368112501453192355166224391025423628843556686559659645012014177448275529990373274425446425751235537341867387607813619937225616872862016504805593174059909520461668500663118926911571773452255850626968526251879139867085080472539640933730243410152186914328917354576854457274195562218013337745628502470673059426999114202540773175988199842487276183685299388927825296786440252999444785694183675323521704432195785806270123388382931770198990841300861506996108944782065015163410344894945809337689156807686673462563038164792190665340124344133980763205594364754963451564072340502606377790585114123814919001637177034457385019939060232925194471114235892978565322415628344142184842892083466227875760501276009801530703037525839157893875741192497705300469691062454369926795975456340236777734354667139072601574969834312769653557184396147587071260443947944862235744459711204473062937764153770030210332183635531818173456618022745975055313212598514429587545547296534609597194836036546870491771927625214352957503454948403635822345728774885175809500158451837389413798095329711993092101417428406774326126450005467888736546254948658602484494535938888656542746977424368385335496083164921318601934977025095780370104307980276356857350349205866078371806065542393536101673402017980951598946980664330391505845803674248348878071010412918667335823849899623486215050304052577789848512410263834811719236949311423411823585316405085306164936671137456985394285677324771775046050970865520893596151687017153855755197348199659070192954771308347627111052471134476325986362838585959552209645382089055182871854866744633737533217524880118401787595094060855717010144087136495532418544241489437080074716158404895914136451802032446707961058757633345691696743293869623745410870051851590672859347061212573446572045088465460616826082579731686004585218284333452396157730036306379421822435818001505905203918209206969662326706952623512427380240468784114535101496733983401240219840048956733689309620321613793757156727562461651933397540266795963865921590913322060572673349849253303397874242381960775337182730037783698708748781738419747698880321601186310506332869704931303076839444790968339306301273371014087248060946851793697973114432706759288546077622831002526800554849696867710280945946603669593797354642136622231192695027321229511912952940320879763123151760555959496961163141455688278842949587288399100273691880018774147568892650186152065335219113072582417699616901995530249937735219099786758954892534365835235843156112799728164123461219817343904782402517111603206575330527850752564642995318064985900815557979945885931124351303252811255254295797082281946658798705979077492469849644183166585950844953164726896146168297808178398470451561320526180542310840744843107469368959707726836608471817060598771730170755446473440774031371227437651048421606224757527085958515947273151027400662948161111284777828103531499488913672800783167888051177155427285103861736658069404797695900758820465238673970882660162285107599221418743657006872537842677883708807515850397691812433880561772652364847297019508025848964833883225165668986935081274596293983121864046277268590401580209059988500511262470167150495261908136688693861324081559046336288963037090312033522400722360882494928182809075406914319957044927504420797278117837677431446979085756432990753582588102440240611039084516401089948868433353748444104639734074519165067632941419347985624435567342072815910754484123812917487312938280670403228188813003978384081332242484646571417574404852962675165616101527367425654869508712001788393846171780457455963045764943565964887518396481296159902471996735508854292964536796779404377230965723361625182030798297734785854606060323419091646711138678490928840107449923456834763763114226000770316931243666699425694828181155048843161380832067845480569758457751090640996007242018255400627276908188082601795520167054701327802366989747082835481105543878446889896230696091881643547476154998574015907396059478684978574180486798918438643164618541351689258379042326487669479733384712996754251703808037828636599654447727795924596382283226723503386540591321268603222892807562509801015765174359627788357881606366119032951829868274617539946921221330284257027058653162292482686679275266764009881985590648534544939224296689791195355783205968492422636277656735338488299104238060289209390654467316291591219712866052661347026855261289381236881063068219249064767086495184176816629077103667131505064964190910450196502178972477361881300608688593782509793781457170396897496908861893034634895715117114601514654381347139092345833472226493656930996045016355808162984965203661519182202145414866559662218796964329217241498105206552200001
```
----
Questions?
---
## 浮點數 `float`
用來表示帶有小數點的數字
各位學員把浮點數理解成小數是完全沒有問題的,雖然兩者還是有一點差距但解釋起來很麻煩除非課後有多餘的時間我再想辦法補充
[wiki](https://zh.wikipedia.org/wiki/%E6%B5%AE%E7%82%B9%E6%95%B0)
----
### 運算
一樣,有加減乘除、次方等等你覺得應該要有的運算
```python=
x, y = 0.4771, 3.1415
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x ** y)
print(-x)
print(+x)
```
----
Questions?
---
## 布林值 `bool`
邏輯的真假值
[wiki](https://zh.wikipedia.org/wiki/%E5%B8%83%E6%9E%97_(%E8%B3%87%E6%96%99%E9%A1%9E%E5%9E%8B))
----
就只有兩種值 `True`, `False`
```python=
True
False
```
首字母是大寫喔
----
Well, that's it
下週才會真的用到這東東
----
Questions?
---
## 強制轉型
----
### A + B problem
請寫出一支程式,輸入兩行,每行一個整數,輸出兩個整數的和
Sample Input:
```
1
2
```
Sample Output:
```
3
```
----
你的第一次嘗試可能會像這樣
```python=
a = input()
b = input()
answer = a + b
print(answer)
```
這樣會有什麼問題?
----
因為 `input` 拿到的資料會是字串,所以電腦把 1 和 2 當作字串接起來,變成 12 了!!
----
### 如何解決
解決方法:強制轉型
```python=
a = "1"
b = "2"
print(type(a), type(b)) # <class 'str'> <class 'str'>
print(a + b) # 12
int_a = int(a)
int_b = int(b)
print(type(int_a), type(int_b)) # <class 'int'> <class 'int'>
print(int_a + int_b) # 3,這才是我們要的
```
----
語法
```python=
int(x)
```
* `x`: 你想變成 `int` 的東東
----
試試看
```python=
print(int("100"))
print(int(1.5))
print(int("Hello, World!"))
```
哪一個沒有成功轉型成整數?
----
### 如何改寫原本的程式?
```python=
a = input()
b = input()
answer = a + b
print(answer)
```
----
可以改寫成這樣
```python=
a = input()
b = input()
int_a = int(a)
int_b = int(b)
answer = int_a + int_b
print(answer)
```
----
也可以再更短 (進階連續技)
```python=
a = int(input())
b = int(input())
answer = a + b
print(answer)
```
----
再更短? ([忍者程式碼 ninja code](https://lenchen.medium.com/%E5%BF%8D%E8%80%85%E7%A8%8B%E5%BC%8F%E7%A2%BC-ninja-code-cc5e4a70bafc))
```python=
print(int(input()) + int(input()))
```
好孩子不要學
----
同理,我們也可以
* `int` -> `str`
* `float` -> `str`
* `str` -> `float`
* `bool` -> `int`
* ...
----
試試看
```python=
print(int(True))
print(bool(1))
print(bool(0))
print(bool("0"))
print(bool(""))
print(float(1))
print(str(123) + str(True))
```
大家也可以自行試試其他組合
----
Questions?
---
## Congratulations!
你比一個小時前的自己更會寫程式了
---
A good programmer isn't someone who knows a lot of languages. A good programmer is someone who knows what to Google.
---
## 綜合練習 & 作業
[neoj 3007](https://neoj.sprout.tw/problem/3007/)
[neoj 3008](https://neoj.sprout.tw/problem/3008/)
[neoj 3009](https://neoj.sprout.tw/problem/3009/)
---
回家記得複習喔~
![](https://i.imgur.com/FlDvFaT.png)
---
End
{"metaMigratedAt":"2023-06-16T20:14:49.588Z","metaMigratedFrom":"YAML","title":"Python Basic","breaks":true,"slideOptions":"{\"transition\":\"fade\"}","contributors":"[{\"id\":\"f93c8d2e-91fa-44cf-b9d2-ea6d875fcb79\",\"add\":22119,\"del\":2127}]"}