Bộ bài tập Python do thầy Lê Văn Thông sưu tầm, giảng dạy tải ĐH Khoa học Tư nhiên. Python (phát âm tiếng Anh: ˈpaɪθɑːn) là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình và là ngôn ngữ lập trình dễ học; được dùng rộng rãi trong phát triển trí tuệ nhân tạo. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu.25 Vào tháng 7 năm 2018, van Rossum đã từ chức lãnh đạo trong cộng đồng ngôn ngữ Python sau 30 năm làm việc.2627 Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động; do vậy nó tương tự như Perl, Ruby, Scheme, Smalltalk, và Tcl. Python được phát triển trong một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý.28 Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi theo thời gian, Python dần mở rộng sang mọi hệ điều hành từ MSDOS đến Mac OS, OS2, Windows, Linux và các hệ điều hành khác thuộc họ Unix. Mặc dù sự phát triển của Python có sự đóng góp của rất nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn là tác giả chủ yếu của Python. Ông giữ vai trò chủ chốt trong việc quyết định hướng phát triển của Python. Python luôn được xếp hạng vào những ngôn ngữ lập trình phổ biến nhất
BÀI TẬP PYTHON (Phần bản) LÊ VĂN HẠNH levanhanhvn@gmail.com THÁNG 9-2019 Python Execises MỤC LỤC PHẦN CƠ BẢN 1.1 Các lệnh điều khiển 1.1.1 Các lệnh xuất nhập - Biến – Toán tử 1.1.2 Cấu trúc điều kiện 1.1.3 Cấu trúc lặp 1.1.4 Khác 13 1.2 Strings 13 1.2.1 Thao tác với kiểu liệu chuỗi 13 1.2.2 Thao tác với kiểu liệu chuỗi dựa index 16 1.2.3 Xử lý chuỗi liệu kiểu số 18 1.2.4 enumerate() 20 1.3 Bitwise Operator 21 USER DEFINE FUNCTION - MODULE - PACKAGE 22 2.1 Xây dựng hàm 22 2.2 Anonymous function (hàm ẩn danh) 24 2.2.1 Xây dựng hàm ẩn danh với đối tượng number 24 2.2.2 Xây dựng hàm ẩn danh với đối tượng string 27 2.2.3 Xây dựng hàm ẩn danh gọi hàm người dùng định nghĩa (User define function) 28 2.2.4 Xây dựng hàm ẩn danh với đối tượng datetime 28 2.2.5 Sử dụng module khác để xây dựng hàm ẩn danh 28 2.3 Xây dựng hàm đệ quy (Recursion) 29 2.4 Datetime module 30 CÁC ĐỐI TƯỢNG DẠNG DANH SÁCH TRONG PYTHON (Iterator object or Sequences types) 32 3.1 Lists 32 3.1.1 List 32 3.1.2 Number List 32 3.1.3 String List 37 3.1.4 Sử dụng hàm map filter list 40 3.1.5 Sử dụng số module việc xử lý list 41 3.2 Tuple 42 3.3 Dictionary 43 3.3.1 Xử lý dictionary 43 3.3.2 Sử dụng số module việc xử lý dictionary 49 3.4 Set 50 3.5 Phối hợp đối tượng dạng sequence type 51 3.5.1 List Set 51 3.5.2 String Set 51 3.5.3 List Dictionary 52 3.5.4 List Tuple 52 3.6 Sử dụng hàm map đối tương dạng danh sách 53 3.6.1 List to List 53 3.6.2 Dictionary of List to List of Dictionary: 53 3.6.3 String to List 53 3.6.4 Tuple to List 54 Lê Văn Hạnh updated May 2022 i Python Execises 3.6.5 Others to String 54 3.7 Xây dựng hàm ẩn danh (Anonymous Function) cho Iterator object 54 3.7.1 Xây dựng hàm ẩn danh number list 54 3.7.2 Xây dựng hàm ẩn danh string list 55 3.7.3 Xây dựng hàm ẩn danh đối tượng phối hợp từ loại iterator object khác 55 3.7.4 Sử dụng module khác để xây dựng hàm ẩn danh iterator object 56 3.8 Sử dụng cú pháp Comprehension cho cho Iterator object 57 3.8.1 Number list comprehensions 57 3.8.2 String list comprehensions 60 3.8.3 Set comprehensions 61 3.9 Xây dựng hàm ẩn danh kết hơp với hàm all comprehension 61 3.10 Giải yều cầu hai cách: list Comprehension Anonymous Function 62 XỬ LÝ NGOẠI LỆ (Exception Handling) 65 FILE - DIRECTORY - OPERATING SYSTEM 66 5.1 Text file 66 5.1.1 Đọc file 66 5.1.2 Ghi file 67 5.1.3 Làm việc file chứa kiểu liệu dạng số 67 5.1.4 Lấy thông tin file 67 5.2 CSV file 68 5.3 Directory (Thư mục) 71 5.4 Khác 71 THAM KHẢO 73 Lê Văn Hạnh updated May 2022 ii Python Execises PHẦN CƠ BẢN 1.1 Các lệnh điều khiển 1.1.1 Các lệnh xuất nhập - Biến – Toán tử 1.1.1.1 Sử dụng hàm print 1/ Sử dụng lệnh print để in hình sau: c.- a.b. d.- 2/ Sử dụng lệnh print để in hình chữ PYTHON hình minh họa sau: XXXXX XX XX XXXXXX XX XX XXXX XX XX X X XX XX XX XX XX XXXXX X X XX XXXXXX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXX XX XX XXX XX XXXXXX XX XXX XX XX 3/ Chỉ sử dụng lệnh print, yêu cầu in hình đoạn thơ Quê hương với định dạng hình minh họa Gợi ý: sử dụng ký tự tab (‘\t’) để lùi đầu dòng sang phải 1.1.1.2 Sử dụng hàm input 4/ Cho nhập số nguyên a, b In tổng số a b minh họa sau: Ví dụ: a=3, b=5 in + = a Cho nhập số lệnh riêng biệt b Cho nhập số cách dấu phẩy (,) dòng lệnh cách sử dụng phương thức split kiểu liệu chuỗi a, b = input(" ").split() c Sử dụng hàm map(), phương thức split liệu kiểu chuỗi nhập lần nhiều giá trị, giá trị ngăn cách theo định trước chương trình (khoảng trắng, dấu phẩy ký tự nào) Ví dụ: sử dụng phối hợp hàm map int với hàm input nhập số cách dấu chấm phẩy: a, b = map(int, input(" ").split(‘;’)) 5/ Cho nhập số nguyên a, b dòng (cách khoảng trắng) In kết a lũy thừa b (=a**b) hình dạng “%d^%d=%d” 6/ Cho nhập số nguyên dương a có giá trị từ đến In tổng a+aa+aaa Ví dụ: a=5 in + 55 + 555 = 615 Gợi ý: sử dụng phép nối chuỗi số nguyên (vd: với a=5: "%s%s" % (a,a) => 55) hàm int (đổi kiểu liệu từ chuỗi sang số nguyên) Lê Văn Hạnh updated May 2022 Python Execises 7/ Viết chương trình Python để chứng minh hai biến chuỗi có giá trị trỏ đến vị trí nhớ cách khai báo biến x = "Python", y = "Python", z = "python" In địa nhớ biến Gợi ý: Sử dụng hàm id (tên_biến) để lấy địa biến lưu nhớ Sử dụng hàm hex để chuyển giá trị số có sang số hệ thập lục 1.1.1.3 Sử dụng phương thức format chuỗi có print 8/ Cho nhập số nguyên a, b, c In số theo thứ tự tăng dần Yêu cầu sử dụng phương thức format việc xuất kết quả, ví dụ: print('{} {} {}'.format(biến1, biến2, biến3)) print('{0} {1} {2}'.format(biến1, biến2, biến3)) Gợi ý: dùng hàm min, max để tìm số nhỏ, lớn nhất, từ suy số lớn nhì Sau dùng phương thức format liệu kiểu chuỗi để xuất kết 9/ Cho nhập chiều dài, chiều rộng chiều cao hình khối chữ nhật rộng (theo cm) Tính xuất kết theo ví dụ sau: Nhập chiều dài đáy hình khối chữ nhật (cm):>? 2.134 Nhập chiều rộng đáy hình khối chữ nhật (cm):>? 3.4567 Nhập chiều cao hình khối chữ nhật (cm):>? 4.1 Số lượng số lẻ cần hiển thị:>? Diện tích đáy hình chữ nhật = 7.38cm² Thể tích hình khối= 30.24cm³ dài cao Gợi ý: để in ký tự số mũ, sử dụng mã UNICODE \u00b2 \u00b3 lệnh print 1.1.1.4 Tính tốn đơn giản 10/ Ban đầu rừng có cặp thỏ, biết sau tháng số lượng thỏ rừng tăng lên gấp đôi Hỏi sau m tháng có thỏ (giả sử thỏ khơng chết) 11/ Cho hình vng ngoại tiếp hình trịn hình minh họa.Viết chương trình cho nhập bán kính hình trịn (r) số thực có giá trị lớn 0, tính phần diện tích có màu đậm hình 12/ Cho hình vng nội tiếp hình trịn hình minh họa.Viết chương trình cho nhập bán kính hình trịn (r) số thực có giá trị lớn 0, tính phần diện tích có màu đậm hình r Hình minh họa 11 r Hình minh họa 12 Gợi ý: import module math, sử dụng số pi (math.pi) hàm tính bậc hai (math.sqrt(giá trị cần tính bậc hai)) có sẵn module math 13/ Tạo chương trình u cầu người dùng nhập tên tuổi họ Chương trình in hình chuỗi (s) thơng báo năm mà người trịn 100 tuổi Gợi ý: import module datetime, sử dụng datetime.now().year class datetime để lấy năm sau: datetime.datetime.now().year Ví dụ: Nhập tên: Tý Nhập tuổi: 21 Đến năm 2099, bạn Tý tròn 100 tuổi Lê Văn Hạnh updated May 2022 Python Execises 14/ Có loại tiền 1, 2, 5, 10, 20, 50, 100, 200, 500 Cho nhập số tiền X Chuyển số tiền X loại tiền cho số lượng In số tờ tiền loại, tổng số tờ tiền tất loại Ví dụ với X=1234, in ra: So tien 1234 duoc doi thanh: Loai 500 gom to Loai 200 gom to Loai 100 gom to Loai 50 gom to Loai 20 gom to Loai 10 gom to Loai gom to Loai gom to Loai gom to TỔNG CỘNG CÓ TỜ 1.1.2 Cấu trúc điều kiện 15/ Cho người dùng nhập số nguyên (n) Thực hiện: a Cho biết n số chẵn hay số lẻ b Cho biết n có chia chẵn cho hay khơng? Nếu khơng chia chẵn cho n có chia chẵn cho hay khơng? c Gọi số n nhập số bị chia Cho người dùng nhập thêm số nguyên khác (m) đại diện cho số chia Cho biết n có chia chẵn cho m hay không? 16/ Thực lại tập 14 với yêu cầu in loại tiền có số tờ lớn (Có loại tiền 1, 2, 5, 10, 20, 50, 100, 200, 500 Cho nhập số tiền X Chuyển số tiền X loại tiền cho số lượng nhất.) Ví dụ với X=1234, in ra: So tien 1234 duoc doi thanh: Loai 500 gom to Loai 200 gom to Loai 100 gom to #khơng in dịng số lượng =0 Loai 50 gom to #không in dịng số lượng =0 Loai 20 gom to Loai 10 gom to Loai gom to #khơng in dịng số lượng =0 Loai gom to Loai gom to #không in dịng số lượng =0 TỔNG CỘNG CĨ TỜ Tong so loai = #in thêm dòng kết Mở rộng: viết chương trình cho người dùng nhập số nguyên a b, với a số tiền hàng cần phải trả b số tiền khách hàng thực tế trả cho nhân viên thu ngân Như vậy: • Nếu a>b: chương trình thơng báo số tiền khách hàng cịn thiếu a-b Xong kết thúc chương trình • Nếu a=b: xuất câu thông báo “Cám ơn khách hàng Hẹn gặp lại” trước kết thúc chương trình • Nếu a=90 Từ 80 đến 89 Từ 70 đến 79 Từ 65 đến 69 Dưới 65 Xếp loại A B C D E 18/ Viết chương trình cho nhập số nguyên dương n (có giá trị khoảng từ đến 10) In chữ số La mã tương ứng 19/ Viết chương trình kiểm tra giúp người dùng tự kiểm tra sức khỏe dựa số BMI (Body Mass Index - số khối thể) cách cho người dùng nhập vào cân nặng (tính theo kg) chiều cao (tính theo mét) họ, chương trình xuất kết đánh giá Biết rằng: • Cơng thức tính BMI: cân nặng (kg) / (chiều cao (m) * chiều cao (m)) • Đánh giá BMI người Việt Nam cho bảng sau: Đánh giá BMI 0 Ví dụ: với n= 37, in n=9 kết cần tìm (vì 37-10=27 27-9=18 18-9=9) Tương tự với n= 6, in n=6 kết cần tìm 21/ Cho nhập số nguyên a, b dòng (cách khoảng trắng) Viết chương trình giải phương trình bậc 1: ax + b = 22/ Cho nhập số nguyên a, b, c dòng (cách khoảng trắng) Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 23/ Một điểm mặt phẳng biểu diễn tọa độ x y Cho nhập tọa độ đỉnh A, B, C tam giác, cho phập tọa độ điểm P Xác định xem điểm P nằm hay nằm tam giác Gợi ý: • Thực tính giá trị z1, z2, z3 theo công thức sau: z1 = (xB-xA)*(yP-yA)-(yB-yA)*(xP-xA) z2 = (xC-xB)*(yP-yB)-(yC-yB)*(xP-xB) z3 = (xA-xC)*(yP-yC)-(yA-yC)*(xP-xC) • Kiểm tra giá trị z1, z2, z3 dương âm điểm P nằm tam giác ABC, ngược lại nằm ngồi 24/ Mỗi vịng trịn mặt phẳng xác định yếu tố tâm vịng trịn (x, y) bán kính (R) Viết chương trình cho nhập thơng tin vịng trịn C1 C2 Chương trình cho biết C1 C2 thuộc trường hợp trường hợp sau: Lê Văn Hạnh updated May 2022 Python Execises C1 C1 C2 C2 (i) C1 C1 C2 (iii) (ii) C1 C2 C2 (v) C2 C1 (iv) (i)- C1 C2 không cắt (khơng có phần giao nhau) (ii)- C1 C2 có tiếp điểm ngồi (C1 C2 khơng chứa nhau) (iii)- C1 C2 cắt điểm (iv)- C1 C2 có tiếp điểm (C1 C2 chứa nhau) (v)- C1 C2 không cắt (C1 C2 chứa nhau) Lúc này, cần cho biết: C1 nằm C2 hay C2 nằm C1 25/ Nhập vào số thực a, b, c, d, e, f cách dấu chấm phẩy (;) Giải hệ phương trình sau: ax + by = c dx + ey = f Gợi ý: tính D= a d b e = ae - bd ; Dx= c f b e = ce – bf ; Dy= a d c f = af- dc Nếu D!=0 x=Dx/D; y=Dy/D Ngược lại Dx!=0 Dy !=0 PT vô nghiệm Ngược lại, PT vô định 26/ Cho nhập số nguyên a, b, c a Cho biết thứ tự số a, b, c có tạo thành cấp số cộng hay cấp số nhân không loại Nếu cấp số cộng hay cấp số nhân, in số dãy b Mở rộng: với thứ tự nhập vào số bất kỳ, cho biết số xếp lại để trở thành cấp số cộng (hoặc cấp số nhân) hay không? Nhắc lại: o Một cấp số cộng (Arithmetic Progression Arithmetic Sequence) dãy số thoả mãn điều kiện: hai phần tử liên tiếp sai khác số gọi công sai (common difference) Chẳng hạn, dãy số 3, 5, 7, 9, 11, cấp số cộng với công sai o Một cấp số nhân (Geometric Progression Geometric Sequence) dãy số thoả mãn điều kiện kể từ số hạng thứ hai, số hạng tích số hạng đứng trước với số khơng đổi Hằng số gọi công bội (common ratio) cấp số nhân Chẳng hạn, dãy số 5, 15, 45, 135, cấp số nhân với công bội Ví dụ: Nhập 1,2,3 in AP sequence Next number of the sequence: Nhập 2,6,18 in GP sequence Next number of the sequence: 54.0 Nhập 1,3,2 in Not an Arithmetic Progression and Geometric Progression sequence Lê Văn Hạnh updated May 2022 Python Execises 1.1.3 Cấu trúc lặp 27/ Cho nhập số nguyên n a.- In số từ đến n b.- In số nhỏ n bội số c.- In tổng số từ đến n d.- In tổng số chẵn nhỏ n e.- In ước số chẵn n tổng ước số chẵn f.- In số chẵn nhỏ gần với n g.- Tìm ước số lẻ lớn n (nhỏ n) Ví dụ Nhập n=27, in Ước số lẻ lớn 27 28/ Cho nhập số nguyên: số lượng số cần in n, số bắt đầu a công sai d (common difference), n phải >0 In lên hình n số hạng cấp số cộng (Arithmetic Progression Arithmetic Sequence) 29/ Cho nhập số nguyên: số lượng số cần in n, số bắt đầu a cơng bội q (common ratio, n phải >0 In lên hình n số hạng cấp số nhân (Geometric Progression Geometric Sequence) 30/ Viết chương trình cho lặp lại nhiều lần cơng việc sau: • Cho người dùng nhập số nguyên thứ (a) • Cho người dùng nhập số nguyên thứ hai (b) • Cho người dùng nhập phép toán (Opt) cần thực Chỉ nhận phép toán: + , -, *, /, ^ (lũy thừa), % (modulo), > (shift right – chia vế trái cho 2) Nếu nhập sai, chương trình yêu cầu nhập lại nhập • Xuất kết a Opt b Sau xuất kết quả, chương trình hỏi người dùng có tiếp tục hay không (Y/N)? Nếu người dùng chọn N (no), chương trình kết thúc, ngược lại cho thực lại chương trình Ví dụ, với a=3, b=4, Opt=^, chương trình xuất ^ = 81 Hoặc với a=3, b=4, Opt=%, chương trình xuất % = Hay với a=3, b=4, Opt=m>0), liệt kê ước số chẵn n có giá trị nhỏ m Nếu khơng có ước số thỏa điều kiện nhỏ m, chương trình cần in thơng báo “khơng có ước số n nhỏ m” Ví dụ: Nhập n=30, m=10; in ra: ước số chẵn 30 nhỏ 10 là: 2, 32/ 1Phú Ơng có đàn bị gồm n con, bò mang số hiệu từ đến n Bờm Phú Ông giao nhiệm vụ, hàng ngày, thả bò chiều tối lùa bò chuồng Hàng ngày, bị chuồng, Bờm tính tổng số hiệu bò (S), tổng S bị đủ Một hơm, Trích đề thi Olympic tin học sinh viên năm 2020 Đại học Cần Thơ khối cá nhân Cao đẳng Lê Văn Hạnh updated May 2022 Python Execises mải chơi nên Bờm để lạc bị Để đăng tin tìm kiếm, Bờm cần xác định số hiệu bò bị lạc Viết chương trình cho nhập số nguyên n S (với n S nhập đảm bảo toán ln có nghiệm), giúp Bờm xác định số hiệu bị bị lạc cách: a Có sử dụng lệnh lặp b Khơng sử dụng lệnh lặp Ví dụ với n=5 S=12, Bờm xác định bị bị lạc có mã số c (*) Trong tốn trên, số lượng bị ln Mở rộng: giả sử số lượng bò nhiều (số lượng bị – k – người dùng phải nhập) Xác định số hiệu bị bị (có thể có nhiều trường hợp xảy ra) Ví dụ với n=5 S=10, Bờm xác định có bò bị Như kết cần in ra: Trường hợp 1: bị bị có số hiệu Trường hợp 2: bò bị có số hiệu 33/ Cho nhập số nguyên a, b (a’ Hay S=? ?Python? ??, T=b xuất ‘Python< /b>’ Lê Văn Hạnh updated May 2022 15 Python Execises 70/ Viết chương trình cho