Bài giảng Lập trình Python - Bài 7: Kiểu dữ liệu từ điển, module và package

pdf 24 trang Gia Huy 17/05/2022 2280
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Python - Bài 7: Kiểu dữ liệu từ điển, module và package", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_python_bai_7_kieu_du_lieu_tu_dien_module.pdf

Nội dung text: Bài giảng Lập trình Python - Bài 7: Kiểu dữ liệu từ điển, module và package

  1. LẬP TRÌNH PYTHON Bài 7: Kiểu dữ liệu từ điển, module và package
  2. Tóm tắt nội dung bài trước ▪ Python có kiểu dữ liệu tập hợp (set) lấy cảm hứng từ tập hợp trong toán học. Set có hai đặc điểm chính: ▪ Các dữ liệu con bên trong nó đôi một khác nhau ▪ Chỉ chứa các dữ liệu loại bất biến (immutable) ▪ Tập hợp không có tính thứ tự, vì vậy không có phép toán chỉ mục và cắt lát, tuy vậy vẫn có thể duyệt các phần tử con trong tập hợp bằng for ▪ Python cung cấp nhiều phương thức, phép so sánh và phép toán hữu ích cho tập hợp ▪ Tập tĩnh (frozenset) là tập hợp bất biến, không thể thay đổi sau khi khởi tạo xong TRƯƠNG XUÂN NAM 2
  3. Nội dung 1. Dictionary (từ điển) 2. Module và Package ▪ Module math 3. Bài tập TRƯƠNG XUÂN NAM 3
  4. Phần 1 Dictionary (từ điển) TRƯƠNG XUÂN NAM 4
  5. Dictionary (từ điển) ▪ Từ điển trong cuộc sống: các mục từ tra cứu ngữ nghĩa ▪ Các mục từ được sắp thứ tự ▪ Các mục từ thường khác nhau, một số từ điển cho phép các mục từ lớn chia thành nhiều mục từ con ▪ Dictionary trong Python lấy cảm hứng từ từ điển trong cuộc sống: ▪ Một mục là một cặp (pair) khóa (key) và giá trị (value) • Tương đương với khái niệm mục từ và ngữ nghĩa trong từ điển thông thường ▪ Các khóa (key) không được trùng nhau, như vậy có thể xem từ điển như một loại set ▪ Các khóa không sắp thứ tự như từ điển thông thường ▪ Chỉ dữ liệu bất biến (immutable) mới được dùng làm khóa TRƯƠNG XUÂN NAM 5
  6. Dictionary (từ điển) ▪ Một cặp trong từ điển viết ở dạng : ▪ Từ điển có thể khai báo trực tiếp dùng cú pháp của set d1 = { } # từ điển rỗng d2 = { 1: 'one', 2: 'two' } # từ điển các cặp số-chuỗi d3 = { 'one': 1, 'two': 2 } # từ điển các cặp chuỗi-số d4 = { 'tên': 'nam', 'sđt': 0} # từ điển hỗ hợp ▪ Như vậy Python coi từ điển là dạng mở rộng của tập hợp ▪ Trường hợp lấy dữ liệu từ nguồn khác, cách thích hợp nhất là sử dụng hàm khởi tạo dict() d5 = dict(d4) # lấy dữ liệu từ d4 print(d5) # {'tên': 'nam', 'sđt': 0} d6 = dict() # tạo từ điển rỗng print(d6) # {} TRƯƠNG XUÂN NAM 6
  7. Dictionary (từ điển) ▪ Python cũng cho phép tạo từ điển bằng bộ suy diễn từ điển, với cú pháp tương tự như bộ suy diễn danh sách ▪ Ví dụ: tạo từ điển gồm các bộ khóa là số tự nhiên nhỏ hơn N và giá trị tương ứng là lập phương của nó n = int(input('N = ')) d = { i: i * i * i for i in range(n) } print(d) ▪ Ví dụ: tạo từ điển có khóa các ký tự xuất hiện trong từ S và giá trị là số lần xuất hiện của ký tự đó trong S S = input('N = ') d = { w : S.count(w) for w in S } print(d) TRƯƠNG XUÂN NAM 7
  8. Dictionary (từ điển) ▪ Chú ý: chỉ những loại dữ liệu immutable (không thể thay đổi) mới có thể dùng làm key của từ điển dic = { (1,2,3):"abc", 3.1415:"abc"} dic = { [1,2,3]:"abc"} # lỗi ▪ Một số phép toán / phương thức thường dùng ▪ len(d): trả về độ dài của từ điển (số cặp key-value) ▪ del d[k]: xóa key k (và value tương ứng) ▪ k in d: trả về True nếu có key k trong từ điển ▪ k not in d: trả về True nếu không có key k trong từ điển ▪ pop(k): trả về value tương ứng với k và xóa cặp này đi ▪ popitem(): trả về (và xóa) một cặp (key, value) tùy ý TRƯƠNG XUÂN NAM 8
  9. Dictionary (từ điển) ▪ Một số phép toán / phương thức thường dùng ▪ get(k): lấy về value tương ứng với key k • Khác phép [] ở chỗ get trả về None nếu k không phải là key ▪ update(w): ghép các nội dung từ từ điển w vào từ điển hiện tại (nếu key trùng thì lấy value từ w) ▪ items(): trả về list các cặp (key, value) ▪ keys(): trả về các key của từ điển ▪ values(): trả về các value của từ điển ▪ pop(k): trả về value tương ứng với k và xóa cặp này đi ▪ popitem(): trả về (và xóa) một cặp (key, value) tùy ý TRƯƠNG XUÂN NAM 9
  10. Dictionary (từ điển) ▪ Dùng zip để ghép 2 list thành từ điển >>> l1 = ["a","b","c"] >>> l2 = [1,2,3] >>> c = zip(l1, l2) >>> for i in c: print(i) ('a', 1) ('b', 2) ('c', 3) TRƯƠNG XUÂN NAM 10
  11. Truy xuất dữ liệu theo khóa ▪ Từ điển cho phép lấy giá trị tương ứng với khóa k bằng phương thứ get(k), nhưng có thể dùng chỉ mục thuận tiện hơn nhiều d = { 1: 'one', 2: 'two', 3: 'three' } print('d.get(3) = ', d.get(3)) # d.get(3) = three print('d[3] = ', d[3]) # d[3] = three print('d.get(9) = ', d.get(9)) # d.get(9) = None print('d[9] = ', d[9]) # KeyError d[3] = 'ba' # cập nhật cặp 3: 'three' thành 3: 'ba' d[4] = 'bốn' # thêm mới cặp 4: 'bốn' print(d) # {1: 'one', 2: 'two', 3: 'ba', 4: 'bốn'} ▪ Chú ý: hai cách này không tương đương. Khi dữ liệu không có trong từ điển, get(k) trả về None còn chỉ mục phát sinh ngoại lệ KeyError TRƯƠNG XUÂN NAM 11
  12. Xóa dữ liệu trong từ điển ▪ Python có nhiều cách để xóa dữ liệu trong từ điển hoặc lấy dữ liệu ra khỏi từ điển ▪ Các phương thức pop, popitem, clear được thiết kế cho những tình huống lập trình khác nhau d = { 1: 'one', 3: 'three', 2: 'two', 0: 'zero' } del d[1] # xóa bỏ mục 1: 'one' print(d) # {3: 'three', 2: 'two', 0: 'zero'} print(d.pop(2)) # 'two' print(d.popitem()) # (0, 'zero') d.clear() # xóa rỗng từ điển print(d) # {} TRƯƠNG XUÂN NAM 12
  13. Kiểm tra dữ liệu trong từ điển ▪ Phép kiểm tra dữ liệu trong từ điển chỉ làm việc với khóa dic = { 1: 'one', 3: 'three', 2: 'two', 0: 'zero' } # kiểm tra có 2 trong từ điển không? True print(2 in dic) # kiểm tra không có 'one' trong từ điển phải không? True print('one' not in dic) # kiểm tra cặp (3, 'three') có trong từ điển không? False print((3, 'three') in dic) TRƯƠNG XUÂN NAM 13
  14. Duyệt dữ liệu trong từ điển ▪ Python cung cấp nhiều phương thức lấy về các nhóm dữ liệu trong từ điển, ta có thể dễ dàng duyệt chúng với vòng lặp for d = { 1: 'one', 3: 'three', 2: 'two', 0: 'zero' } # duyệt từ điển theo khóa: 1, 3, 2, 0 for i in d: print(i) # duyệt từ điển theo khóa: 1, 3, 2, 0 for i in d.keys(): print(i) # duyệt theo cặp khóa-giá trị: (1, 'one'), (3, 'three'), for i in d.items(): print(i) # duyệt theo giá trị: 'one', 'three', 'two', 'zero' for i in d.values(): print(i) TRƯƠNG XUÂN NAM 14
  15. Phần 2 Module và Package TRƯƠNG XUÂN NAM 15
  16. Module (khối) ▪ Trong python, file mã nguồn được xem là một module ▪ Có phần mở rộng .py ▪ Mọi hàm, biến, kiểu trong file là các thành phần của module ▪ Sử dụng module: ▪ Có thể sử dụng các thành phần trong các module khác bằng cách import (nhập/nạp) module đó, đây là phương pháp cơ bản để tái sử dụng lại mã nguồn ▪ Cú pháp: import ▪ Có thể import cùng lúc nhiều module cách nhau bởi dấu phẩy ▪ Nếu muốn sử dụng các hàm, biến trong module thì cần viết tường minh tên module đó ▪ Có thể import riêng một hoặc nhiều hàm từ một module, cú pháp: from import fuc1, fuc2, fucN TRƯƠNG XUÂN NAM 16
  17. Package (gói) ▪ Package = Thư mục các module (lưu trữ vật lý trên ổ đĩa) import numpy A = array([1, 2, 3]) # lỗi A = numpy.array([1, 2, 3]) # ok import numpy as np B = np.array([1, 2, 3]) # ok from numpy import array C = array([1, 2, 3]) # ok ▪ Module và Package giúp quản lý tốt hơn mã nguồn ▪ Nhóm các hàm, biến, lớp xử lý cùng một chủ đề, giúp phân cấp và sử dụng dễ dàng hơn ▪ Giải quyết tranh chấp định danh của thư viện khác nhau ▪ Python có rất nhiều các package hỗ trợ mọi nhu cầu xử lý TRƯƠNG XUÂN NAM 17
  18. Module math ▪ Một module rất thông dụng của python: import math ▪ Math có nhiều hằng số định nghĩa sẵn: ▪ pi: 3.141592 ▪ e: 2.718281 ▪ tau: 6.283185 (2 * pi) ▪ inf: dương vô cùng (âm vô cùng là –math.inf) ▪ nan: not a number (tương đương với float('nan')) ▪ Math chứa nhiều hàm toán học: ▪ ceil(x): trả về số nguyên nhỏ nhất nhưng không nhỏ hơn x ▪ copysign(x, y): copy dấu của y gán sang x • Ví dụ: copysign(1.0, -0.0) trả về -1 ▪ fabs(x): trả về trị tuyệt đối của x TRƯƠNG XUÂN NAM 18
  19. Module math ▪ Math chứa nhiều hàm toán học (tiếp ): ▪ factorial(x): trả về x! ▪ floor(x): trả về số nguyên lớn nhất nhưng không vượt quá x ▪ gcd(a, b): trả về ước số chung lớn nhất của a và b ▪ isinf(x): trả về True nếu x là dương/âm vô cùng ▪ isnan(x): trả về True nếu x là NaN (not a number) ▪ trunc(x): trả về phần nguyên của x ▪ exp(x): trả về ex ▪ log(x[, y]): trả về logy x, mặc định y = e ▪ log10(x): trả về log10 x ▪ pow(x, y): trả về xy ▪ sqrt(x): trả về 2 TRƯƠNG XUÂN NAM 19
  20. Module math ▪ Math cung cấp một số hàm lượng giác: ▪ degrees(x): chuyển x từ radians sang độ ▪ radians(x): chuyển x từ độ sang radians ▪ acos(x): trả về arc cos x (độ đo radians) ▪ asin(x): trả về arc sin x (độ đo radians) ▪ atan(x): trả về arc tang x (độ đo radians) ▪ cos(x): trả về cos x (độ đo radians) ▪ sin(x): trả về sin x (độ đo radians) ▪ tan(x): trả về tang x (độ đo radians) TRƯƠNG XUÂN NAM 20
  21. Phần 4 Bài tập TRƯƠNG XUÂN NAM 21
  22. Bài tập TRƯƠNG XUÂN NAM 22
  23. Bài tập TRƯƠNG XUÂN NAM 23
  24. Bài tập ▪ ▪ ▪ ▪ ▪ ▪ TRƯƠNG XUÂN NAM 24