縮排和註解
縮排 (Indentation)
- 相當於四個 Spaces,或是一個 Tab。
- 利用
縮排
而非 大括號 { } 來辨識程式的執行區塊。 - 注意:「同一個段落裡,只能使用一種縮排方式」,因此不論是使用幾個空白或是 tab,只要「不要混用」,程式就不會發生錯誤。
x = 1
if x == 1:
print("x is 1.")
註解 (Comments)
- 方便理解程式碼在寫啥。
- 註解內不會被執行。
# 我是單行註解
"""
我是
多行註解
"""
'''
我是
多行註解
'''
Variable (變數)
💡 Python 不需要在使用前先宣告變數,也不需要幫變數宣告資料型別。
因為 Python 能自動辨別資料型別 (Types)。【 動態型別 】
變數,表示的是「某個物件」的「名稱」,當給予某個變數內容時,其實是將內容放入一個物件「容器」中儲存,然後「給予這個物件一個變數名稱」。
簡單來說,是指「內容會改變」的數,舉凡文字、數字、布林值 (邏輯)、陣列 ...等內容格式,都可以是變數所包含的內容。
a = 1 print(a) # 得到結果 1 a = b = 3.14 print(a, b) # 得到結果 3.14 3.14 a, b, c = 1, 2, 3 print(a) # 1 print(b) # 2 print(c) # 3
- 變數命名
- 開頭不能為數字
- 使用 A-z, 0-9 命名
- 請勿使用
保留字
來做為變數的命名!
# Python 的保留字 (Reserved Word)
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']
- 好的變數名稱
- 把握一個重點:「看到變數的名稱,就知道是儲存什麼資料」
- 「常數」,即變數的內容不會被改變的數
- 變數名稱建議「全部用大寫英文字母」,例如 LOG_PATH。
- 「變數名稱包含專有名詞」,例如 HTTP、APP,
- 變數名稱使用原來的大小寫格式,例如 HTTP_port、APP_port。
- 命名方式二擇一
- 駝峰式命名(Camel Case)
- e.g.
EnglishScore = 100
- e.g.
- 以
_
底線隔開來命名- e.g.
english_score = 100
- e.g.
- 駝峰式命名(Camel Case)
- 「常數」,即變數的內容不會被改變的數
- 把握一個重點:「看到變數的名稱,就知道是儲存什麼資料」
全域變數 vs. 區域變數
一個變數的名稱,除了可以代表不同的東西,也表示「哪裡可以使用」這個變數。
- Python 裡的主程式與每個函式,都有各自的名稱空間 (namespace):
- 主程式:「全域變數」的作用範圍,定義「全域」的名稱空間
- 全域變數 = 主程式裡定義的變數
- 個別函式:「區域變數」的作用範圍,定義「區域」的名稱空間
- 區域變數 = 個別函式裡定義的變數
- 每個名稱空間裡的變數名稱都是「唯一的」
- 不同名稱空間內的變數,其名稱可以相同
- 如:函式 f1() 可以定義 a 變數,函式 f2() 亦同,但兩個 a 變數的值是完全不同的。
- 主程式:「全域變數」的作用範圍,定義「全域」的名稱空間
def f1():
a = 1 # 定義區域變數 a 等於 1
print(a)
def f2():
a = 2 # 定義區域變數 a 等於 1
print(a)
b = 3 # 定義全域變數 b 等於 3
print(f1()) # 1
print(f2()) # 2
數值
💡 Python 3 整數就是整數,不再區分整數與長整數。
整數的長度不受限制(除了硬體上的限制之外)。
- Python 裡,數字又分成「整數」、「浮點數」(小數) 和「底數」,數字可以進行各種數學式的運算,也可以進行各種邏輯比較、時間表達等以數字為主的運算。
Integer 整數
整數,表示沒有分數或小數點的十進位數字。
# 查看「型別」 type(5) # <class 'int'>
依循「先乘除後加減」的規則。
- 運算子
+
,-
,*
,/
//
除法取整數 ( 無條件捨去 )%
餘數**
次方
- 運算子
- int 函式也可以進行二進制、八進制、十六進制的轉換。
int('101', 2) # 5 二進制 int('101', 8) # 65 八進制 int('101', 16) # 257 十六進制
Float 浮點數
- 浮點數,表示包含小數點的十進位數字
- 注意,由於計算機有位元數限制,有小數點的數字最多只有 15 位有效數字。
# 查看「型別」
type(3.14) # <class 'float'>
Complex 複數
a = 1 + 2j
print(type(a))
# <class 'complex'>
底數
- 底數是在數字的前方,加入 0b、0o 或 0x 的底數,來表示二進制、八進制或十六進制的數字,在「位元級」的模式下,往往是使用二進制、八進制或十六進制進行操作。
- 底數
0b 或 0B
: 二進制0o 或 0O
: 八進制0x 或 0X
: 十六進制
- 底數
0b1111 # 15 ( 二進制 )
0o1111 # 585 ( 八進制 )
0x1111 # 4369 ( 十六進制 )
Bool 布林
- 布林值可設定為兩種值 : True 或 False
- True = 1
- Fasle = 0
- 透過特殊函示 bool() 可以將任何資料型態轉換成布林,布林主要運用在邏輯判斷中,可以根據得到的布林值,作出對應的動作。
- 布林值通常是一個運算的結果。
bool(True) # True
bool(1) # True
bool('ok') # True
bool(-1) # True
bool(False) # False
bool(0) # False
bool(0.0) # False
a = 1
b = 2
print(a != b) # True
print(a == b) # False
字串
💡 Python 的強項之一,支援字串的運算。
- 字串是 Python 裡最常使用的序列,可以包含字母、數字、符號、標點甚至空格、換行。
建立字串
- 單行字串
- 將字元 (字母、符號或數字) 放在一對「單引號」或「雙引號」裡。
print("'oxxo' is my name") # 'oxxo' is my name
- 將字元 (字母、符號或數字) 放在一對「單引號」或「雙引號」裡。
多行字串 (文字很多且會換行)
將多行字串放在「連續三個」單引號或雙引號裡,就會原封不動的印出結果。
a = """123 456 789""" print(a) # '123\n456\n789' b = '''aaa \ bbb \ ccc''' print(b) # 'aaa bbb ccc' 💡 字串內寫的所有格式(空白、換行...),皆會直接反映在輸出上。 sent4 = """別害怕別人怎麼看你, 因為 根本沒人會看你 ^ ^""" sent5 = ''' 感情這條路上挺順暢, 因為 這一路上都沒人 0.0 '''
轉義字元 = 跳脫字元
- 「轉義」表示「轉換字串內一些字元的含義」,亦即可以顯示那些無法在螢幕上顯示的符號。
只要在需要轉換的字元前方,加上「反斜線 \」,就能賦予其特殊意義。
\
(放在一行結尾):接續下一行\\
:顯示反斜線\'
和\"
:顯示單引號 和 雙引號\n
和\t
:換行 和 tab 鍵print('hello "World", my name is \'oxxo\', \\_\\') # hello "World", my name is 'oxxo', \_\ # 方法一:使用 反斜線 (跳脫字元) 來處理。 sent1 = "憂国の\"モリアーティ\"" sent2 = 'I\'m Bessy.' # 方法二:若是字串本身包含單引號,可以使用雙引號以利區別。反之亦然。 sent1 = '憂国の"モリアーティ"' sent2 = "I'm Bessy." print(sent1) # 憂国の"モリアーティ" print(type(sent1)) # <class 'str'>
前方加上 r
字串的前方加上「r」,表示這個字串為「raw string」,不要進行轉義。
a = r'123\n456' b = '123\n456' print(a) # 123\n456 print(b) # 123 # 456
- 結合字串
- 串接多個字串 (字串相加)
- 使用
+
可以針對「變數」與「字串」進行結合。 - e.g.
a = '在哪裡跌倒,' + '就在那躺下。'
- 使用
- 串接多個字串 (字串相加)
- 重複字串
- 重複印出相同字串
- 字串後方使用
*
加上數字,可以指定該字串要重複幾次。 - e.g.
a = 'ok' * 10
- 字串後方使用
- 重複印出相同字串
- 單行字串
強制型別轉換
- 強制轉換為字串:
str()
- 強制轉換為整數:
int()
int("3.4")
產生錯誤int("003")
將會回傳 3
- 強制轉換為可計算的數值 (可處理較複雜的轉換):
eval()
eval("3+4")
將會回傳 7eval("003")
產生錯誤
- 強制轉換為浮點數:
float()
輸入與輸出
輸入 (Input)
input(prompt=None)
- prompt:提示信息
input() 默認使用者輸入的是一個「字串 (str)」型別。
💡 經常與 input() 函式一起使用。 number = eval(input("請輸入任意數值:")) # 此時,number 為字串,其需要轉換成數值,才能進行數值運算。
輸出 (Output)
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- sep:預設使用
space 空格
來間隔。 end:預設使用
\n 換行
來結尾。print("I", "am", "xxx", sep="/", end="@") # I/am/xxx@ print('哈囉' + str(123)) # 哈囉123
補充:pprint()
- 一種 Python 標準化輸出的輸出模式。
- [經典用法] 將 Dictionary 的資料型態按照 Key-Value 由上到下印出,屬於人類較容易閱讀的版面。
from pprint import pprint
animals = {'dog': 1, 'cat': 2, 'elephant': 3, 'alligator': 4, 'ape': 5, 'baboon': 6, 'bear': 7}
pprint(animals)
{'alligator': 4,
'ape': 5,
'baboon': 6,
'bear': 7,
'cat': 2,
'dog': 1,
'elephant': 3}
格式化輸出
format()
格式化
「{}」和「foramt()」是 Python 3 所使用的「新式」格式化,操作方式為「格式化字串.format(資料)」,輸出結果會將資料插入格式化字串的位置。
- {} 裡可以填入數字,數字表示「填入資料的順序」
- {} 裡可以填入具名引數,放入指定名稱的內容。
{} 裡可以填入字典的引數,放入指定的字典內容。
# 填入數字 a = 'hello {1}, I am {0}' b = a.format('world', 'oxxo') print(b) # hello oxxo, I am world ( world 和 oxxo 互換了 ) # 填入具名引數 a = 'hello {m}, I am {n}' b = a.format(m='world', n='oxxo') print(b) # hello world, I am oxxo # 填入字典的引數 a = 'hello {0[x][m]}, I am {0[y][m]}' b = {'x': {'m':'world', 'n':'oxxo'}, 'y':{'m':'QQ', 'n':'YY'}} c = a.format(b) print(c) # hello world, I am QQ
數值 (整數)、字串
sent1 = "世界上只有騙子肯定是真心,因為他是真心想騙你。" sent2 = "我最擅長的戀愛就是自戀,因為愛自己沒情敵。" sent3 = "以前我以為錢可以買到一切,後來才發現沒有辦法,因為我錢不夠。" print("# 幹話語錄\n\n {}. {}\n\n {}. {}\n\n {}. {}".format(1, sent1, 2, sent2, 3, sent3)) print("# 幹話語錄\n\n {no1}. {first}\n\n {no2}. {second}\n\n {no3}. {third}".format(no1=1, no2=2, no3=3, first=sent1, second=sent2, third=sent3))
- 浮點數
# 精確度為 3 位,四捨五入 print(format(1234.5678, ".3f")) # 1234.568
%
格式化
% 的字串格式化是「舊式」的格式化方法,適用於 Python 2.x 和 Python 3.x,操作方式為「格式化字串 % 資料」,輸出結果會將資料插入格式化字串的位置。
%s
:字串# 字串 print('My name is %s.' % 'Bessy') # My name is Bessy. print('%s world' % 'hello') # hello world print('%12s world' % 'hello') # hello world print('%+12s world' % 'hello') # hello world print('%-12s world' % 'hello') # hello world
a = '%s world, ther are %f dollars!' b = a % ('hello', 2.5) print(b) # hello world, ther are 2.500000 dollars!
%d
:十進制整數 (會將浮點數的小數點無條件捨去)%f
:十進制浮點數 (會將整數轉換成浮點數)# 數值 print('%.3f world' % 123.456789) # 123.457 world