Lesson 2: 認識變數 基本數學運算 與 資料型別
last updated: 2022/3/11
VS Code
❶中文化
開啟VSCode後,前往下列網址,點選Install
https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-zh-hant
❷切換中文語系
照這篇 https://oranwind.org/vs-code-lang/ 可以切換語系
開啟VS Code,點選下列Python模組連結
❶ 開啟專案
檔案總管
❷ 儲存工作區
延伸模組
編輯器中按滑鼠右鍵
終端機: 出現執行結果
# coding: utf-8
name = input('姓名?')
print('妳好,', name)
name = 100
print(name)
jupyter notebook
直接執行
Anaconda安裝好後, 開啟Navigator即可執行
Jupyter Notebook: 在瀏覽器內執行Python程式
❸ 進入互動模式
❶
❷
❶ 檔案名稱
❷ 編輯單元(cell)
❸ 選單與工具列
Python程式在此輸入執行
副檔名為.ipynb
綠色: 編輯模式
藍色: 命令模式(執行...)
快捷鍵(Windows) | 作用 |
---|---|
Enter | 進入編輯模式 |
Esc | 進入命令模式 |
Ctrl-Enter | 執行目前的單元(cell) |
Shift-Enter | 執行目前單元,切換至下一個新單元(命令模式) |
Alt-Enter | 執行目前單元,切換至下一個新單元(編輯模式) |
命令模式 | 作用 |
---|---|
a | 加入上方單元 |
b | 加入下方單元 |
x | 剪下單元 |
c | 複製單元 |
v | 貼上單元 |
鍵盤
滑鼠
觸控螢幕
螢幕
印表機
輸入方式: 鍵盤格式: 文字
Python程式
輸出方式: 螢幕格式: 文字 圖表
變數 = input('自訂提示訊息')
python鍵盤輸入函式: input()
python螢幕輸出函式: print()
print('印出的內容', 變數, '其他內容')
括弧內參數: 1個以上,逗點分隔
變數 = input('自訂提示訊息')
python鍵盤輸入函式: input()
python螢幕輸出函式: print()
print('印出的內容', 變數, '其他內容')
問題:從鍵盤輸入「姓名」,在螢幕上印出'Hello 輸入的姓名'
提示
Variable
# coding: utf-8
name = input('請問貴姓大名?')
print('你好,', name)
y = int(input('請問年紀?'))
print('原來你', y, '歲')
w = float(input('請問體重?'))
print('體重為', w)
Python程式
http://www.qnx.com/developers/docs/6.5.0/topic/com.qnx.doc.ide.userguide/images/pic2Fmemory_AboutVirtualMem_.xml_d103150e80.jpg
https://cdn.pixabay.com/photo/2013/04/01/08/38/ram-98420_960_720.png
電腦記憶體空間
(虛擬)
對應關係
(由作業系統負責)
實體記憶體
程式碼空間
資料空間
變數
name
y
變數:暫時儲存資料的地方
# coding: utf-8
name = input('請問貴姓大名?')
print('你好,', name)
y = int(input('請問年紀?'))
print('原來你', y, '歲')
w = float(input('請問體重?'))
print('體重為', w)
input(): 從鍵盤取得輸入
'王小明'
'37'
'2.35'
'王小明'
name ➞
暫存的空間
37
y ➞
2.35
w ➞
變數
資料的[標籤]
什麼是變數(variable?)
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
便條紙有很多類:例如數字(整數(int)、浮點數(float))、字串(String)
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
另外寫一張便條紙5, 不要從夾鏈袋拿出來
便條紙8會取代夾鏈袋內的便條紙
x = 125
print(x) # 印出數值125
y = x * 8 * 300 # 星號代表乘法
print(y) # 印出300000
z = 9000
a = z * 12 # 變數a用來暫時儲存總花費
print(a)
善用變數暫存資料,方便後續計算
# 收入部份
x = 125
y = x * 8 * 300 # 8小時,300天
# 支出部份
z = 9000
a = z * 12
# 收入減去支出, 存到變數b
b = y - a
print(b) # 印出結果
變數名稱的意義? x, y, z , a, b難以記住!
# 收入部份
時薪 = 125
年薪 = 時薪*8*300 # 8小時,300天
# 支出部份
月支 = 9000
年支 = 月支 * 12
# 收入減去支出, 存到變數b
年存 = 年薪 - 年支
print(年存) # 印出結果
為變數取「有意義」的名稱
'王小明'
name ➞
37
y ➞
字串 string
整數 int
e7 | 8e | 8b | e5 | b0 | 8f | e6 | 98 | 8e |
中文字以utf-8格式(3 bytes)儲存
王
小
明
00000000 | 00000000 | 00100101 |
整數以24 bits (3 Bytes) 儲存 隨機器可能不同
二進位表示法
name = input('請問貴姓大名?')
# ... 省略
name = '小明' # 重新指定內容
print(name) # 重複使用變數
註解: 程式說明
單行註解: 使用#字號
多行註解: 前後各3個單引號 或 3個雙引號
# 作業一: 在螢幕印出使用者的姓名,年紀,體重
# 作者: 王小明
# 版本與日期: 1.0, 2019/2/2
name = input('請問貴姓大名?')
print('你好,', name)
y = int(input('請問年紀?'))
print('原來你', y, '歲')
w = float(input('請問體重?'))
print('體重為', w)
"""
作業一: 在螢幕印出使用者的姓名,年紀,體重
作者: 王小明
版本與日期: 1.0, 2019/2/2
"""
name = input('請問貴姓大名?')
print('你好,', name)
# .... 略
"""
範例:計算每年儲存金額
"""
# 收入部份
時薪 = 125 # 設定時薪
年薪 = 時薪 * 8 * 300 # 8小時,300天 # 計算年薪
# 支出部份
月支 = 9000 # 設定每月花費
年支 = 月支 * 12 # 計算每年花費
# 收入減去支出, 存到變數b
年存 = 年薪 - 年支 # 計算每年儲存金額
print(年存) # 印出結果 # 印出每年儲存金額
命名方式
score1 = 80 # 第一次小考
score2 = 91 # 第二次小考
sum = score1 + score2
print('總分 = ', sum)
print('平均 = ', sum/2)
變數名稱 = 變數值
新增變數
english = 85
physics = 73.5
fruit = '西瓜'
score1 = score2 = score3 = 90
多個變數的值都一樣,可一次指定
age, name = 18, '王小明'
age =18
name = '王小明'
同一行指定多個變數: 變數或值之間以逗號分隔
刪除變數(節省記憶體空間)
del 變數名稱
del score1
del name
del fruit
命名規則
姓名 = '姓名'
Id = 'AA123456'
_score = 100
7eleven = '超商'
M&M = '巧克力'
Bruce Lee = '李小龍'
命名規則
SUM = 100
Sum = 90
sum = 80
print(SUM) # 印出? 100
SUM = 100
SUM = 90
SUM = 80
print(SUM) # 印出? 80
print(a)
錯誤
停在第一個錯誤的行號
錯誤訊息
編輯時,VS Code便會指出錯誤
錯誤
行號、第幾個字元
錯誤訊息
name = input('請輸入:') # 建立變數
print(name) # 已建立, 故可使用
pi = 3.14 # 建立變數, 設定初值為3.14
area = pi * 3 * 3 # pi已建立, 故可使用
運算式expression
score = input('輸入數學成績:')
print(int(score) + 10)
變數
函式
運算子
變數
函式
運算子
函式
常數
常數
程式的運算
非僅指四則運算,其他如變數管理、邏輯判斷也都屬於運算
運算子
score = input('輸入數學成績:')
area = pi * r * r # pi, r 皆是已定義的變數
指派運算子
算術運算子
運算子: 指定資料進行何種運算
total = score + 10
運算子
area = pi * r * r # '='號為指定運算子
指派運算子
多種運算子類型
算術運算子
比較運算子
邏輯運算子
字串運算子
f = c * 1.8 + 32 # '*', '+':算術運算
(6+9 == 2+13) # 是否相等? True
not(5 > 3) # 非 5>3? False
s = 'Hi' + '你好' # '+':字串串接,非加法
識別運算子identity
成員運算子membership
位移運算子shifting
位元運算子bitwise
運算子
area = 3.14 * r * r
area = 3.14 * r**2
改用次方運算子
算術運算子
x = 5 + 6 # 5加6的結果設定給變數x
print(x) # 印出結果11
y = x - 10 # x減10的結果設定給變數y
print(y) # 列印結果
算術運算子
y = x - 10 並非「比較」等號兩邊是否相等!
等號右邊 x - 10 先計算
再加結果指派給等號右邊的變數
x = 9 % 5 # 9除以5的餘數設定給變數x
print(x)
y = 9 // 2 # 9除以2的整數部份,設定給變數y
print(y) # 印出結果 4
算術運算子
範例問題:金額分攤
算術運算子
程式
執行結果
範例問題:依座號分組
算術運算子
程式
執行結果
邏輯判斷第4章
比較運算子: ==
x = 3 ** 2 # 3的平方設定給變數x
print(x)
y = 3 ** 3 # 3的3次方設定給變數y
print(y) # 印出結果 27
算術運算子
算術運算子
上衣 = input('請輸入上衣數量?')
褲子 = input('請輸入褲子數量?')
背心 = input('請輸入背心數量?')
總金額 = int(上衣)*300 + int(褲子)*350 + int(背心)*400
print('訂購服裝的總金額為', 總金額)
四則運算
說明 input()取得結果為字串,無法運算
故必須先呼叫int()將變數內容轉成「整數」
算術運算子
人數 = 47
組別 = 47 // 5 # 整數除法
print(組別) # 印出組別數
餘數 = 47 % 5 # 餘數運算
print(餘數) # 印出結果
四則運算
算術運算子
整數除法 //
請輸入購買飲料的罐數? 30
需花費: 520
算術運算子
求餘數 %
優先序: 運算式中計算的先後次序
優先序
若不確定計算優先序:加小括號
除了括弧, 先乘除後加減之外...
優先序
優先序
優先序
top = float(input('輸入梯形上底:'))
bottom = float(input('輸入梯形下底:'))
height = float(input('輸入梯形高度:'))
area = (top + bottom) * height / 2 # 先乘除後加減
print('面積是: %10.1f' % area)
範例問題:計算梯形面積
演算法:
算術運算子: 加法, 乘法, 除法(浮點數)
優先序計算先後次序: 括弧優先, 先乘除後加減, 左至右...
乘號不可以忽略
# 範例 2-5-3 攝氏轉華氏
r = input('輸入半徑(浮點數)')
area = 3.14 * float(r) * float(r)
print('面積是 %8.2f' % area)
c = int(input('輸入攝氏溫度(整數)'))
f = c * 1.8 + 32
print('攝氏%3d度,相當於華氏%3d度' % (c,f))
指定運算子
提示:float()字串轉浮點數,float(), int()也可加在input()之外
指定運算子
程式中的變數: 經常需要規律增量/減量(類似等差級數)
a = 5
a = a + 1 # 遞增1
b = 8
b = b + 3 # 遞增3
c = 10
c = c - 1 # 遞減1
d = 12
c = c - 2 # 遞減2
a + 1 運算完, 再將值存回 a
遞增1, 遞減1經常用於程式
遞增/遞減: 寫法累贅
指派運算子
+=, -=, ...
指定運算子
經常使用!
指定運算子
指定運算子
x = 10
x += 5
print(x) # 印出結果15
x = 10
x -= 5
print(x) # 印出結果5
x = 10
x %= 5
print(x) # 印出結果0
x = 10
x **= 5
print(x) # 印出結果100000
指定運算子
x = y = z = 15
print(x) # 印出結果15
print(y) # 印出結果15
print(z) # 印出結果15
指定相同初值
x, y , z = 10, 20, 30
print(x, y, z) # 印出結果
指定不同初值
print()可一次印出多個變數,只須以逗點相隔
x, y = 10, 20
print(x, y) # 印出結果
x, y = y, x
print(x, y) # x, y值互換
以多重指定互換數值
# ch2_4.py
a = b = c = 10
x = a + b + c + 12
print(x)
# 續行方法1
y = a +\
b +\
c +\
12
print(y)
# 續行方法2
z = ( a + # 此處可以加上註解
b +
c +
12 )
print(z)
方法1:在行後加上/
注意:/後不可有任何文字
方法2:將運算式加上「小括弧」
Data Type
age = 25 # 數值(整數)型別
sign = False # 布林值
motto = '日行一善' # 字串型別
數值型態 Numerical Type
布林值 Boolean Value
條件判斷:成立/不成立, 真/假
字串 string
態
# type() 基本用法
type(數值)
type(字串)
type(變數)
type() 內建函數: 取得物件所屬「資料型態」(類別)
10
<class 'int'>
3.3333333333333335
<class 'float'>
# ch3_1.py
x = 10
y = x / 3
print(x)
print(type(x))
print(y)
print(type(y))
num1 = 30 # 整數
num2 = 3.14 # 浮點數
num3 = 85.0 # 雖為整數值,可加小數點成為浮點數
整數(int)資料型態:等號右邊的數值為整數
浮點數(float)資料型態:數值帶有小數點
# ch3_2.py
x = 10.0
print(x)
print(type(x))
10.0
<class 'float'>
Q. 不同資料型態可否一起運算?
x = 30 # 整數
y = 3.14 # 浮點數
z = 5
a = x + y # 整數 / 浮點數 相加
b = y * z # 整數 / 浮點數 相乘
c = x - z # 整數相減
s = 'Hello' # 字串
x = 100 # 數值
a = x + s # 相加 ???
不一定!
數量 = input('輸入數量:') # 字串
單價 = 100 # 數值
總價 = 數量 * 單價 # 相乘 ???
# ch3_3.py
x = 10 # x 是整數
y = x + 5.5 # 整數 + 浮點數 -> y
print(x)
print(type(x))
print(y)
print(type(y)) # y 是浮點數, 不是整數
10
<class 'int'>
15.5
<class 'float'>
Q. 兩種資料型態運算之後,型態會是?
整數 + 浮點數 → 什麼型態??
變數y若是整數
則會變成15 or 16
x + 5.5 → 10.0 + 5.5 → 15.5
整數, 浮點數一起運算 → 整數會先轉為浮點數 !
# ch3_4.py
x = 10
print(x)
print(type(x)) # 加法前列出x資料型態
x = x + 5.5
print(x)
print(type(x)) # 加法後列出x資料型態
整數 + 浮點數 → 浮點數
即使是「存回」同一變數,也會自動轉換!
10
<class 'int'>
15.5
<class 'float'>
資料型態:有必要時會「自動轉換」
若無法自動轉換 → 必須手動「強制轉換」
數量 = input('輸入數量:') # 字串
單價 = 100 # 整數
總價 = int(數量) * 單價 # 強制轉整數
int():強制轉整數
# ch3_8.py 將 浮點數 強制轉換為 整數
x = 10.5
print(x)
print(type(x)) # 加法前列出x資料型態
y = int(x) + 5
print(y)
print(type(y)) # 加法後列出y資料型態
10.5
<class 'float'>
15
<class 'int'>
float():強制轉浮點數
# ch3_9.py 將 整數 強制轉換為 浮點數
x = 10
print(x)
print(type(x)) # 加法前列出x資料型態
y = float(x) + 10
print(y)
print(type(y)) # 加法後列出y資料型態
10
<class 'int'>
20.0
<class 'float'>
練習
練習
# ch3_10.py
x = -10
print("以下輸出abs( )函數的應用")
print(x) # 輸出x變數
print(abs(x)) # 輸出abs(x)
x = 5
y = 3
print("以下輸出pow( )函數的應用")
print(pow(x, y)) # 輸出pow(x,y)
x = 47.5
print("以下輸出round( )函數的應用")
print(x) # 輸出x變數
print(round(x)) # 輸出round(x)
x = 48.5
print(x) # 輸出x變數
print(round(x)) # 輸出round(x)
x = 49.5
print(x) # 輸出x變數
print(round(x)) # 輸出round(x)
以下輸出abs( )函數的應用
-10
10
以下輸出pow( )函數的應用
125
以下輸出round( )函數的應用
47.5
48
48.5
48
49.5
50
abs(x):x的絕對值
pow(x,y): x的y次方
round(y): y四捨五入後的整數值
練習
flag = True # 布林值, T需大寫
isDigit = False # 布林值, F需大寫
布林值也具有數值
number = 20 + True # number值為21
布林值資料型態:用於邏輯判斷(詳見 流程控制)
分為真值(True)、偽值(False)
邏輯轉換函數:bool()
# ch3_11.py 列出 布林值 與 資料型態
x = True
print(x)
print(type(x)) # 列出x資料型態
y = False
print(y)
print(type(y)) # 列出y資料型態
True
<class 'bool'>
False
<class 'bool'>
# ch3_12.py 布林值 強制傳換為 整數
x = True
print(int(x))
print(type(x)) # 列出x資料型態
y = False
print(int(y))
print(type(y)) # 列出y資料型態
1
<class 'bool'>
0
<class 'bool'>
字串資料型態:2個單引號 或 雙引號 之間的資料
x = 'This is James's ball' # 語法錯誤!
x = "This is James's ball" # 內容有單引號時,字串用雙引號框起來
print(x)
x = "Deep Learning" # 雙引號設定字串
print(x)
print(type(x)) # 列出x字串資料型態
y = '深度學習滴水穿石' # 單引號設定字串
print(y)
print(type(y)) # 列出y字串資料型態
多個字串可用'+'串接起來
# ch3_14.py
num1 = 222
num2 = 333
num3 = num1 + num2
print("以下是數值相加")
print(num3)
numstr1 = "222"
numstr2 = "333"
numstr3 = numstr1 + numstr2
print("以下是由數值組成的字串相加")
print(numstr3)
numstr4 = numstr1 + " " + numstr2
print("以下是由數值組成的字串相加,同時中間加上一空格")
print(numstr4)
str1 = "DeepStone "
str2 = "Deep Learning"
str3 = str1 + str2
print("以下是一般字串相加")
print(str3)
以下是數值相加
555
以下是由數值組成的字串相加
222333
以下是由數值組成的字串相加,同時中間加上一空格
222 333
以下是一般字串相加
DeepStone Deep Learning
使用3個引號,字串可跨行
# ch3_15.py
str1 = '''Silicon Stone Education is an unbiased organization
concentrated on bridging the gap ... '''
print(str1)
逸出字元:要印出特殊字元時,必須在之前加上「反斜線」
逸出字元 | 說明 |
---|---|
\' | 單引號「'」 |
\\ | 反斜線「\」 |
\t | Tab鍵 |
\n | 換行 |
\" | 雙引號「'」 |
str3 = '你好! \n 歡迎光臨'
print(str3)
# 印出
# 你好!
# 歡迎光臨
# ch3_16.py
#以下輸出使用單引號設定的字串,需使用\'
str1 = 'I can\'t stop loving you.'
print(str1)
#以下輸出使用雙引號設定的字串,不需使用\'
str2 = "I can't stop loving you."
print(str2)
#以下輸出有\t和\n字元
str3 = "I \tcan't stop \nloving you."
print(str3)
使用str()函式,可強制轉換為字串
# ch3_17.py
num1 = 222
num2 = 333
num3 = num1 + num2
print("這是數值相加")
print(num3)
str1 = str(num1) + str(num2)
print("強制轉換為字串相加")
print(str1)
這是數值相加
555
強制轉換為字串相加
222333
# ch3_18.py
x1 = "22"
x2 = "33"
x3 = x1 + x2
print(x3) # 列印字串相加
x4 = int(x1) + int(x2)
print(x4) # 列印整數相加
2233
55
資料型態:有必要時會「自動轉換」
若無法自動轉換 → 必須手動「強制轉換」
數量 = input('輸入數量:') # 字串
單價 = 100 # 整數
總價 = int(數量) * 單價 # 強制轉整數
# ch3_19.py
x1 = 97
x2 = chr(x1)
print(x2) # 輸出數值97的字元
x3 = ord(x2)
print(x3) # 輸出字元x3的Unicode碼值
x4 = '魁'
print(ord(x4)) # 輸出字元'魁'的Unicode碼值
a
97
39745
單一字元的字串:可轉為ASCII編碼或Unicode編碼
chr(x):轉為ASCII碼(0~127)
ord(x):中文字可轉為Unicode編碼(0~65535)
'+':將字串串接起來
'*':字串可與「整數」相乘,效果是字串重複整數次
# ch3_20.py
x1 = "A"
x2 = x1 * 10
print(x2) # 列印字串乘以整數
x3 = "ABC"
x4 = x3 * 5
print(x4) # 列印字串乘以整數
AAAAAAAAAA
ABCABCABCABCABC
'+' 與換行字元 '\n'搭配:處理字串的分行輸出
# ch3_21.py
str1 = "洪錦魁著作"
str2 = "HTML5+CSS3王者歸來"
str3 = "Python程式語言王者歸來"
str4 = str1 + "\n" + str2 + "\n" + str3
print(str4)
洪錦魁著作
HTML5+CSS3王者歸來
Python程式語言王者歸來
字串前加r:可取消逸出字元的功能
# ch3_22.py
str1 = "Hello!\nPython"
print("不含r字元的輸出")
print(str1)
str2 = r"Hello!\nPython"
print("含r字元的輸出")
print(str2)
不含r字元的輸出
Hello!
Python
含r字元的輸出
Hello!\nPython
# coding: utf-8
score = int(input('分數是?'))
print('王小明的成績是' + score)
分數是?25
Traceback (most recent call last):
File "d:/Python/hello.py", line 3, in <module>
print('王小明的成績是' + score)
TypeError: must be str, not int
y = input('請問年紀?') # input(): 字串型別
y = int(y) # int()將 字串 強制轉型為 整數
print('還有', 65-y, '年退休') # y必須是整數才能做數值運算
# coding: utf-8
score = int(input('分數是?'))
print('王小明的成績是'+ str(score))
# 或 print('王小明的成績是', score)
分數是?25
王小明的成績是 25
加號
逗號
轉換型態函式 | 範例 |
---|---|
int() | num = 100 + int("55") |
float() | weight = float(input('重量是?')) |
str() | score = int(input('分數是?')) print('王小明的成績是' +str(score)) |
# 部份運算會自動轉換型態
num = 10 + 1.5 # 整數與浮點數運算: 10轉為浮點數
r_str = input('輸入圓半徑, 單位為cm:')
r = ?????(r_str) # 強制轉型為 浮點數
pi = 3.14
area = ?? * ? * ? # 圓面積為 PI*半徑的平方
print('半徑:', r, '公分,圓面積為:', ????, '平方公分')
問題:計算任何半徑的圓面積
演算法
πr², 程式關於次方: 連乘 or 呼叫函式
其他運算子
位元運算: 數值轉換成二進位表示
運算結果: 從右到左進行位元運算
其他運算子
其他運算子