
THỰC HÀNH TOÁN RỜI RẠC
TÀI LIỆU PHỤC VỤ SINH VIÊN NGÀNH KHOA HỌC DỮ LIỆU
Nhóm biên soạn và Giảng viên có đóng góp ý kiến: TS. Hoàng Lê Minh – Khưu Minh Cảnh –
Lê Ngọc Thành – Phạm Trọng Nghĩa - Nguyễn Công Nhựt – Trần Ngọc Việt - Hoàng Thị Kiều
Anh – Huỳnh Thái Học
TP.HCM – Năm 2019

MỤC LỤC
BÀI 1: CƠ SỞ LOGIC VÀ TẬP HỢP ......................................................................................................... 3
1. Các phép toán luận lý trong Python ...................................................................................................... 3
1.1. Luận lý trong Python .................................................................................................................... 3
1.2. Biểu thức điều kiện if .................................................................................................................... 3
1.3. Thứ tự tính toán trong Python ....................................................................................................... 5
2. Dữ liệu dạng tập hợp trong Python: Set ................................................................................................ 6
3. Dữ liệu dạng tập hợp trong Sympy: FiniteSet ....................................................................................... 8
3.1. Xây dựng và các thao tác cơ bản trên tập hợp .............................................................................. 8
3.1.1. Xây dựng tập hợp .................................................................................................................. 8
3.1.2. Kiểm tra một số trong một tập hợp ....................................................................................... 9
3.1.3. Tạo tập hợp rỗng ................................................................................................................. 10
3.1.4. Tạo tập hợp từ List hoặc Tuple ........................................................................................... 10
3.1.5. Loại bỏ các phần tử trùng và sắp thứ tự tập hợp ............................................................... 10
3.2. Tập con (subset), tập cha (superset) và tập các tập con (power set) ........................................... 12
3.3. Các phép toán trên tập hợp.......................................................................................................... 13
3.3.1. Union và Intersection .......................................................................................................... 14
3.3.2. Tích Descart – Cartesian Product ........................................................................................ 16
3.3.3. Áp dụng công thức cho tập nhiều biến ............................................................................... 16
3.3.4. Ứng dụng: Tính toán xác suất sự kiện A và sự kiện B cùng xảy ra ...................................... 17
BÀI TẬP CHƯƠNG 1 ................................................................................................................................ 18

BÀI 1: CƠ SỞ LOGIC VÀ TẬP HỢP
Mục tiêu:
- Nắm vững được Python để viết các đoạn lệnh xử lý về: mệnh đề, logic, đúng/sai.
- Sử dụng tốt công cụ xử lý trên tập hợp, bao gồm: định nghĩa và các phép toán.
Nội dung chính:
1. Các phép toán luận lý trong Python
1.1. Luận lý trong Python
Python có kiểu dữ liệu luận lý là True và False cho các phép xử lý là == (so sánh bằng), != (so
sánh khác), <, >, is (là), is not và các phép toán liên quan là: and, or, not, ^ (XOR).
Ví dụ:
>>> a = True
>>> b = False
>>> a and b
False
>>> a or b
True
>>> a ^ b
True
1.2. Biểu thức điều kiện if
Trong Python, biểu thức điều kiện if else là một trong cấu trúc rẽ nhánh cơ bản. Cấu trúc của
lệnh if như sau:
>>> if (điều kiện 1):
# khối lệnh xử lý điều kiện 1
elif (điều kiện 2):
# khối lệnh xử lý điều kiện 2

elif (điều kiện 3…):
# khối lệnh xử lý điều kiện 3…
else: # trường hợp còn lại
# khối lệnh xử lý các trường hợp còn lại
Việc sử dụng hiệu quả cấu trúc sẽ dẫn đến chương trình tinh gọn. Sinh viên thực hành lệnh dưới
đây:
>>> def kiemtra_nuocsoi(nhiet_do):
if nhiet_do < 100:
return "Nuoc chua soi!"
else:
return "Nuoc da soi!"
>>> kiemtra_nuocsoi(100)
……….…………………………………..…………………… sinh viên ghi kết quả.
>>> kiemtra_nuocsoi(99)
……….………………………………………..……………… sinh viên ghi kết quả.
Sau đó, sinh viên thử một cách viết hàm tinh gọn như sau:
Và thực hiện các kiểm tra:
>>> kiemtra_nuocsoi1(100)
……….…………………………………..…………………… sinh viên ghi kết quả.
>>> kiemtra_nuocsoi1(99)
……….…………………………………..…………………… sinh viên ghi kết quả.
Hơn thế nữa, lệnh rẽ nhánh if được sử dụng trong “thiết kế” danh sách các giá trị. Sinh viên thực
hiện các lệnh sau:

- Xây dựng danh sách gồm các phần tử thỏa điều kiện >5:
>>> for diem_so in range(10):
if diem_so > 5:
ds_dau.append(str(diem_so))
>>> ds_dau
……….…………………………..…………………… sinh viên ghi kết quả.
Và đoạn code ngắn gọn:
>>> ds_dau = [str(diem_so) for value in range(10) if diem_so > 5]
>>> ds_dau
……….…………………………..…………………… sinh viên ghi kết quả.
1.3. Thứ tự tính toán trong Python
Bên cạnh đó, là một ngôn ngữ lập trình, các trình biên dịch Python thường xử lý phép toán từ trái
sang phải (left-to-right order). Theo đó, các biểu thức logic sẽ bị ảnh hưởng bởi thứ tự tính toán.
Ví dụ: trong phép toán AND, nếu yếu tố đầu tiên không thỏa thì ngay lập tức biểu thức sẽ mang
giá trị False (sai), nhầm giảm thiểu các tính toán không cần thiết; hoặc với phép toán OR, nếu
biểu thức đầu tiên thỏa thì các biểu thức phía sau không cần tính toán.
Sinh viên thực hành các lệnh sau để hiểu được thứ tự tính toán trong Python:
Kết quả câu lệnh if là: …………………………………………………………………..
Sinh viên thực hành đoạn lệnh khác: