Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
526,13 KB
Nội dung
TRƯỜNG ĐẠI HỌC THỦY LỢI Khoa Công nghệ thông tin Bộ mơn Tin học KTTT LẬP TRÌNH PYTHON Giảng viên: TS.GVC Bùi Thị Thanh Xuân Email: xuanbtt@tlu.edu.vn Điện thoại: 0902001581 Nội dung Dictionary (từ điển) Module Package ➢Module math Bài tập Dictionary (từ điển) ❖Từ điển sống: mục từ tra cứu ngữ nghĩa ➢Các mục từ thứ tự ➢Các mục từ thường khác nhau, số từ điển cho phép mục từ lớn chia thành nhiều mục từ ❖Dictionary Python lấy cảm hứng từ từ điển sống: ➢Một mục cặp (pair) khóa (key) giá trị (value) ▪ Tương đương với khái niệm mục từ ngữ nghĩa từ điển thơng thường ➢Các khóa (key) khơng trùng nhau, xem từ điển loại set ➢Các khóa khơng thứ tự từ điển thơng thường ➢Chỉ liệu bất biến (immutable) dùng làm khóa Dictionary (từ điển) ❖Một cặp từ điển viết dạng : ❖Từ điển khai báo trực tiếp dùng cú pháp set d1 = { d2 = { chuỗi d3 = { số d4 = { } 1: 'one', 2: 'two' } # từ điển rỗng # từ điển cặp số- 'one': 1, 'two': } # từ điển cặp chuỗi- 'tên': 'nam', 'sđt': 0} # từ điển hỗn hợp ❖Như Python coi từ điển dạng mở rộng tập hợp ❖Trường hợp lấy liệu từ nguồn khác, cách thích hợp sử dụng hàm khởi tạo dict() d5 = dict(d4) print(d5) d6 = dict() print(d6) # # # # lấy liệu từ d4 {'tên': 'nam', 'sđt': 0} tạo từ điển rỗng {} Dictionary (từ điển) ❖Python cho phép tạo từ điển suy diễn từ điển, với cú pháp tương tự suy diễn danh sách ❖Ví dụ: tạo từ điển gồm khóa số tự nhiên nhỏ N giá trị tương ứng lập phương 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 ký tự xuất từ S giá trị số lần xuất ký tự S S = input('N = ') d = { w : S.count(w) for w in S } print(d) Dictionary (từ điển) ❖Chú ý: loại liệu immutable (khơng thể thay đổi) dùng làm key 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ả độ dài từ điển (số cặp key-value) ➢del d[k]: xóa key k (và value tương ứng) ➢k in d: trả True có key k từ điển ➢k not in d: trả True khơng có key k từ điển Dictionary (từ điển) ❖Một số phép toán / phương thức thường dùng ➢get(k): lấy value tương ứng với key k ▪ Khác phép [] chỗ get trả None k key ➢update(w): ghép nội dung từ từ điển w vào từ điển (nếu key trùng lấy value từ w) ➢items(): trả list cặp (key, value) ➢keys(): trả key từ điển ➢values(): trả value từ điển ➢pop(k): trả value tương ứng với k xóa cặp ➢popitem(): trả (và xóa) cặp (key, value) tùy ý Dictionary (từ điển) ❖Dùng zip để ghép list thành từ điển l1 = ["a","b","c"] l2 = [1,2,3] C = zip(l1,l2) for i in C: print(i) D = dict(zip(l1,l2)) print(D) Dictionary (từ điển) ❖Dùng zip để ghép list thành từ điển n = int(input("Nhap n = ")) print("Nhap DS n so khac nhau:") L1 = [int(input()) for i in range(n)] print("Nhap DS n ten:") L2 = [input() for i in range(n)] D1 = dict(zip(L1,L2)) print("D1 =", D1) D2 = dict(zip(L2,L1)) print("D2 =",D2) Truy xuất liệu theo khóa ❖Từ điển cho phép lấy giá trị tương ứng với khóa k phương thức get(k), dùng mục thuận tiệ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 cặp 4: 'bốn' print(d) # {1: 'one', 2: 'two', 3: 'ba', 4: 'bốn'} ❖Chú ý: hai cách không tương đương Khi liệu từ điển, get(k) trả None cịn mục phát sinh ngoại lệ KeyError 10 Package (gói) ❖Package = Thư mục module (lưu trữ vật lý ổ đĩ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 Package giúp quản lý tốt mã nguồn ❖Nhóm hàm, biến, lớp xử lý chủ đề, giúp phân cấp sử dụng dễ dàng ❖Giải tranh chấp định danh thư viện khác ❖Python có nhiều package hỗ trợ nhu cầu xử lý 22 Module math ❖Một module thơng dụng python: import math ❖Math có nhiều số định nghĩa sẵn: ➢pi: 3.141592… ➢e: 2.718281… ➢tau: 6.283185… (2 * pi) ➢inf: dương vô (âm vô –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ả số nguyên nhỏ không nhỏ x ➢copysign(x, y): copy dấu y gán sang x ▪ Ví dụ: copysign(1.0, -0.0) trả -1 ➢fabs(x): trả trị tuyệt đối x 23 Module math ❖Math chứa nhiều hàm toán học (tiếp…): ➢factorial(x): trả x! ➢floor(x): trả số nguyên lớn không vượt x ➢gcd(a, b): trả ước số chung lớn a b ➢isinf(x): trả True x dương/âm vô ➢isnan(x): trả True x NaN (not a number) ➢trunc(x): trả phần nguyên x ➢exp(x): trả ex ➢log(x[, y]): trả logy x, mặc định y = e ➢log10(x): trả log10 x ➢pow(x, y): trả xy ➢sqrt(x): trả 𝑥 24 Module math ❖Math cung cấp 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ả arc cos x (độ đo radians) ➢asin(x): trả arc sin x (độ đo radians) ➢atan(x): trả arc tang x (độ đo radians) ➢cos(x): trả cos x (độ đo radians) ➢sin(x): trả sin x (độ đo radians) ➢tan(x): trả tang x (độ đo radians) 25 Bài tập Bài tập Cho D từ điển định nghĩa cách đọc chữ số tiếng Anh, in value D theo thứ tự tăng dần Nhập từ điển D, in value khác từ điển Nhập từ điển D có value số nguyên, in hình giá trị value lớn Nhập string S, tạo từ điển D key chữ xuất S cịn value tương ứng số lần xuất chữ S Ví dụ: S = “dai hoc thuy loi” D = { ‘d’:1, ‘a’:1, ‘i’:2, ‘ ’:3, ‘h’:2, ‘o’:2, ‘c’:1, ‘t’:1, ‘u’:1, ‘y’:1, ‘l’:1 } 27 Bài tập Nhập từ điển prices lưu trữ giá loại trái từ điển stock lưu trữ số lượng tồn loại Sau in thứ tự loại trái cửa hàng giảm dần theo tổng giá trị loại Ví dụ: Dữ liệu nhập vào cho từ điển sau: - prices = { "banana": 4, "apple": 2, "orange": 1.5, "pear": } - stock = { "banana": 6, "orange": 32, "pear": 15 } Kết in thứ tự: orange 48 pear 45 banana 24 apple 28 Bài tập Tạo từ điển lưu lượng mưa trung bình tháng từ năm 2000 đến 2019 Quy cách sau: • Từ điển có 12 mục, khóa mục tháng • Giá trị ứng với khóa danh sách 20 số đại diện cho 20 năm • Lượng mưa số thực ngẫu nhiên từ 100 đến 4000 Nhập từ điển A có N cặp (key, value) B có M cặp (key, value) Từ A B tạo từ điển C theo quy tắc sau: • Một mục C key phải xuất A B • Nếu key xuất A B value value tương ứng A (hoặc B) • Nếu key xuất A B value max value tương ứng A B 29 Bài tập Cho số nguyên dương n Liệt kê tất hoán vị {1,2,…,n} Vé Vietlott Mega số từ 01 đến 45 Người chơi thắng chọn số, thứ tự khơng quan trọng Hãy viết chương trình nhập vào N số N người, sau nhập tiếp số giải đặc biệt in số người chơi thắng Liệt kê chuỗi độ dài N tuple X gồm chuỗi định nghĩa sau: ➢ Chuỗi A = ‘()’ thuộc X ➢ Nếu chuỗi A thuộc X chuỗi (A) thuộc X ➢ Nếu chuỗi A B thuộc X chuỗi AB thuộc X Nhập từ điển D có n cặp key-value key số nguyên ngẫu nhiên {1, ,n}, value số nguyên, in hình giá trị value lớn Liệt kê tất hoán vị {1,2,…,n} n = int(input("n = ")) use = [0 for i in range(n+1)] L = [0 for i in range(n)] def Hoanvi(i): for a in range(1,n+1): if use[a] ==0: L[i] = a use[a] =1 if i ==n-1: print(L) else: Hoanvi(i+1) use[a] =0 Hoanvi(0) Vé Vietlott Mega Vé Vietlott Mega số từ 01 đến 45 Người chơi thắng chọn số, thứ tự khơng quan trọng Hãy viết chương trình nhập vào N số N người, sau nhập tiếp số giải đặc biệt in số người chơi thắng Vé Vietlott Mega n = int(input("Nhap n = ")) A = () for i in range(1,1+n): so = (input("6 so Vietlott (tu den 45) cua nguoi %d: "%i)).split() set1 = set() for x in so: set1.add(int(x)) A = A+(set1,) print("Nhap so giai dac biet: ") B = {int(input("So %d: "%i)) for i in range (1,7)} print("In cac bo so thang cuoc:") for x in A: if len (x & B) >= 5: print(x) Bài chuỗi ngoặc Liệt kê chuỗi độ dài N tuple X gồm chuỗi định nghĩa sau: ➢Chuỗi A = ‘()’ thuộc X ➢Nếu chuỗi A thuộc X chuỗi (A) thuộc X ➢Nếu chuỗi A B thuộc X chuỗi AB thuộc X ❖ Lưu ý: Số chuỗi ngoặc độ dài n=2m, m nguyên số Catalan: 2𝑚 ! 𝐶 𝑚 = 𝑚! 𝑚 + ! Liệt kê chuỗi ngoặc độ dài N tuple X def NgoacDung(i): global T N = int(input("N = ")) for j in D: T = tuple() if D[j]+1