Python 的 Tuples、Sets 和 Dictionaries 提供了多元的資料儲存和操作方式。Tuples 的不可變特性適用於儲存固定資料,Sets 的無序性和唯一性則適合處理集合運算,Dictionaries 的鍵值對結構則能有效組織和存取資料。透過理解這些資料結構的特性,開發者能更有效率地處理各種資料操作任務。文章中除了基本操作外,更進一步探討瞭如何應用字典表示多項式、計算 Orange Cap 得主以及使用 Turtle 模組繪製圖形等進階應用,展現了這些資料結構在實際程式設計中的靈活性。
Python 中的 Tuples、Sets 和 Dictionaries 應使用案例項
在 Python 程式設計中,Tuples、Sets 和 Dictionaries 是三種非常重要的資料結構,它們各自具有獨特的特性與應用場景。本篇文章將探討 Dictionaries 的相關應用,並透過具體的程式範例來展示其強大的功能。
字典(Dictionaries)基礎操作
字典是一種無序的鍵值對集合,其中鍵(Key)是唯一的,而值(Value)則可以是任意型別的資料。字典在 Python 中使用大括號 {} 來定義。
範例 1:存取字典中的資料
Players = {
"Virat Kohli": {"ODI": 7212, "Test": 3245},
"Sachin Tendulkar": {"ODI": 18426, "Test": 15921}
}
# 方法 1:直接存取
for Player_Name, Player_Details in Players.items():
print(" ", Player_Name)
print(" ", Player_Details)
# 方法 2:存取特定資訊
for Player_Name, Player_Details in Players.items():
print(" Player: ", Player_Name)
print(" Run Scored in ODI:\t", Player_Details["ODI"])
print(" Run Scored in Test:\t", Player_Details["Test"])
內容解密:
- 在第一種方法中,我們使用
Players.items()來迭代字典中的鍵值對,其中Player_Name代表鍵(球員名稱),而Player_Details則代表對應的值(球員詳細資訊)。 - 在第二種方法中,我們進一步存取了
Player_Details這個內嵌字典中的特定資訊,如 ODI 和 Test 的得分。
最佳化字典的輸出
為了使程式碼更具可維護性,我們可以透過巢狀迴圈來迭代字典中的所有資訊。
Players = {
"Virat Kohli": {"ODI": 7212, "Test": 3245},
"Sachin Tendulkar": {"ODI": 18426, "Test": 15921}
}
for Player_Name, Player_Details in Players.items():
print(" ", Player_Name)
for key in Player_Details:
print(key, ':', str(Player_Details[key]))
內容解密:
- 外層迴圈迭代主字典中的球員名稱及其對應的詳細資訊。
- 內層迴圈則進一步迭代每個球員的詳細資訊字典,輸出各項統計資料的鍵值對。
簡易字典程式範例
範例 2:計算字串中字元的頻率
def Histogram(S):
D = dict() # 建立空字典
for C in S:
if C not in D:
D[C] = 1
else:
D[C] = D[C] + 1
return D
H = Histogram("AAPPLE")
print(H)
內容解密:
- 函式
Histogram(S)將字串S作為輸入,並建立一個空字典D。 - 透過迭代字串中的每個字元
C,如果C不在字典中,則新增該字元並將其計數設為 1;若已存在,則增加其計數。
範例 3:使用 get() 方法計算字元頻率
def Histogram(S):
D = dict()
for C in S:
D[C] = D.get(C, 0) + 1
return D
H = Histogram("AAPPLE")
print(H)
內容解密:
- 使用
get()方法簡化了字元頻率的計算:如果鍵不存在,則傳回預設值 0。
範例 4:將數字的平方存入字典
def Sq_of_numbers(n):
d = dict()
for i in range(1, n+1):
d[i] = i * i
return d
Z = Sq_of_numbers(5)
print(Z)
內容解密:
- 此函式計算從 1 到
n的數字的平方,並將結果存入字典中。
範例 5:計算列表中正負數的數量
def abc(L):
D = {"Pos": 0, "Neg": 0}
for x in L:
if x > 0:
D["Pos"] += 1
else:
D["Neg"] += 1
print(D)
L = [1, -2, -3, 4]
abc(L)
內容解密:
- 此函式初始化一個字典
D以計數正數和負數。 - 迭代輸入列表
L,根據數值的正負更新字典中的計數。
這些範例展示了 Python 中字典的靈活性和強大功能。無論是處理複雜的資料結構還是進行簡單的資料統計,字典都是不可或缺的工具。透過掌握字典的操作,可以大幅提升程式設計的效率和可讀性。
Python 中的 Tuples、Sets 和 Dictionaries 深入解析
在 Python 程式設計中,Tuples、Sets 和 Dictionaries 是三種非常重要的資料結構,它們各自具有獨特的特性與應用場景。本篇文章將探討這三種資料結構的概念、操作方法和實際應用案例。
Tuples 的特性與應用
Tuples 是一種不可變的序列資料型態,可以儲存多個不同型別的元素。與 List 不同,Tuples 的內容一旦建立就無法修改,這使得 Tuples 成為儲存固定資料的理想選擇。
將八進位數字轉換為二進位表示
以下是一個將八進位數字轉換為二進位表示的範例程式碼:
def Convert_Oct_Bin(octal, octToBinaryTable):
binary = ''
for digit in octal:
binary = binary + octToBinaryTable[digit]
return binary
octToBinaryTable = {
'0': '000', '1': '001', '2': '010',
'3': '011', '4': '100', '5': '101',
'6': '110', '7': '111'
}
print(Convert_Oct_Bin("553", octToBinaryTable)) # 輸出:101101011
print(Convert_Oct_Bin("127", octToBinaryTable)) # 輸出:001010111
程式碼解析
- 函式定義:
Convert_Oct_Bin函式接受兩個引數:八進位數字字串和一個對應表。 - 轉換邏輯:遍歷八進位數字的每個字元,利用對應表將其轉換為三位二進位表示並串接起來。
- 輸出結果:最終傳回完整的二進位表示字串。
使用 Dictionaries 表示多項式
在 Python 中,Dictionaries 可用於表示多項式,其中鍵代表變數的冪次,值代表對應的係數。
多項式表示範例
考慮多項式 $P(Y) = -2 + Y^2 + 3Y^6$,可以使用 Dictionary 表示為:
P = {0: -2, 2: 1, 6: 3}
這種表示方法相比於 List 更為節省空間,尤其是在處理高次多項式時。
評估多項式的值
以下是一個評估多項式值的範例程式碼:
def Eval_Poly(P, X):
total = 0
for power in P:
total += P[power] * (X ** power)
print('多項式評估結果:', total)
P = {0: -2, 2: 1, 3: 3}
Eval_Poly(P, 2) # 輸出:26
程式碼解析
- 函式定義:
Eval_Poly函式接受兩個引數:表示多項式的 Dictionary 和變數的值。 - 評估邏輯:遍歷 Dictionary 中的每個鍵值對,將係數與變數的冪次相乘後累加。
- 輸出結果:最終輸出多項式的評估結果。
Orange Cap 計算器實作
Orange Cap 是板球比賽中頒發給單一賽事中最高得分球員的獎項。以下是一個計算 Orange Cap 得主的 Python 程式:
def orangecap(matches):
total_scores = {}
for match in matches:
for player, score in matches[match].items():
if player in total_scores:
total_scores[player] += score
else:
total_scores[player] = score
max_score = -1
top_player = ''
for player, score in total_scores.items():
if score > max_score:
max_score = score
top_player = player
return (top_player, max_score)
result = orangecap({
'test1': {'Dhoni': 74, 'Kohli': 150},
'test2': {'Dhoni': 29, 'Pujara': 42}
})
print(result) # 輸出:('Kohli', 150)
程式碼解析
- 函式定義:
orangecap函式接受一個包含各場比賽球員得分的 Dictionary。 - 計算總分:遍歷所有比賽,累計每個球員的總得分。
- 找出最高得分者:比較所有球員的總得分,找出最高得分者及其得分。
Tuples、Sets 與 Dictionaries 的深入解析
在 Python 程式設計中,Tuples、Sets 和 Dictionaries 是三種重要且常用的資料結構。本篇文章將探討這三種資料結構的特性、使用方法以及常見的應用場景,並提供實用的範例和練習題,以幫助讀者更好地理解和掌握這些概念。
Tuples 的基本概念與操作
Tuple 是 Python 中的一種不可變(immutable)資料結構,用於儲存多個元素。Tuple 的元素可以是任意資料型別,包括數字、字串、列表等。Tuple 的定義使用小括號 (),元素之間以逗號分隔。
建立 Tuple
建立 Tuple 的基本語法如下:
my_tuple = (1, 2, 3, "hello", 4.5)
Tuple 的特性
- 不可變性:Tuple 的元素一旦建立後就不能被修改。
- 有序性:Tuple 中的元素是有序的,可以透過索引存取。
Tuple 的操作
索引與切片:Tuple 支援索引和切片操作,用於存取特定的元素或子集合。
my_tuple = (1, 2, 3, 4, 5) print(my_tuple[0]) # 輸出:1 print(my_tuple[1:3]) # 輸出:(2, 3)連線與重複:可以使用
+運算元連線兩個 Tuple,使用*運算元重複 Tuple 中的元素。tuple1 = (1, 2) tuple2 = (3, 4) print(tuple1 + tuple2) # 輸出:(1, 2, 3, 4) print(tuple1 * 3) # 輸出:(1, 2, 1, 2, 1, 2)
Sets 的基本概念與操作
Set 是 Python 中的一種無序且不重複的資料結構,用於儲存多個唯一的元素。Set 的定義使用大括號 {} 或 set() 函式。
建立 Set
建立 Set 的基本語法如下:
my_set = {1, 2, 3, "hello"}
# 或者
my_set = set([1, 2, 3, "hello"])
Set 的特性
- 無序性:Set 中的元素是無序的,不能透過索引存取。
- 唯一性:Set 中的元素是唯一的,不允許重複。
Set 的操作
新增與刪除元素:可以使用
add()方法新增元素,使用remove()或discard()方法刪除元素。my_set = {1, 2} my_set.add(3) print(my_set) # 輸出:{1, 2, 3} my_set.remove(2) print(my_set) # 輸出:{1, 3}集合運算:Set 支援多種集合運算,包括聯集、交集、差集和對稱差集。
set1 = {1, 2, 3} set2 = {3, 4, 5} print(set1.union(set2)) # 輸出:{1, 2, 3, 4, 5} print(set1.intersection(set2)) # 輸出:{3} print(set1.difference(set2)) # 輸出:{1, 2} print(set1.symmetric_difference(set2)) # 輸出:{1, 2, 4, 5}
Dictionaries 的基本概念與操作
Dictionary 是 Python 中的一種鍵值對(key-value pair)資料結構,用於儲存多個鍵值對。Dictionary 的定義使用大括號 {}。
建立 Dictionary
建立 Dictionary 的基本語法如下:
my_dict = {"name": "John", "age": 30}
Dictionary 的特性
- 鍵的唯一性:Dictionary 中的鍵是唯一的,不允許重複。
- 值的任意性:Dictionary 中的值可以是任意資料型別。
Dictionary 的操作
新增與修改鍵值對:可以使用指定陳述式新增或修改鍵值對。
my_dict = {"name": "John"} my_dict["age"] = 30 print(my_dict) # 輸出:{'name': 'John', 'age': 30}存取值:可以使用鍵存取值。
my_dict = {"name": "John", "age": 30} print(my_dict["name"]) # 輸出:John
常見問題與解答
Q: Tuple 和 List 有什麼區別?
A: Tuple 是不可變的,而 List 是可變的。Tuple 使用小括號 () 定義,而 List 使用方括號 [] 定義。
Q: 如何建立一個空的 Set?
A: 可以使用 set() 函式建立一個空的 Set。
Q: Dictionary 中的鍵可以是任意資料型別嗎?
A: 不可以,Dictionary 中的鍵必須是不可變的資料型別,如字串、整數或 Tuple。
使用Turtle圖形模組進行圖形程式設計
Turtle圖形模組是Python內建的一個圖形套件,允許使用者繪製線條、圓形及其他形狀,包括文字。Turtle本質上是一個螢幕上的遊標,用於繪製圖形。匯入Turtle模組後,程式設計師可以存取Python中的所有圖形函式。
開始使用Turtle模組
要開始使用Turtle模組,可以採用Python的互動模式(命令列)或指令碼模式。以下是使用互動模式的步驟:
- 啟動Python,輸入
import Turtle以匯入Turtle模組。 - 輸入
Turtle.showTurtle()以顯示Turtle的目前位置和方向。
執行上述陳述式後,Python的Turtle圖形視窗將會顯示出來。
在任意方向上移動Turtle
Turtle是一個物件,當匯入Turtle模組時就會被建立。預設情況下,Turtle的位置被設定在Turtle圖形視窗的中心,其方向被設定為向右。
Turtle模組提供了多種方法來移動Turtle,包括:
Turtle.forward(P):將Turtle向前移動P畫素。Turtle.left(angle):將Turtle向左旋轉指定的角度。Turtle.right(angle):將Turtle向右旋轉指定的角度。Turtle.backward(P):將Turtle向後移動P畫素。
程式碼範例1:繪製正方形
import Turtle
Turtle.forward(100)
Turtle.left(90)
Turtle.forward(100)
Turtle.left(90)
Turtle.forward(100)
Turtle.left(90)
Turtle.forward(100)
內容解密:
此程式碼範例展示瞭如何使用Turtle模組繪製一個正方形。首先,將Turtle向前移動100畫素,然後向左旋轉90度,重複此過程四次,即可完成正方形的繪製。
控制Turtle的畫筆狀態
Turtle模組提供了多種方法來控制畫筆的狀態,包括:
Turtle.pendown():將畫筆放下,開始繪圖。Turtle.penup():將畫筆抬起,停止繪圖。Turtle.pensize(width):設定畫筆的寬度。
程式碼範例2:控制畫筆狀態
import Turtle
Turtle.penup()
Turtle.forward(100)
Turtle.pendown()
Turtle.forward(100)
Turtle.pensize(5)
Turtle.forward(100)
內容解密:
此程式碼範例展示瞭如何控制畫筆的狀態。首先,將畫筆抬起並向前移動100畫素,然後將畫筆放下並向前移動100畫素,最後設定畫筆的寬度為5並向前移動100畫素。
將Turtle移動到任意位置
預設情況下,Turtle的位置在圖形視窗的中心。要將Turtle移動到其他位置,可以使用相關的方法。
繪製基本形狀
使用Turtle模組可以繪製各種基本形狀,如線條、圓形、多邊形等。
程式碼範例3:繪製多邊形
import Turtle
for _ in range(8):
Turtle.forward(50)
Turtle.left(45)
內容解密:
此程式碼範例展示瞭如何使用迴圈繪製一個正八邊形。透過重複將Turtle向前移動50畫素並向左旋轉45度的動作,即可完成多邊形的繪製。
使用顏色繪圖
Turtle模組支援使用顏色繪圖,可以設定畫筆的顏色和背景顏色。
使用列表動態改變顏色
可以透過列表來動態改變畫筆的顏色,從而實作色彩豐富的圖形效果。
使用Turtles建立長條圖
可以利用多個Turtles來建立長條圖,以視覺化的方式呈現資料。
程式碼範例4:使用Turtles建立長條圖
import Turtle
# 設定初始位置
Turtle.penup()
Turtle.goto(-200, -200)
Turtle.pendown()
# 繪製長條圖
data = [10, 20, 30, 40, 50]
for value in data:
Turtle.begin_fill()
for _ in range(2):
Turtle.forward(value)
Turtle.left(90)
Turtle.forward(20)
Turtle.left(90)
Turtle.end_fill()
Turtle.penup()
Turtle.forward(30)
Turtle.pendown()
內容解密:
此程式碼範例展示瞭如何使用多個Turtles建立一個簡單的長條圖。首先,設定初始位置,然後根據資料值繪製每個長條,並使用begin_fill()和end_fill()方法填充顏色。最後,將畫筆向前移動以繪製下一個長條。