2. 變數與輸入

I. 變數

A. 什麼是變數

相信之前如果有學過一點點程式設計的大家都已經對「變數」這名稱不陌生了,我們可以簡單地把變數想像成一個盒子,這個盒子一次可以放一筆資料進去,但當我們再放新的一筆資料進盒子裡,前一筆資料就會被迫消失囉!

其實,變數代表著一段記憶體空間

B. 為何需要變數

電腦畢竟是人類所開發出的產品,因此思維模式肯定與人類相去不遠,人類不論從眼、耳、鼻、舌、手等感知器官所偵測到的訊息都必須存放在腦中,因此,電腦也同樣需要一個空間儲存所得到的訊息,那就利用變數吧!

執行中的程式通常都會放在記憶體當中,因此我們需要開設記憶體空間來存放程式執行期間所需要的絕大部分資料

C. 變數的命名規則

  1. 變數名稱的開頭必須是英文字母或底線

    _number tem2p Act_3 這些都是允許的變數名稱

  2. 變數名稱不得是數字開頭

    7zz 2u 這種都不允許

  3. 變數名稱只能含有(A~z, 0~9, 和 _ )

    Act-3 是不被允許的名稱唷

  4. 變數名稱的英文字母大小寫是有區別的

    Aoe aOE aoe 各是不同的變數

  5. 關鍵字不得當變數名稱

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

D. 變數的創立

Age = 50 # Age變數,放入50
_weight = 64 # _weight變數,放入64
name = "Alan" # name變數,放入Alan

也可一次放入多個值到多個變數裡

Age, _weight, name = 50, 64, "Alan"

注意! 資料放入至變數的盒子中在程式的世界稱為:指定(assign)

變數的指定是由右邊放至左邊,有方向性

注意! 在程式碼的世界裡 =指定值給變數的意思,與數學的 = 不同

E. 印出變數裡的值

變數與數字一樣不需要用 ""'' 括住唷

_weight = 64
print(_weight) # 64

一次印出多個變數的值

Age = 50
_weight = 64
name = "Alan"
print(Age, _weight, name) # 50 64 Alan

F. 變數間的相互操作

相互指定

google_founder1 = 'Larry Page'
google_founder2 = 'Sergey Brin'

google_founder1 = google_founder2
print(google_founder1) # Sergey Brin

四則運算

n1 = 3
n2 = 10 
print(n1 % n2) # 3

嘗試把 % 換成其它四則運算符號

相加

數字型態

TSMC = 2230
MTK = 2454

TSMC = TSMC + MTK
print(TSMC) # 4684

字串型態

TSMC = '2230'
MTK = '2454'

TSMC = TSMC + MTK
print(TSMC) # 22302454

注意! a = a + b 可以簡寫為 a += b+= 之間不可有空格】

同理,a = a % ba = a // b 這類四則運算也可以簡寫為 a %= ba //= b

交換

方法一:(直接交換)

a = '辣椒'
b = '雞腿'

a, b = b, a

print(a, b) # 雞腿 辣椒

方法二:(透過另一個中介變數交換)

a = '辣椒'
b = '雞腿'

tmp = a
a = b
b = tmp

print(a, b) # 雞腿 辣椒

G. 變數型態(資料型態)

Python 的變數型態主要分為以下三類

變數型態的轉換

int(a):將變數a轉換成為整數

float(b):將變數b轉換成為浮點數

str(c):將變數c轉換成為字串

# 想想看下方程式碼的執行結果為何是如此?
s = '80' # 字串型態的80
print(s) # 80
print(s*3) # 808080
s = int(s) # 將變入型態由字串轉為整數
print(s) # 80
print(s*3) # 240

此外

# 在此之前,下方寫法是不被允許的
print('3' + 3) # TypeError: can only concatenate str (not "int") to str

# 但在學了型態轉換的概念後,我們可以如下改寫
print('3' + str(3)) # 33

但是,不能轉的型態就無法轉,例如:

ss = "hello" 
int(ss) # ValueError: invalid literal for int() with base 10: 'hello'

確認變數型態

type(a):變數a的資料型態

type(3.14)3.14的資料型態

type("It's always a good time")It's always a good time的資料型態

print(type(3.14)) # <class 'float'>
print(type(10)) # <class 'int'>
print(type('人生的筆畫錯了無法抹滅, 卻可以多加幾筆讓錯誤變美麗')) # <class 'str'>

字元與編碼的轉換

chr:將字元轉成編碼(ASCII code) 或 (Unicode)

ord:將編碼轉為字元

eval將舉凡listtupledictstr、變數都轉為數字型態

ASCII:8 bits,共可儲存128個不同字元。只用於英文字母及符號

Unicode:16 bits,共可儲存65536個不同字元,因此可以包含各國語言及ASCII code(前128個值保留給ASCII code)

utf-8:可視作能調整長度的Unicode,也是目前網路遵循的編碼方式,用1~4個bytes表示字元

H. 刪除變數

box = "打我呀笨蛋"
del box # 刪除變數 box
print (box) # NameError: name 'box' is not defined

II. 輸入

前面有提到過~ 人們由感官接收到外界的資訊需要存在大腦後再進行判斷,電腦接收到的資料則是存在記憶體中(變數)

在Python中,我們利用input() 讀取鍵盤輸入資料

get = input() # 假設鍵盤輸入 hao da
print(get) # hao da

get 變數會存放我們鍵盤所輸入的值(也就是記憶體的某段空間)

照打上方程式碼練習執行看看

A. 包含提示字串的輸入

在input後的小括號中放入一列字串可以提示使用者如何輸入正確數值給此程式

get = input("請輸入一個小數") # 假設輸入3.1416
print(get) # 3.1416
get = input("請輸入您的體重:") # 假設輸入500
print("您的體重為" + get + "公斤") # 您的體重為500公斤

B. 輸入多個值給多個變數

split() 中文翻作:分開,作用是將輸入的值利用空格做分隔,分別放進不同變數中

a, b, c = input('請輸入三字經:').split() # :人之初 性本善 性相近
print(a, b, c) # 人之初 性本善 性相近
n1, n2 = input('請輸入兩個整數:').split() # 55 66
print(n1 + n2) # 5566

n1, n2 = input('請輸入兩個小數:').split() # 5.5 6.6
print(n1 + n2) # 5.56.6

注意! input() 讀進來的值,型態一律為 string(str) 字串型態

split() 小括號中若放入不同符號。則表示用該符號當分隔

n1, n2 = input('請輸入兩個整數:').split('*') # 55 66
print(n1, n2) # ValueError: not enough values to unpack (expected 2, got 1)
n1, n2 = input('請輸入兩個整數:').split('*') # 55*66
print(n1, n2) # 55 66

輸入多個值並同時轉型態

下方程式碼中的 map 是翻譯作:映射、投影

n1, n2 = map(int, input('請輸入兩個整數:').split()) # 55 66
print(n1 + n2) # 121

n1, n2 = map(float, input('請輸入兩個小數:').split()) # 5.5 6.6
print(n1 + n2) # 12.1

III. 異常處理(try ... except)(補充)

有時候,我們會希望程式在錯誤情況發生時,跳出某些警告,而不是讓程式直接停止導致需要重新執行

範例如下

try:
    # 嘗試執行一些程式碼
except:
    # 當程式出現異常時執行這邊的程式碼

執行看看下方程式碼

# 嘗試輸入4或40看看結果
try:
    x, y = map(int, input('請輸入兩個數,來得到相除後的結果:').split())
    print(x / y)
except:
    print('除數不可以為0')

可以有多個except應付多種情況

while True:
    try:
        x, y = map(int, input('請輸入兩個數,來得到相除後的結果:').split())
        print(x / y)
    except ZeroDivisionError:
        print('除數不可以為0')
    except ValueError:
        print('輸入格式有誤')
    except:
        print('程式出現其它異常')

IV. 學習單

Last updated