National Chengchi University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

1

Local AI

--

Uedu Code

--

政治大學 AQI 61 23°C PM2.5 13
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 02

變數與基本數學運算

變數是名稱,指向記憶體裡的物件
Interaction實作 20 minute(s)

Learning Objectives

  • 說明變數的用法:變數是名稱,用 = 指向記憶體裡的物件
  • 認識識別字規則與 Python 的關鍵字(保留字)
  • 介紹算術運算子(Arithmetic Operators):+ - * / // % **
  • 介紹指定運算子(Assignment Operators)與海象運算子 :=

為什麼需要變數

程式要處理資料:成績、價格、名字、感測器讀數。我們需要替這些資料取名字,之後才能再拿出來用、拿來計算。 這個名字就是變數。

在 Python 裡,變數不是一個「裝東西的盒子」,而比較像一張名牌:

total = 10

這行的意思是:在記憶體裡建立整數物件 10,再讓名稱 total 指向它。

  • Python 不需要事先宣告變數或它的型態,第一次指定值(=)時就自動建立
  • = 是「指定」,不是數學上的「等於」:先算出右邊的值,再讓左邊的名稱指向它
  • 同一個名稱之後可以改指向別的物件,甚至是不同型態的物件

指定與重新指定

看右邊的變數面板:每執行一行 =,就多一個名稱或某個名稱換了值。特別注意第 7 行 total = total + 5:右邊用的是 total「原本」的值。

動手看:名稱與物件

b = a 不是把 5「複製」一份給 b,而是讓 b 也指向同一個物件。按 b = a,再按 b += 1,看看 a 有沒有跟著變。整數是不可變的:b += 1 會產生新的整數 6,讓 b 改指向它,a 仍然指向 5。(Module 03 會再詳細說明可變與不可變。)

多重指定與交換變數

x = y = z = 1 讓三個名稱指向同一個值;a, b, c = 1, 2, "John" 依位置一一對應。第 9 行的 a, b = b, a 是 Python 交換兩個變數最常見的寫法,和第 13~15 行的三步驟寫法比較看看。

識別字(identifier)與關鍵字

變數、函數、類別、模組的名稱統稱為識別字,規則如下:

  • 第一個字必須是文字或底線 _,第二個字以後可以是文字、數字或底線
  • 不可以有特殊字元,例如 @、$、%,也不可以有連字號 -
  • 區分大小寫:Hello 和 hello 是兩個不同的識別字
  • 不可以使用關鍵字(保留字)
名稱 合格嗎 原因
ab10c、abc_DE、_abc、_ 合格 以文字或底線開頭
99、9abc 不合格 以數字開頭
x+y、a@ 不合格 含有特殊字元
for 形式合格,但不能用 是關鍵字

Python 3 的關鍵字(可以用 import keyword 再 print(keyword.kwlist) 列出來):

False None True and as assert async
await break class continue def del elif
else except finally for from global if
import in is lambda nonlocal not or
pass raise return try while with yield

命名慣例:變數名稱以小寫為主,多個單字用底線連接(student_name);首字大寫的寫法通常留給類別(class)。

檢查識別字與關鍵字

keyword.iskeyword() 檢查一個字是不是關鍵字,字串的 .isidentifier() 檢查它在形式上能不能當識別字。注意 "for".isidentifier() 是 True,但 for 仍然不能當變數名稱。

算術運算子

運算子 說明 範例 結果
+ 加法或正號 12 + 34 46
- 減法或負號 34 - 12 22
* 乘法 16.4 * 5 82.0
/ 除法,結果一定是浮點數 16 / 4 4.0
// 整數除法,捨棄小數部分 9 // 2 4
% 求餘數 17 % 6 5
** 次方 9 ** 2 81

// 遇到負數時是地板除法(floored):取「比較小」的那個整數,所以 -9 // 2 是 -5,不是 -4。 只要有一個運算元是浮點數,// 和 % 的結果也會是浮點數,例如 9.0 // 2 是 4.0。

Python 還有比較、邏輯、成員、身分、位元等運算子,Module 04 會介紹;這一課先專心在算術與指定運算子。

基本數學運算

這是投影片 Demo 的程式檔版本。播放前先猜猜每一行會印出什麼,特別是 16 / 4、16 // 4.0 和負數的 //。

指定運算子

把「運算之後再指定回自己」縮寫成一個運算子:

運算子 範例 相當於
= c = a + b 單純指定
+= c += a c = c + a
-= c -= a c = c - a
*= c *= a c = c * a
/= c /= a c = c / a
%= c %= a c = c % a
**= c **= a c = c ** a
//= c //= a c = c // a

Python 沒有 x++、x--。x++ 會是語法錯誤;--x 則被當成「負負得正」,x 的值完全不會改變。

指定運算子實際操作

一步一步看 x 和 y 的值怎麼變化。第 7 行的 --x 看起來像遞減,其實不是;看看 x 的值有沒有改變。

海象運算子 :=

Python 3.8 加入了海象運算子 :=(The Walrus Operator,因為 := 像一隻橫躺的海象), 正式名稱是指定運算式(Assignment Expression):在一個運算式「裡面」指定值,並把這個值當作運算式的結果。

# 不使用海象運算子:input() 要寫兩次
current = input('Write something: ')
while current != 'quit':
    words.append(current)
    current = input('Write something: ')

# 使用海象運算子:讀入、存起來、比較,一次完成
while (current := input('Write something: ')) != 'quit':
    words.append(current)

注意兩件事:

  • 單純要指定值時,請用一般的 =;直接寫 x := 5 當成一行敘述會是語法錯誤
  • 海象運算子適合「需要這個值、同時又要把它留下來」的情況,例如 while 的條件、print(count := len(words))

海象運算子:一邊讀入一邊判斷

程式會讀三行輸入:apple、banana、quit。注意第 5 行每執行一次,current 就被指定成新讀到的文字,接著立刻拿來和 "quit" 比較。下方可以改輸入內容再跑一次。

想一想:算術運算

1.

下面的程式會印出什麼?

print(-9 // 2)
2.

下面的程式會印出什麼?

print(17 % 6, 2 ** 3, 10 / 5)
3.

下面的程式會印出什麼?

x = 10
x //= 3
x **= 2
print(x)
第 1 次作答

想一想:變數與識別字

1.

下面哪一個可以當作變數名稱?

2.

下面的程式會印出什麼?

a, b = 1, 2
a, b = b, a + b
print(a, b)
3.

下面的程式會印出什麼?

x = 4
print(--x, x)
第 1 次作答

實作:把秒數換算成時、分、秒

seconds = 3725 秒是幾小時幾分幾秒?用 // 和 % 算出 h、m、s,讓程式印出 1 小時 2 分 5 秒。改成其他秒數也要算得對。

你的輸出
預期輸出

重點精華回顧

  • 變數是名稱,= 讓名稱指向一個物件;不需要宣告,同一個名稱可以重新指向其他物件。
  • 多重指定:x = y = z = 1、a, b, c = 1, 2, "John";交換變數用 a, b = b, a。
  • 識別字:文字或底線開頭、區分大小寫、不能有特殊字元、不能用關鍵字(keyword.kwlist)。
  • 算術運算子:+ - * / // % **;/ 一定得到浮點數,// 遇到負數是地板除法。
  • 指定運算子:+=、-=、*=、/=、%=、**=、//=;Python 沒有 ++、--。
  • 海象運算子 :=:在運算式裡同時指定值,常用在 while 條件;單純指定請用 =。
這一課完成了!
Next lesson:數值資料型態
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。