1. Trang chủ
  2. » Luận Văn - Báo Cáo

Chủ Đề hướng dẫn cho người mới bắt Đầu về python 3 lập trình

23 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hướng Dẫn Cho Người Mới Bắt Đầu Về Python 3 Lập Trình
Tác giả Hoàng Sỹ Dương, Nguyễn Thị Quỳnh Anh, Nguyễn Lâm Tùng
Trường học Trường Đại Học Kinh Tế - Kỹ Thuật Công Nghiệp
Chuyên ngành Công Nghệ Thông Tin
Thể loại Bài Tập Lớn
Định dạng
Số trang 23
Dung lượng 1,41 MB

Nội dung

Lưu ý rằng chúng ta muốn duyệt qua chính lịch sử giao dịch, vì vậy bạn có thể sử dụng danh sách lịch sử giao dịch như là cơ sở cho việc duyệt qua iterable.Cuối cùng, bạn sẽ có thể chạy đ

Trang 1

( Bản Dịch : Tiếng Việt)

Nhóm 19

Trang 2

Bài tập 31.6

Mục tiêu của bài tập này là làm việc với một tập hợp/danh sách

(collection/container), ví dụ như một danh sách (list)

Để làm điều này, chúng ta sẽ quay lại với các lớp liên quan đến Tài khoản (Account)

Bạn cần sửa đổi lớp Account sao cho nó có thể lưu trữ lịch sử các giao dịch

Một giao dịch (Transaction) là một bản ghi của một lần gửi tiền (deposit) hoặc rút

tiền (withdrawal) kèm theo một số tiền

Lưu ý rằng số tiền ban đầu trong tài khoản có thể được xem như là một giao dịch gửi tiền ban đầu

Lịch sử giao dịch có thể được triển khai dưới dạng một danh sách chứa các giao dịch theo thứ tự thời gian Mỗi giao dịch có thể được định nghĩa bởi một lớp (class) với các thuộc tính là hành động (deposit hoặc withdrawal) và số tiền giao dịch

Mỗi khi có một giao dịch gửi tiền hoặc rút tiền, một bản ghi giao dịch mới sẽ được thêm vào danh sách lịch sử giao dịch

Sau đó, bạn cần hỗ trợ việc duyệt qua lịch sử giao dịch của tài khoản sao cho có thể xem lại từng giao dịch gửi tiền hoặc rút tiền Bạn có thể làm điều này bằng cách triển khai giao thức Iterable (tham khảo chương cuối cùng nếu bạn cần xem cách làm)

Lưu ý rằng chúng ta muốn duyệt qua chính lịch sử giao dịch, vì vậy bạn có thể sử dụng danh sách lịch sử giao dịch như là cơ sở cho việc duyệt qua (iterable).Cuối cùng, bạn sẽ có thể chạy đoạn mã sau trong ứng dụng của mình:

Tùy thuộc vào các giao dịch bạn đã thực hiện (gửi tiền và rút tiền), bạn sẽ nhận được một danh sách các giao dịch được in ra như sau:

Trang 3

32.2 Tạo một Set

Một Set được định nghĩa bằng cách sử dụng dấu ngoặc nhọn (ví dụ: {}).{}

Ví dụ: Khi chạy đoạn mã sau, ta sẽ thấy rằng từ "apple" chỉ được thêm vào Set mộtlần:

Lưu ý rằng vì Set là một tập hợp không có thứ tự, bạn không thể truy cập các phần

tử của Set bằng cách sử dụng chỉ số (index)

Kết Quả :

Trang 4

Ở đây, mặc dù chúng ta đã thêm "apple" và "orange" hai lần, nhưng Set sẽ tự động loại bỏ các phần tử trùng lặp, và mỗi phần tử chỉ xuất hiện một lần trong tập hợp.

32.3 Hàm Khởi Tạo Set()

Giống như các kiểu dữ liệu TupleList, Python cung cấp một hàm đã được định nghĩa sẵn có thể chuyển đổi bất kỳ kiểu đối tượng nào có thể lặp lại (iterable) thànhmột Set Cú pháp của hàm là:

set(iterable)

Với một đối tượng có thể lặp lại (iterable), hàm này sẽ trả về một Set mới được tạo

ra từ các giá trị lấy từ đối tượng đó Điều này có nghĩa là một Set có thể dễ dàng được tạo ra từ List Tuple Dictionary, , , hoặc bất kỳ kiểu dữ liệu nào tuân thủ giao thức iterable

Ví dụ: Đoạn mã sau sẽ chuyển đổi một Tuple thành một Set:

32.4 Truy Cập Các Phần Tử trong Set

Khác với List, bạn không thể truy cập các phần tử trong Set thông qua chỉ số (index) Điều này là do Set là một tập hợp không có thứ tự, vì vậy không có chỉ số

để truy cập các phần tử

Tuy nhiên, Set vẫn là một tập hợp có thể lặp qua được (Iterable) Bạn có thể lặp qua các phần tử của Set bằng cách sử dụng câu lệnh for:

Trang 5

Ví dụ:

for item basket: in

print(item)Câu lệnh trên sẽ áp dụng hàm print cho từng phần tử trong Set một cách lần lượt

32.5 Làm Việc với Sets

32.5.1 Kiểm Tra Sự Tồn Tại của Một Phần Tử

Bạn có thể kiểm tra sự tồn tại của một phần tử trong Set bằng cách sử dụng từ khóa

in, ví dụ:

Print (‘apple’ in basket)

Dòng lệnh này sẽ in ra True nếu 'apple' là một phần tử của set basket

32.5.2 Thêm Mục Vào Set

Có thể thêm các mục vào một Set bằng phương thức add():

basket = {'apple', 'orange', 'banana'}

basket.add('apricot')

print(basket)

Kết quả:

{'orange', 'apple', 'banana', 'apricot', ‘pear’}

Nếu bạn muốn thêm nhiều mục vào một Set, bạn có thể sử dụng phương thức

update():

basket = {‘apple’, ‘orange’, ‘banana’ }

basket.update(['apricot', 'mango', 'grapefruit'])

print(basket)

Kết quả:

{'orange', 'apple', 'mango', 'banana', 'apricot', 'grapefruit'}

Giải thích:

Trang 6

 Tham số truyền vào phương thức update() có thể là một set list tuple, , , hoặc dictionary.

 Phương thức update() tự động chuyển đổi tham số vào thành một Set nếu

nó chưa phải là Set, và sau đó thêm các giá trị vào Set gốc

32.5.3 Thay Đổi Mục Trong Set

Không thể thay đổi các mục đã có trong Set

32.5.4 Lấy Độ Dài của Một Set

Giống như các lớp tập hợp (collection/container) khác, bạn có thể lấy độ dài của một Set bằng cách sử dụng hàm len()

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}

print(len(basket)) # generates 4

32.5.5 Lấy Giá Trị Tối Đa và Tối Thiểu trong một Set

Bạn cũng có thể lấy giá trị lớn nhất hoặc nhỏ nhất trong một Set bằng cách sử dụngcác hàm max() và min():

print(max(a_set)) # Lấy giá trị lớn nhất trong a_set

print(min(a_set)) # Lấy giá trị nhỏ nhất trong a_set

32.5.6 Xóa Một Mục trong Set

Để xóa một mục trong Set, bạn có thể sử dụng các hàm remove() hoặc discard()

remove() sẽ xóa một mục trong Set, nhưng nếu mục đó không có trong Set

thì sẽ gây ra lỗi

discard() cũng xóa một mục trong Set, nhưng nếu mục đó không có trong

Set, thì sẽ không gây ra lỗi

Trang 7

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}

{'pear', 'banana', 'orange', 'apple'}

{'pear', 'banana', 'orange'}

Cũng có một phương thức pop() có thể được sử dụng để xóa một phần tử (và trả vềphần tử đó như kết quả khi thực thi phương thức) Tuy nhiên, nó sẽ xóa một phần

tử "cuối cùng" trong set (dù rằng vì set không có thứ tự nên bạn sẽ không biết phần

tử nào sẽ bị xóa)

Phương thức clear() được sử dụng để xóa tất cả các phần tử khỏi set:

basket = {'apple', 'orange', 'banana'}

 remove(): Xóa một phần tử khỏi Set, gây lỗi nếu phần tử không tồn tại

 discard(): Xóa một phần tử khỏi Set, không gây lỗi nếu phần tử không tồn tại

 pop(): Xóa một phần tử và trả về phần tử đó, không xác định được phần tử nào bị xóa do Set không có thứ tự

Trang 8

 clear(): Xóa tất cả các phần tử trong Set.

 len(): Trả về số lượng phần tử trong Set

 max() và min(): Lấy giá trị lớn nhất và nhỏ nhất trong Set

32.5.7 Lồng các Set

Có thể chứa bất kỳ đối tượng bất biến nào trong một set Điều này có nghĩa là một set có thể chứa một tham chiếu đến một Tuple (vì Tuple là bất biến) Vì vậy, bạn có thể viết mã như sau:

#Không thể có các phần tử sau đây

s2 = { {1, 2, 3} }

print(s2)

s3 = { [1, 2, 3] }

print(s3)

Tuy nhiên, bạn có thể sử dụng Frozenset (một loại Set bất biến) và lồng các

Frozenset trong một Set Frozenset giống hệt như một Set, nhưng nó là bất biến (không thể thay đổi) và vì vậy có thể được lồng trong một Set

#Cần chuyển đổi các set và list thành frozensets.

s2 = { frozenset({1, 2, 3}) }

print(s2)

Trang 9

Bạn có thể lồng Tuple trong SetTuple là bất biến.

 Bạn không thể lồng List hoặc Set trong Set vì chúng không phải là bất biến

Frozenset là một loại Set bất biến và có thể được lồng trong một Set

32.6 Các phép toán tập hợp

Bộ chứa tập hợp cũng hỗ trợ các phép toán giống tập hợp như (|), giao (&),hiệu (−) và hiệu đối xứng (^) Các phép toán này dựa trên lý thuyết tập hợp đơn giản

Cho hai tập hợp:

print('Union:', s1 | s2)

Ví dụ, Hợp của hai tập hợp biểu diễn sự kết hợp của tất cả các giá trị trong hai tập

hợp:

s1 = {'apple', 'orange', 'banana'}

s2 = {'grapefruit', 'lime', 'banana'}

Lệnh này sẽ in ra:

Union: {'apple', 'lime', 'banana', 'grapefruit', 'orange'}

Giao của hai tập hợp biểu diễn các giá trị chung giữa hai tập hợp:

Trang 10

Difference: {'apple', 'orange'}

Sự khác biệt đối xứng biểu diễn tất cả các giá trị duy nhất trong hai tập hợp (tức là

nó là nghịch đảo của giao điểm:

print('Symmetric Difference:', s1 ^ s2)

Đầu ra từ hoạt động cuối cùng này là

Symmetric Difference: {'orange', 'apple', 'lime', 'grapefruit'}

Trang 11

Ngoài các toán tử còn có các phiên bản phương thức:

• s1.union(s2) tương đương với s1 | s2

• s1.interaction(s2) tương đương với s1 & s2

• s1.difference(s2) tương đương với s1 − s2

• s1.symmetric_difference(s2) tương đương với s1 ^ s2

Trang 12

Các tài nguyên trực tuyến trên các bộ được liệt kê dưới đây:

Mục tiêu của bài tập này là sử dụng một tập hợp (Set)

Hãy tạo hai tập hợp sinh viên: một tập hợp cho những người đã tham gia kỳ thi

và một tập hợp cho những người đã nộp dự án Bạn có thể sử dụng các chuỗi đơn giản để đại diện cho các sinh viên, ví dụ như:

Cấu hình các tập hợp:

#Cấu hình các set

exam = {' Andrew', 'Kirsty', 'Beth', 'Emily', 'Sue '}

project = {'Kirsty', 'Emily', 'Ian', 'Stuart'}

# Xuất ra các tập hợp cơ bản

print('exam:', exam)

print('project:', project)

Sử dụng các tập hợp này, hãy trả lời các câu hỏi sau:

 Những sinh viên nào đã tham gia cả kỳ thi và nộp dự án?

 Những sinh viên nào chỉ tham gia kỳ thi?

Những sinh viên nào chỉ nộp dự án?

Trang 13

 Liệt kê tất cả sinh viên đã tham gia kỳ thi hoặc nộp dự án (hoặc cả hai).

 Liệt kê tất cả sinh viên đã tham gia kỳ thi hoặc nộp dự án (nhưng không phải

về một Từ điển với một tập hợp các quốc gia và thủ đô của chúng Lưu ý rằng trong một Từ điển, các khóa phải là duy nhất, nhưng các giá trị không nhất thiếtphải duy nhất

Trang 14

 Tùy chọn đầu tiên nhận một chuỗi các cặp khóa: giá trị.

 Tùy chọn thứ hai nhận một bản đồ (mapping) và (tùy chọn) một chuỗi các cặp khóa: giá trị

 Phiên bản thứ ba nhận một dãy các cặp khóa: giá trị và một chuỗi các cặp khóa: giá trị (tùy chọn)

Dưới đây là một số ví dụ minh họa:

# Lưu ý: các khóa không phải là chuỗi

dict1 = dict(uk=' London ', ireland= 'Dublin', france=' Paris' )

print('dict1:', dict1)

# Các cặp khóa: giá trị là tuple

Trang 15

dict2 = dict([('uk', 'London'), ( 'ireland', 'Dublin' ), ( 'france', 'Paris')])

print('dict2:', dict2)

# Các cặp khóa: giá trị là danh sách

dict3 = dict(([ 'uk', 'London' ], [ 'ireland', 'Dublin' ], [ 'france', 'Paris']))

print('dict3:', dict3)

Kết quả in ra:

dict1: {'uk': 'London', 'ireland': 'Dublin', 'france': 'Paris'}

dict2: {'uk': 'London', 'ireland': 'Dublin', 'france': 'Paris'}

dict3: {'uk': 'London', 'ireland': 'Dublin', 'france': 'Paris'}

33.3 Làm việc với Dictionaries

33.3.1 Truy cập các mục thông qua Keys

Bạn có thể truy cập các giá trị trong một Dictionary bằng cách sử dụng

khóa (key) tương ứng của chúng Điều này có thể được chỉ định bằng cách sử

dụng cú pháp dấu ngoặc vuông ('[]') (nơi khóa được đặt trong ngoặc vuông) hoặc phương thức get()

Trang 16

cities['France'] = 'Paris'

33.3.3 Thay đổi giá trị khóa

Giá trị liên kết với khóa có thể được thay đổi bằng cách gán lại giá trị mới bằng

ký hiệu dấu ngoặc vuông, ví dụ:

cities['Wales'] = 'Swansea'

print(cities)

Bây giờ sẽ hiển thị 'Swansea' là thủ đô của xứ Wales:

{'Wales': 'Swansea', 'England': 'London', 'Scotland': 'Edinburgh', 'Northern Ireland': 'Belfast', 'Ireland': 'Dublin'}

• Phương thức popitem() xóa mục được chèn cuối cùng trong từ điển (mặc

dù trước Python 3.7,một mục ngẫu nhiên trong từ điển đã bị xóathay vào đó!) Cặp khóa:giá trị đang bị xóa được trả về từ phương thức

 Từ khóa del xóa mục có khóa được chỉ định khỏi từ điển.Từ khóa này chỉ xóa mục; nó không trả về giá trị liên quan Nó có khả năng hiệu quả hơn pop(<key>)

Ví dụ về từng loại được đưa ra dưới đây:

Cities = {'Wales': 'Cardiff',

'England': 'London',

'Scotland': 'Edinburgh’,

Trang 17

'Northern Ireland': 'Belfast',

Đầu ra của đoạn mã này như sau:

{'Wales': 'Cardiff', 'England': 'London', 'Scotland': 'Edinburgh', 'Northern Ireland': 'Belfast', 'Ireland': 'Dublin'}

{'Wales': 'Cardiff', 'England': 'London', 'Scotland': 'Edinburgh', 'Northern Ireland': 'Belfast'}

{'Wales': 'Cardiff', 'England': 'London', 'Scotland': 'Edinburgh'}

{'Wales': 'Cardiff', 'England': 'London'}

Ngoài ra, phương thức clear() sẽ xóa tất cả các mục trong từ điển:

cities = {'Wales': 'Cardiff',

Trang 18

print(cities)

Tạo ra kết quả sau

{'Wales': 'Cardiff', 'England': 'London', 'Scotland': 'Edinburgh', 'Northern Ireland': 'Belfast', 'Ireland': 'Dublin'} {}

Lưu ý rằng từ điển rỗng được biểu diễn bằng '{}' ở trên, trong đó tập rỗng được biểu diễn là set()

33.3.5 Lặp qua các Khóa

Bạn có thể lặp qua một từ điển bằng cách sử dụng câu lệnh vòng lặp for Vòng lặp for xử lý từng khóa trong từ điển theo lượt Điều này có thể được sử dụng

để truy cập từng giá trị được liên kết với các khóa, ví dụ:

for country cities: in

Belfast Ireland, Dublin

Nếu bạn muốn lặp lại tất cả các giá trị trực tiếp, bạn có thể thực hiện bằng phương thức values() Phương thức này trả về một tập hợp tất cả các giá trị, tất nhiên bạn có thể lặp lại:

for e d.values(): in

print(e)

Trang 19

33.3.6 Các giá trị, khóa và mục (Items)

Có ba phương thức cho phép bạn truy cập vào các nội dung của một

dictionary, đó là values() keys(), và items()

 Phương thức values() trả về một view (cửa sổ) đối với các giá trị của dictionary

 Phương thức keys() trả về một view đối với các khóa của dictionary

 Phương thức items() trả về một view đối với các mục của dictionary (các cặp khóa-giá trị)

Một view cung cấp một cửa sổ động vào các mục trong dictionary, có nghĩa là khi dictionary thay đổi, view sẽ phản ánh những thay đổi đó

Đoạn mã sau đây sử dụng dictionary cities với ba phương thức này:

print(cities.values())

print(cities.keys())

print(cities.items())

Kết quả xuất ra cho thấy rõ rằng tất cả chúng đều liên quan đến một dictionary

bằng cách chỉ ra rằng kiểu dữ liệu là dict_values dict_keys hoặc dict_items, dict_values(['Cardiff', 'London', 'Edinburgh', 'Belfast', 'Dublin'])

dict_keys(['Wales', 'England', 'Scotland', 'Northern Ireland', 'Ireland'])

dict_items([('Wales', 'Cardiff'), ('England', 'London'), ('Scotland', 'Edinburgh'), ('Northern Ireland', 'Belfast'), ('Ireland', 'Dublin')])

33.3.7 Kiểm tra sự có mặt của khóa

Bạn có thể kiểm tra xem một khóa có phải là thành viên của một dictionary hay không bằng cách sử dụng cú pháp (và kiểm tra xem nó không có trong in

dictionary bằng cú pháp not in), ví dụ:

print('Wales' cities) in

print('France' not in cities)

Trang 20

Cả hai đều in ra True đối với dictionary cities.

33.3.8 Lấy độ dài của một Dictionary

Một lần nữa, giống như các lớp tập hợp khác, bạn có thể biết độ dài của một

Dictionary (theo số cặp khóa:giá trị) bằng cách sử dụng hàm len()

cities = {'Wales': 'Cardiff',

Một mẫu phổ biến là khi giá trị trong một dictionary lại chính là một container, chẳng hạn như List Tuple Set, , hoặc thậm chí là một Dictionary khác

Ví dụ dưới đây sử dụng Tuples để đại diện cho các tháng trong các mùa:

seasons = {'Spring': ('Mar', 'Apr', 'May'),

'Summer': ('June', 'July', 'August'),

'Autumn': ('September', 'October', 'November'),

'Winter': ('December', 'January', 'February')}

Trang 21

Mỗi mùa có một Tuple làm phần giá trị của mục (entry) Khi Tuple này được trả

về bằng cách sử dụng khóa, nó có thể được xử lý giống như bất kỳ Tuple nào khác.

Lưu ý rằng trong trường hợp này, chúng ta hoàn toàn có thể sử dụng một List hoặc thậm chí là một Set thay vì Tuple.

33.4 Lưu ý về Các Đối Tượng Khóa trong Dictionary

Một lớp mà đối tượng của nó sẽ được sử dụng làm khóa trong một dictionary nên xem xét việc triển khai hai phương thức đặc biệt, đó là hash () và eq ()

 Phương thức hash () được sử dụng để tạo ra một số băm (hash number)

có thể được sử dụng bởi container dictionary

 Phương thức eq () được sử dụng để kiểm tra xem hai đối tượng có bằng nhau hay không

Python có hai quy tắc liên quan đến các phương thức này:

Nếu hai đối tượng bằng nhau, thì băm (hash) của chúng phải bằng nhau

Để một đối tượng có thể được băm, nó phải là bất biến (immutable).Python cũng có hai tính chất liên quan đến mã băm (hashcodes) của một đối tượng

Ngày đăng: 09/01/2025, 15:59

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN