Download as pdf or txt
Download as pdf or txt
You are on page 1of 1040

300 Bài code thiếu nhi bằng

Python
Le Phuong Tien

fxstudio.dev

The first edition - 6/2024

© 2024 fxstudio.dev. All rights reserved.


Gửi Joy bé nhỏ,

“tínhLập trình hướng đối tượng có bốn tính chất cơ bản, đó là:
đóng gói, tính thừa kế, tính đa hình và tính trừu tượng.
Trong số chúng, tính thừa kế là quan trọng nhất. Vì có thừa kế,
thì hai đối tượng tồn tại mới có được mối quan hệ gọi là: “CHA
và CON”.
Mục lục
Giới thiệu
Chào thế giới
Chương 1: Cấu trúc điều khiển
Chương 2: Hàm
Chương 3 : Danh sách (List)
Chương 4: Tuple
Chương 5: Dictionary
Chương 6: Set
Chương 7: Chuỗi (String)
Chương 8: File I/O
Chương 9: Lập trình hướng đối tượng (OOP)
Chương 10: Ngoại lệ (Exception)
Chương 11: Xử lý văn bản
Chương 12: Xử lý ngày và thời gian
Chương 13: Lập trình hàm
Chương 14: Bài toán thuật toán
Chương 15: Bài toán số học
Chương 16: Giao diện (GUI) cơ bản
Chương 17: Bài tập tổng hợp
Chương 18: Decorator
Chương 19: Iterator
Chương 20: Generator
Chương 21: Vẽ đồ thị
Chương 22: Bài tập với SQL
Chương 23: Xử lý dữ liệu cơ bản
Chương 24: Thực hành lập trình mạng cơ bản
Chương 25: Bài tập với API cơ bản
Chương 26: Bài tập với web scraping cơ bản
Chương 27: Bài toán ma trận cơ bản
Chương 28: Bài tập về lập trình đồ họa cơ bản
Chương 29: Khoa học dữ liệu cơ bản
Chương 30: Xử lý ảnh
Lời chào tạm biệt
Giới thiệu

“phimTiêu“Tây
đề cuốn sách dựa theo một bí kíp võ công có trong bộ
du ký” của Châu Tinh Trì.

Đây là một cuốn sách nhỏ về lập trình Python, được thiết kế dành
riêng cho các bạn học sinh tự học. Cuốn sách không chỉ đơn thuần
là lý thuyết hay hướng dẫn, mà là một bộ sưu tập 300 bài tập thực
hành. Mỗi bài tập là kết quả từ kinh nghiệm và kiến thức lập trình
của mình, nhằm giúp các bạn rèn luyện và nắm vững kỹ năng
Python một cách hiệu quả nhất.

Với 300 bài tập đa dạng và thú vị, cuốn sách này giúp các em học
sinh rèn luyện kỹ năng lập trình Python một cách hiệu quả. Từ
những bài tập cơ bản cho đến những bài tập phức tạp hơn, cuốn
sách mang đến cho các em những thử thách thú vị để phát triển tư
duy logic và khả năng giải quyết vấn đề.

Ý tưởng cho cuốn sách này không mới. Có nhiều bạn đã làm rồi.
Mình chỉ góp vui thêm một chút mà thôi.

Thời đại bây giờ là sự bùng nổ của Trí tuệ nhân tạo. Thay vì suy
nghĩ AI có hủy diệt thế giới hay không. Thì hãy tận dụng chúng &
sống chung với chúng nhóe. Và còn gì tốt hơn khi công việc của
chúng ta lại góp phần chuẩn bị cho tương lai của thế hệ tương lai.

‘ Nào chúng ta bắt đầu thôi!


Thông tin
Phiên bản sách: 1.0.0
Phiên bản Python: 3.12.0
Phần mềm Editor: Visual Studio Code
Mã nguồn: Python_300_kids (GitHub)
Đóng góp
Mọi đóng góp & góp ý thì bạn có thể gửi Pull Requests hoặc Issues
trực tiếp trên Repo này. Hoặc bạn có thể liên hệ theo các thông tin ở
dưới đây.

Liên hệ
Website: fxstudio.dev
Email: contacts@fxstudio.dev
Buy me a coffee!
Chào thế giới!
Giải thích đề bài
Bài tập yêu cầu bạn viết một chương trình đơn giản để in ra màn
hình dòng chữ “Chào thế giới”.

Thuật toán giải quyết


Đầu vào:

Không có đầu vào từ người dùng.

Đầu ra:

Dòng chữ “Chào thế giới” được in ra màn hình.

Các bước thực hiện:


1. Sử dụng lệnh print() để in ra dòng chữ “Chào thế giới”.

Code Python
# Chương trình chào thế giới

print("Chào thế giới")

Giải thích code


1. Sử dụng hàm print():
Hàm print() trong Python được sử dụng để in một thông
điệp ra màn hình.
Trong trường hợp này, print("Chào thế giới") sẽ in ra
dòng chữ “Chào thế giới”.

Tóm tắt
1. Hàm print(): Là một hàm tích hợp sẵn trong Python dùng để in
ra một chuỗi, số, hoặc bất kỳ đối tượng nào khác ra màn hình.

Chương trình trên rất đơn giản và minh họa cách sử dụng cơ bản
của hàm print() trong Python để thực hiện nhiệm vụ in ra màn hình
một thông điệp cụ thể.
Chương 1: Cấu trúc điều khiển
1. Viết chương trình để kiểm tra số nguyên dương hay âm.
2. Viết chương trình để kiểm tra số chẵn hay lẻ.
3. Viết chương trình để tìm số lớn nhất trong ba số.
4. Viết chương trình để tính tiền taxi dựa trên số km đã đi.
5. Viết chương trình để tính điểm trung bình và xếp loại học sinh.
6. Viết chương trình để in bảng cửu chương.
7. Viết chương trình để kiểm tra một năm có phải năm nhuận
không.
8. Viết chương trình để đếm số lượng số chẵn và lẻ trong một danh
sách.
9. Viết chương trình để in tất cả các số nguyên tố từ 1 đến 100.
10. Viết chương trình để tìm ước số chung lớn nhất của hai số.
001 - Viết chương trình để kiểm tra số
nguyên dương hay âm.

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một số
nguyên mà người dùng nhập vào là số dương hay số âm.

Thuật toán giải quyết


Đầu vào:

Một số nguyên mà người dùng nhập vào.

Đầu ra:

Thông báo cho người dùng biết số đó là số dương hay số âm.

Các bước thực hiện:


1. Nhập một số nguyên từ người dùng.
2. Kiểm tra số đó có lớn hơn 0 không:
Nếu lớn hơn 0, thì số đó là số dương.
Nếu nhỏ hơn 0, thì số đó là số âm.
Nếu bằng 0, chúng ta có thể xem như là một trường hợp đặc
biệt và thông báo rằng số đó không phải là số dương cũng
không phải là số âm.

Code Python
# Chương trình kiểm tra số nguyên dương hay âm

def check_number(n):
if n > 0:
return "Số bạn nhập là số dương."
elif n < 0:
return "Số bạn nhập là số âm."
else:
return "Số bạn nhập là số không (không phải dương
cũng không phải âm)."

# Nhập số nguyên từ người dùng


try:
number = int(input("Nhập một số nguyên: "))
result = check_number(number)
print(result)
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm check_number(n):

Hàm này nhận một tham số n là số nguyên và kiểm tra giá trị
của n.
Sử dụng cấu trúc điều kiện if-elif-else để xác định xem n
là số dương, số âm hay bằng 0 và trả về thông báo tương
ứng.

2. Nhập số nguyên từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:


Gọi hàm check_number() với tham số là số nguyên mà người
dùng đã nhập.
In kết quả mà hàm trả về.

Tóm tắt
1. Hàm input(): Dùng để nhận dữ liệu nhập từ người dùng dưới
dạng chuỗi.
2. Hàm int(): Dùng để chuyển đổi chuỗi sang số nguyên.
3. Cấu trúc điều kiện if-elif-else: Dùng để kiểm tra các điều
kiện và thực thi các đoạn mã khác nhau dựa trên kết quả của
các điều kiện đó.
4. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
5. try-except: Dùng để xử lý ngoại lệ, giúp chương trình có thể xử
lý các lỗi có thể xảy ra khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên đơn giản nhưng minh họa được cách sử dụng
các cấu trúc điều kiện, hàm và xử lý ngoại lệ trong Python để giải
quyết một bài toán cụ thể.
002 - Viết chương trình để kiểm tra số
chẵn hay lẻ.

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một số
nguyên mà người dùng nhập vào là số chẵn hay số lẻ.

Thuật toán giải quyết


Đầu vào:

Một số nguyên mà người dùng nhập vào.

Đầu ra:

Thông báo cho người dùng biết số đó là số chẵn hay số lẻ.

Các bước thực hiện:


1. Nhập một số nguyên từ người dùng.
2. Kiểm tra số đó có chia hết cho 2 không:
Nếu chia hết cho 2 (phần dư bằng 0), thì số đó là số chẵn.
Nếu không chia hết cho 2 (phần dư khác 0), thì số đó là số
lẻ.

Code Python
# Chương trình kiểm tra số chẵn hay lẻ

def check_even_odd(n):
if n % 2 == 0:
return "Số bạn nhập là số chẵn."
else:
return "Số bạn nhập là số lẻ."

# Nhập số nguyên từ người dùng


try:
number = int(input("Nhập một số nguyên: "))
result = check_even_odd(number)
print(result)
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm check_even_odd(n):

Hàm này nhận một tham số n là số nguyên và kiểm tra giá trị
của n.
Sử dụng toán tử % để lấy phần dư của n khi chia cho 2.
Sử dụng cấu trúc điều kiện if-else để xác định xem n là số
chẵn hay số lẻ và trả về thông báo tương ứng.

2. Nhập số nguyên từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:

Gọi hàm check_even_odd() với tham số là số nguyên mà


người dùng đã nhập.
In kết quả mà hàm trả về.
Tóm tắt
1. Hàm input(): Dùng để nhận dữ liệu nhập từ người dùng dưới
dạng chuỗi.
2. Hàm int(): Dùng để chuyển đổi chuỗi sang số nguyên.
3. Toán tử %: Dùng để lấy phần dư của phép chia, trong trường
hợp này là chia cho 2 để kiểm tra tính chẵn lẻ.
4. Cấu trúc điều kiện if-else: Dùng để kiểm tra các điều kiện và
thực thi các đoạn mã khác nhau dựa trên kết quả của các điều
kiện đó.
5. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
6. try-except: Dùng để xử lý ngoại lệ, giúp chương trình có thể xử
lý các lỗi có thể xảy ra khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên đơn giản nhưng minh họa được cách sử dụng
các cấu trúc điều kiện, hàm và xử lý ngoại lệ trong Python để giải
quyết một bài toán cụ thể về kiểm tra số chẵn hay lẻ.
003 - Viết chương trình để tìm số lớn
nhất trong ba số.

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm số lớn nhất trong
ba số nguyên mà người dùng nhập vào.

Thuật toán giải quyết


Đầu vào:

Ba số nguyên mà người dùng nhập vào.

Đầu ra:

Thông báo cho người dùng biết số lớn nhất trong ba số đó.

Các bước thực hiện:


1. Nhập ba số nguyên từ người dùng.
2. So sánh ba số để tìm ra số lớn nhất:
Sử dụng các cấu trúc điều kiện if-elif-else để so sánh
từng cặp số và xác định số lớn nhất.

Code Python
# Chương trình tìm số lớn nhất trong ba số

def find_max_of_three(a, b, c):


if a >= b and a >= c:
return a
elif b >= a and b >= c:
return b
else:
return c

# Nhập ba số nguyên từ người dùng


try:
num1 = int(input("Nhập số nguyên thứ nhất: "))
num2 = int(input("Nhập số nguyên thứ hai: "))
num3 = int(input("Nhập số nguyên thứ ba: "))

max_number = find_max_of_three(num1, num2, num3)


print(f"Số lớn nhất trong ba số là: {max_number}")
except ValueError:
print("Vui lòng nhập số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm find_max_of_three(a, b, c):

Hàm này nhận ba tham số a, b, và c là ba số nguyên và so


sánh chúng để tìm ra số lớn nhất.
Sử dụng cấu trúc điều kiện if-elif-else để so sánh các số.
Trả về số lớn nhất trong ba số.

2. Nhập ba số nguyên từ người dùng:

Sử dụng hàm input() ba lần để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:

Gọi hàm find_max_of_three() với tham số là ba số nguyên


mà người dùng đã nhập.
In kết quả mà hàm trả về, thông báo số lớn nhất trong ba số.
Tóm tắt
1. Hàm input(): Dùng để nhận dữ liệu nhập từ người dùng dưới
dạng chuỗi.
2. Hàm int(): Dùng để chuyển đổi chuỗi sang số nguyên.
3. Cấu trúc điều kiện if-elif-else: Dùng để kiểm tra các điều
kiện và thực thi các đoạn mã khác nhau dựa trên kết quả của
các điều kiện đó.
4. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
5. try-except: Dùng để xử lý ngoại lệ, giúp chương trình có thể xử
lý các lỗi có thể xảy ra khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng các cấu trúc điều kiện,
hàm và xử lý ngoại lệ trong Python để giải quyết một bài toán cụ thể
về tìm số lớn nhất trong ba số.
004 - Chương trình tính tiền taxi dựa
trên số km đã đi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tính tiền taxi dựa trên
số km mà người dùng đã đi. Giá cước taxi có thể được tính theo các
mức giá khác nhau dựa trên số km đã đi.

Giả định về giá cước (có thể thay đổi theo yêu
cầu cụ thể):
1. Km đầu tiên: 10.000 VNĐ.
2. Từ km thứ 2 đến km thứ 10: 8.500 VNĐ/km.
3. Từ km thứ 11 trở đi: 7.500 VNĐ/km.

Thuật toán giải quyết


Đầu vào:

Số km mà người dùng đã đi (một số thực).

Đầu ra:

Tổng tiền taxi.

Các bước thực hiện:


1. Nhập số km đã đi từ người dùng.
2. Tính tổng tiền taxi dựa trên số km đã đi theo các mức giá đã
cho.
3. In ra tổng tiền taxi.
Code Python
# Chương trình tính tiền taxi dựa trên số km đã đi

def calculate_taxi_fare(km):
if km <= 1:
fare = 10000
elif km <= 10:
fare = 10000 + (km - 1) * 8500
else:
fare = 10000 + 9 * 8500 + (km - 10) * 7500
return fare

# Nhập số km từ người dùng


try:
distance = float(input("Nhập số km đã đi: "))
if distance < 0:
print("Số km không hợp lệ. Vui lòng nhập số dương.")
else:
total_fare = calculate_taxi_fare(distance)
print(f"Tổng tiền taxi là: {total_fare} VNĐ")
except ValueError:
print("Vui lòng nhập một số hợp lệ.")

Giải thích code


1. Định nghĩa hàm calculate_taxi_fare(km):

Hàm này nhận một tham số km là số km đã đi và tính tiền taxi


dựa trên các mức giá đã cho.
Sử dụng cấu trúc điều kiện if-elif-else để tính tiền taxi
dựa trên số km đã đi.
Trả về tổng tiền taxi.

2. Nhập số km từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số thực bằng hàm float().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số hợp lệ, từ đó in ra thông báo lỗi.

3. Kiểm tra và xử lý đầu vào:

Kiểm tra nếu số km nhập vào là số âm thì in ra thông báo lỗi.

4. Hiển thị kết quả:

Gọi hàm calculate_taxi_fare() với tham số là số km mà


người dùng đã nhập.
In kết quả mà hàm trả về, thông báo tổng tiền taxi.

Tóm tắt
1. Hàm input(): Dùng để nhận dữ liệu nhập từ người dùng dưới
dạng chuỗi.
2. Hàm float(): Dùng để chuyển đổi chuỗi sang số thực.
3. Cấu trúc điều kiện if-elif-else: Dùng để kiểm tra các điều
kiện và thực thi các đoạn mã khác nhau dựa trên kết quả của
các điều kiện đó.
4. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
5. try-except: Dùng để xử lý ngoại lệ, giúp chương trình có thể xử
lý các lỗi có thể xảy ra khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng các cấu trúc điều kiện,
hàm và xử lý ngoại lệ trong Python để giải quyết một bài toán cụ thể
về tính tiền taxi dựa trên số km đã đi.
005 - Viết chương trình để tính điểm
trung bình và xếp loại học sinh.

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tính điểm trung bình
của học sinh dựa trên các điểm số của các môn học và xếp loại học
sinh dựa trên điểm trung bình.

Giả định về điểm số và xếp loại (có thể thay đổi


theo yêu cầu cụ thể):
Điểm trung bình >= 8.5: Xuất sắc
Điểm trung bình >= 7.0 và < 8.5: Giỏi
Điểm trung bình >= 5.5 và < 7.0: Khá
Điểm trung bình >= 4.0 và < 5.5: Trung bình
Điểm trung bình < 4.0: Yếu

Thuật toán giải quyết


Đầu vào:

Điểm số của các môn học (một danh sách các số thực).

Đầu ra:

Điểm trung bình.


Xếp loại học sinh.

Các bước thực hiện:


1. Nhập điểm số của các môn học từ người dùng.
2. Tính điểm trung bình.
3. Xếp loại học sinh dựa trên điểm trung bình.
4. In ra điểm trung bình và xếp loại.

Code Python
# Chương trình tính điểm trung bình và xếp loại học sinh

# Hàm tính toán


def calculate_average(scores):
return sum(scores) / len(scores)

# Hàm phân loại


def classify_student(average):
if average >= 8.5:
return "Xuất sắc"
elif average >= 7.0:
return "Giỏi"
elif average >= 5.5:
return "Khá"
elif average >= 4.0:
return "Trung bình"
else:
return "Yếu"

# Nhập điểm số từ người dùng


try:
scores = []
num_subjects = int(input("Nhập số lượng môn học: "))
if num_subjects <= 0:
print("Số lượng môn học phải lớn hơn 0.")
else:
for i in range(num_subjects):
score = float(input(f"Nhập điểm môn học thứ
{i+1}: "))
if score < 0 or score > 10:
print("Điểm số phải từ 0 đến 10. Vui lòng
nhập lại.")
break
scores.append(score)

if len(scores) == num_subjects:
average_score = calculate_average(scores)
classification = classify_student(average_score)
print(f"Điểm trung bình: {average_score:.2f}")
print(f"Xếp loại: {classification}")
except ValueError:
print("Vui lòng nhập một số hợp lệ.")

Giải thích code


1. Định nghĩa hàm calculate_average(scores):

Hàm này nhận một danh sách scores chứa các điểm số của
các môn học và tính điểm trung bình.
Sử dụng hàm sum() để tính tổng điểm và chia cho độ dài
len() của danh sách scores để lấy điểm trung bình.

2. Định nghĩa hàm classify_student(average):

Hàm này nhận một tham số average là điểm trung bình và trả
về xếp loại học sinh dựa trên các tiêu chí đã cho.

3. Nhập điểm số từ người dùng:

Sử dụng vòng lặp for để nhập điểm số của từng môn học từ
người dùng.
Kiểm tra nếu điểm số nhập vào không hợp lệ (không trong
khoảng từ 0 đến 10) thì thông báo lỗi và yêu cầu nhập lại.

4. Kiểm tra và xử lý đầu vào:

Kiểm tra nếu số lượng môn học nhập vào không hợp lệ (<=
0) thì thông báo lỗi.

5. Hiển thị kết quả:


Gọi hàm calculate_average() với tham số là danh sách các
điểm số để tính điểm trung bình.
Gọi hàm classify_student() với tham số là điểm trung bình
để lấy xếp loại.
In kết quả điểm trung bình và xếp loại.

Tóm tắt
1. Hàm input(): Dùng để nhận dữ liệu nhập từ người dùng dưới
dạng chuỗi.
2. Hàm float() và int(): Dùng để chuyển đổi chuỗi sang số thực
và số nguyên.
3. Hàm sum(): Dùng để tính tổng các phần tử trong một danh sách.
4. Hàm len(): Dùng để lấy số lượng các phần tử trong một danh
sách.
5. Cấu trúc điều kiện if-elif-else: Dùng để kiểm tra các điều
kiện và thực thi các đoạn mã khác nhau dựa trên kết quả của
các điều kiện đó.
6. Vòng lặp for: Dùng để lặp qua một dãy các phần tử hoặc một
khoảng giá trị.
7. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
8. try-except: Dùng để xử lý ngoại lệ, giúp chương trình có thể xử
lý các lỗi có thể xảy ra khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng các cấu trúc điều kiện,
vòng lặp, hàm và xử lý ngoại lệ trong Python để giải quyết một bài
toán cụ thể về tính điểm trung bình và xếp loại học sinh.
006 - Viết chương trình để in bảng
cửu chương

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để in bảng cửu chương
từ 1 đến 10. Bảng cửu chương là bảng nhân, nơi mỗi số từ 1 đến 10
được nhân với các số từ 1 đến 10.

Thuật toán giải quyết


Đầu vào:

Không có đầu vào từ người dùng.

Đầu ra:

In ra bảng cửu chương từ 1 đến 10.

Các bước thực hiện:


1. Sử dụng vòng lặp lồng nhau để duyệt qua các số từ 1 đến 10.
2. Ở vòng lặp ngoài, duyệt qua từng số từ 1 đến 10 (đại diện cho
số bị nhân).
3. Ở vòng lặp trong, duyệt qua từng số từ 1 đến 10 (đại diện cho số
nhân).
4. In ra kết quả của phép nhân giữa số bị nhân và số nhân.

Code Python
# Chương trình in bảng cửu chương từ 1 đến 10

def print_multiplication_table():
for i in range(1, 11):
print(f"Bảng cửu chương {i}:")
for j in range(1, 11):
print(f"{i} x {j} = {i * j}")
print() # In dòng trống để ngăn cách giữa các bảng
cửu chương

# Gọi hàm để in bảng cửu chương


print_multiplication_table()

Giải thích code


1. Định nghĩa hàm print_multiplication_table():

Hàm này không nhận tham số và thực hiện việc in bảng cửu
chương từ 1 đến 10.
Sử dụng vòng lặp for để duyệt qua các số từ 1 đến 10 cho
cả số bị nhân và số nhân.
In kết quả của từng phép nhân theo định dạng “i x j = i * j”.

2. Vòng lặp for lồng nhau:

Vòng lặp ngoài for i in range(1, 11) để duyệt qua từng


số từ 1 đến 10, đại diện cho số bị nhân.
Vòng lặp trong for j in range(1, 11) để duyệt qua từng số
từ 1 đến 10, đại diện cho số nhân.
Trong vòng lặp trong, thực hiện phép nhân và in ra kết quả.

3. In dòng trống:

Sử dụng print() để in một dòng trống giữa các bảng cửu


chương, giúp kết quả dễ đọc hơn.
Tóm tắt
1. Vòng lặp for: Dùng để lặp qua một dãy các phần tử hoặc một
khoảng giá trị.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Chuỗi f-string (f""): Dùng để định dạng chuỗi một cách linh
hoạt và dễ đọc. Trong trường hợp này, f"{i} x {j} = {i * j}"
giúp chèn giá trị của các biến i, j và kết quả của phép nhân vào
trong chuỗi.

Chương trình trên minh họa cách sử dụng vòng lặp, hàm và định
dạng chuỗi trong Python để in bảng cửu chương từ 1 đến 10 một
cách rõ ràng và dễ đọc.
007 - Viết chương trình để kiểm tra
một năm có phải năm nhuận không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một năm
có phải là năm nhuận hay không.

Một năm là năm nhuận nếu:

1. Năm đó chia hết cho 4 và không chia hết cho 100, hoặc
2. Năm đó chia hết cho 400.

Thuật toán giải quyết


Đầu vào:

Một năm (một số nguyên).

Đầu ra:

Thông báo cho người dùng biết năm đó có phải là năm nhuận
hay không.

Các bước thực hiện:


1. Nhập năm từ người dùng.
2. Kiểm tra năm đó có phải là năm nhuận hay không dựa trên các
tiêu chí đã cho.
3. In ra kết quả.
Code Python
# Chương trình kiểm tra năm nhuận

def is_leap_year(year):
if (year % 4 == 0 and year % 100 != 0) or (year % 400 ==
0):
return True
else:
return False

# Nhập năm từ người dùng


try:
year = int(input("Nhập một năm: "))
if is_leap_year(year):
print(f"Năm {year} là năm nhuận.")
else:
print(f"Năm {year} không phải là năm nhuận.")
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm is_leap_year(year):

Hàm này nhận một tham số year là một năm và kiểm tra xem
năm đó có phải là năm nhuận hay không.
Sử dụng cấu trúc điều kiện if để kiểm tra các tiêu chí:
Nếu năm chia hết cho 4 và không chia hết cho 100, hoặc
năm chia hết cho 400, thì năm đó là năm nhuận.
Ngược lại, năm đó không phải là năm nhuận.

2. Nhập năm từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:

Gọi hàm is_leap_year() với tham số là năm mà người dùng


đã nhập.
In kết quả dựa trên giá trị trả về của hàm is_leap_year().

Tóm tắt
1. Hàm input(): Dùng để nhận dữ liệu nhập từ người dùng dưới
dạng chuỗi.
2. Hàm int(): Dùng để chuyển đổi chuỗi sang số nguyên.
3. Cấu trúc điều kiện if-else: Dùng để kiểm tra các điều kiện và
thực thi các đoạn mã khác nhau dựa trên kết quả của các điều
kiện đó.
4. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
5. try-except: Dùng để xử lý ngoại lệ, giúp chương trình có thể xử
lý các lỗi có thể xảy ra khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng các cấu trúc điều kiện,
hàm và xử lý ngoại lệ trong Python để giải quyết một bài toán cụ thể
về kiểm tra một năm có phải là năm nhuận hay không.
008 - Viết chương trình để đếm số
lượng số chẵn và lẻ trong một danh
sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số lượng số chẵn
và số lẻ trong một danh sách các số nguyên.

Thuật toán giải quyết


Đầu vào:

Một danh sách các số nguyên.

Đầu ra:

Số lượng số chẵn.
Số lượng số lẻ.

Các bước thực hiện:


1. Nhập danh sách các số nguyên từ người dùng.
2. Duyệt qua từng số trong danh sách và kiểm tra xem số đó là
chẵn hay lẻ.
3. Đếm số lượng số chẵn và số lẻ.
4. In ra kết quả.

Code Python
# Chương trình đếm số lượng số chẵn và số lẻ trong một danh
sách
def count_even_odd(numbers):
count_even = 0
count_odd = 0
for number in numbers:
if number % 2 == 0:
count_even += 1
else:
count_odd += 1
return count_even, count_odd

# Nhập danh sách các số nguyên từ người dùng


try:
input_list = input("Nhập các số nguyên, cách nhau bằng
dấu cách: ")
numbers = [int(num) for num in input_list.split()]

even_count, odd_count = count_even_odd(numbers)


print(f"Số lượng số chẵn: {even_count}")
print(f"Số lượng số lẻ: {odd_count}")
except ValueError:
print("Vui lòng nhập các số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm count_even_odd(numbers):

Hàm này nhận một danh sách numbers chứa các số nguyên.
Khởi tạo hai biến count_even và count_odd để đếm số lượng
số chẵn và số lẻ.
Sử dụng vòng lặp for để duyệt qua từng số trong danh
sách:
Nếu số đó chia hết cho 2 (number % 2 == 0), tăng biến
count_even lên 1.
Ngược lại, tăng biến count_odd lên 1.
Trả về số lượng số chẵn và số lẻ.

2. Nhập danh sách các số nguyên từ người dùng:


Sử dụng hàm input() để nhận dữ liệu từ người dùng dưới
dạng chuỗi.
Tách chuỗi thành các phần tử bằng cách sử dụng split()
và chuyển đổi từng phần tử thành số nguyên bằng cách sử
dụng int(). Sử dụng list comprehension để thực hiện việc
này: [int(num) for num in input_list.split()].

3. Hiển thị kết quả:

Gọi hàm count_even_odd() với tham số là danh sách các số


nguyên mà người dùng đã nhập.
In ra số lượng số chẵn và số lẻ dựa trên kết quả trả về của
hàm.

Tóm tắt
1. Hàm input(): Dùng để nhận dữ liệu nhập từ người dùng dưới
dạng chuỗi.
2. Hàm split(): Dùng để tách chuỗi thành các phần tử dựa trên
một ký tự phân tách (mặc định là dấu cách).
3. List comprehension: Dùng để tạo danh sách mới bằng cách
duyệt qua một iterable và áp dụng một biểu thức cho từng phần
tử.
4. Vòng lặp for: Dùng để lặp qua một dãy các phần tử.
5. Cấu trúc điều kiện if-else: Dùng để kiểm tra các điều kiện và
thực thi các đoạn mã khác nhau dựa trên kết quả của các điều
kiện đó.
6. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
7. try-except: Dùng để xử lý ngoại lệ, giúp chương trình có thể xử
lý các lỗi có thể xảy ra khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng các cấu trúc vòng lặp,
điều kiện, hàm và xử lý ngoại lệ trong Python để giải quyết một bài
toán cụ thể về đếm số lượng số chẵn và số lẻ trong một danh sách
các số nguyên.
009 - Viết chương trình để in tất cả
các số nguyên tố từ 1 đến 100

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để in tất cả các số
nguyên tố từ 1 đến 100.

Thuật toán giải quyết


Đầu vào:

Không có đầu vào từ người dùng.

Đầu ra:

In ra tất cả các số nguyên tố từ 1 đến 100.

Định nghĩa số nguyên tố


Một số nguyên tố là một số tự nhiên lớn hơn 1, chỉ có hai ước là 1
và chính nó.

Các bước thực hiện:


1. Duyệt qua tất cả các số từ 1 đến 100.
2. Kiểm tra xem số đó có phải là số nguyên tố hay không.
3. Nếu số đó là số nguyên tố, in ra số đó.
Code Python
# Chương trình in tất cả các số nguyên tố từ 1 đến 100

def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True

def print_primes_up_to_100():
for number in range(1, 101):
if is_prime(number):
print(number, end=' ')
print() # Dòng mới sau khi in xong tất cả các số nguyên
tố

# Gọi hàm để in các số nguyên tố từ 1 đến 100


print_primes_up_to_100()

Giải thích code


1. Định nghĩa hàm is_prime(n):

Hàm này nhận một tham số n là một số nguyên và kiểm tra


xem số đó có phải là số nguyên tố hay không.
Nếu n nhỏ hơn hoặc bằng 1, trả về False vì các số này
không phải là số nguyên tố.
Sử dụng vòng lặp for để kiểm tra từ 2 đến căn bậc hai của n
(int(n**0.5) + 1). Nếu n chia hết cho bất kỳ số nào trong
khoảng này, trả về False.
Nếu không có số nào trong khoảng này chia hết n, trả về
True.

2. Định nghĩa hàm print_primes_up_to_100():


Hàm này duyệt qua các số từ 1 đến 100.
Sử dụng vòng lặp for để kiểm tra từng số trong khoảng từ 1
đến 100.
Gọi hàm is_prime(number) để kiểm tra xem số đó có phải là
số nguyên tố hay không.
Nếu số đó là số nguyên tố, in ra số đó trên cùng một dòng,
cách nhau bởi một dấu cách.

3. Gọi hàm print_primes_up_to_100():

Gọi hàm này để thực hiện việc in ra các số nguyên tố từ 1


đến 100.

Tóm tắt
1. Vòng lặp for: Dùng để lặp qua một dãy các phần tử.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Toán tử số học: Dùng để tính toán căn bậc hai và kiểm tra chia
hết.
4. Cấu trúc điều kiện if-else: Dùng để kiểm tra các điều kiện và
thực thi các đoạn mã khác nhau dựa trên kết quả của các điều
kiện đó.
5. In ra kết quả: Sử dụng hàm print() để in ra kết quả. Tham số
end=' ' trong hàm print() được sử dụng để in các số nguyên
tố trên cùng một dòng, cách nhau bởi một dấu cách.

Chương trình trên minh họa cách sử dụng các cấu trúc vòng lặp,
điều kiện và hàm trong Python để giải quyết một bài toán cụ thể về
in tất cả các số nguyên tố từ 1 đến 100.
010 - Viết chương trình để tìm ước số
chung lớn nhất (USCLN) của hai số

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm ước số chung lớn
nhất (USCLN) của hai số nguyên.

Định nghĩa ước số chung lớn nhất


Ước số chung lớn nhất (USCLN) của hai số nguyên a và b là số lớn
nhất chia hết cả hai số a và b.

Thuật toán giải quyết


Để tìm USCLN, ta có thể sử dụng thuật toán Euclid, một phương
pháp hiệu quả và dễ hiểu:

1. Nếu b = 0 thì USCLN(a, b) = a.


2. Ngược lại, tính USCLN(b, a % b).

Các bước thực hiện:


1. Nhập hai số nguyên từ người dùng.
2. Áp dụng thuật toán Euclid để tìm USCLN của hai số.
3. In ra kết quả.

Code Python
# Chương trình tìm ước số chung lớn nhất (USCLN) của hai số
nguyên
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a

# Nhập hai số nguyên từ người dùng


try:
num1 = int(input("Nhập số thứ nhất: "))
num2 = int(input("Nhập số thứ hai: "))

uscln = gcd(num1, num2)


print(f"Ước số chung lớn nhất của {num1} và {num2} là:
{uscln}")
except ValueError:
print("Vui lòng nhập các số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm gcd(a, b):

Hàm này nhận hai tham số a và b là hai số nguyên.


Sử dụng vòng lặp while để lặp cho đến khi b bằng 0.
Trong mỗi lần lặp, gán giá trị a cho b và b cho a % b (phép
chia lấy dư).
Khi b bằng 0, giá trị của a là USCLN của hai số ban đầu.

2. Nhập hai số nguyên từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:


Gọi hàm gcd() với hai tham số là hai số nguyên mà người
dùng đã nhập.
In ra kết quả USCLN của hai số.

Tóm tắt
1. Vòng lặp while: Dùng để lặp cho đến khi một điều kiện nào đó
không còn đúng.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Toán tử số học: Dùng để thực hiện phép chia lấy dư.
4. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
5. Chuyển đổi dữ liệu: Sử dụng hàm int() để chuyển đổi chuỗi
sang số nguyên.
6. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng các cấu trúc vòng lặp,
hàm và xử lý ngoại lệ trong Python để giải quyết một bài toán cụ thể
về tìm ước số chung lớn nhất của hai số nguyên.
Chương 2: Hàm
11. Viết hàm để tính giai thừa của một số.
12. Viết hàm để tính tổng các số từ 1 đến n.
13. Viết hàm để kiểm tra một số có phải là số nguyên tố không.
14. Viết hàm để tìm số lớn nhất trong một danh sách.
15. Viết hàm để tính tổng các chữ số của một số.
16. Viết hàm để kiểm tra một chuỗi có phải là palindrome không.
17. Viết hàm để tính lũy thừa của một số.
18. Viết hàm để chuyển đổi độ C sang độ F.
19. Viết hàm để tính chu vi và diện tích hình tròn.
20. Viết hàm để tính chu vi và diện tích hình chữ nhật.
011 - Viết hàm để tính giai thừa của
một số

Giải thích đề bài


Bài tập yêu cầu bạn viết một hàm để tính giai thừa của một số
nguyên. Giai thừa của một số nguyên dương n (ký hiệu là n!) là tích
của tất cả các số nguyên dương từ 1 đến n.

Thuật toán giải quyết


Để tính giai thừa của một số nguyên dương n, ta có thể sử dụng hai
phương pháp:

1. Sử dụng vòng lặp.


2. Sử dụng đệ quy.

Phương pháp 1: Sử dụng vòng lặp


Đầu vào:

Một số nguyên dương n.

Đầu ra:

Giai thừa của số nguyên dương n.

Các bước thực hiện:


1. Nhập một số nguyên dương từ người dùng.
2. Sử dụng vòng lặp để tính giai thừa.
3. In ra kết quả.
Code Python (Sử dụng vòng lặp)
# Chương trình tính giai thừa của một số nguyên sử dụng vòng
lặp

def factorial_iterative(n):
if n < 0:
return "Giai thừa không xác định cho số âm"
result = 1
for i in range(1, n + 1):
result *= i
return result

# Nhập số nguyên dương từ người dùng


try:
number = int(input("Nhập một số nguyên dương: "))
if number < 0:
print("Giai thừa không xác định cho số âm")
else:
print(f"Giai thừa của {number} là:
{factorial_iterative(number)}")
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ.")

Phương pháp 2: Sử dụng đệ quy


Đầu vào:

Một số nguyên dương n.

Đầu ra:

Giai thừa của số nguyên dương n.

Các bước thực hiện:


1. Nhập một số nguyên dương từ người dùng.
2. Sử dụng hàm đệ quy để tính giai thừa.
3. In ra kết quả.

Code Python (Sử dụng đệ quy)


# Chương trình tính giai thừa của một số nguyên sử dụng đệ
quy

def factorial_recursive(n):
if n < 0:
return "Giai thừa không xác định cho số âm"
elif n == 0 or n == 1:
return 1
else:
return n * factorial_recursive(n - 1)

# Nhập số nguyên dương từ người dùng


try:
number = int(input("Nhập một số nguyên dương: "))
if number < 0:
print("Giai thừa không xác định cho số âm")
else:
print(f"Giai thừa của {number} là:
{factorial_recursive(number)}")
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm factorial_iterative(n):

Hàm này nhận một tham số n là một số nguyên và tính giai


thừa của nó bằng cách sử dụng vòng lặp.
Nếu n nhỏ hơn 0, trả về thông báo lỗi.
Khởi tạo biến result bằng 1 và sử dụng vòng lặp từ 1 đến n
để tính giai thừa.

2. Định nghĩa hàm factorial_recursive(n):


Hàm này nhận một tham số n là một số nguyên và tính giai
thừa của nó bằng cách sử dụng đệ quy.
Nếu n nhỏ hơn 0, trả về thông báo lỗi.
Nếu n bằng 0 hoặc 1, trả về 1 (cơ sở của đệ quy).
Ngược lại, trả về n nhân với giai thừa của n-1.

3. Nhập số nguyên dương từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

4. Hiển thị kết quả:

Gọi hàm factorial_iterative() hoặc


factorial_recursive() với tham số là số nguyên dương mà
người dùng đã nhập.
In ra kết quả giai thừa của số đó.

Tóm tắt
1. Vòng lặp for: Dùng để lặp qua một dãy các phần tử.
2. Hàm đệ quy: Một hàm gọi chính nó để giải quyết một bài toán.
3. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
4. Toán tử số học: Dùng để thực hiện các phép tính.
5. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
6. Chuyển đổi dữ liệu: Sử dụng hàm int() để chuyển đổi chuỗi
sang số nguyên.
7. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.
Chương trình trên minh họa cách sử dụng các cấu trúc vòng lặp, đệ
quy, hàm và xử lý ngoại lệ trong Python để giải quyết bài toán tính
giai thừa của một số nguyên dương.
012 - Viết hàm để tính tổng các số từ 1
đến n

Giải thích đề bài


Bài tập yêu cầu bạn viết một hàm để tính tổng các số từ 1 đến n.

Thuật toán giải quyết


Để tính tổng các số từ 1 đến n, ta có thể sử dụng công thức tính
tổng của một dãy số liên tiếp hoặc sử dụng vòng lặp để tính tổng.

Công thức tính tổng của các số từ 1 đến n là: Tổng = (n * (n +


1))/2

Các bước thực hiện:


1. Nhập một số nguyên dương n từ người dùng.
2. Tính tổng các số từ 1 đến n.
3. In ra kết quả.

Code Python
# Chương trình tính tổng các số từ 1 đến n

def sum_of_numbers(n):
if n < 1:
return "Vui lòng nhập một số nguyên dương lớn hơn
hoặc bằng 1."
return n * (n + 1) // 2

# Nhập số nguyên dương từ người dùng


try:
number = int(input("Nhập một số nguyên dương: "))
if number < 1:
print("Vui lòng nhập một số nguyên dương lớn hơn hoặc
bằng 1.")
else:
print(f"Tổng các số từ 1 đến {number} là:
{sum_of_numbers(number)}")
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm sum_of_numbers(n):

Hàm này nhận một tham số n là một số nguyên và tính tổng


các số từ 1 đến n bằng công thức: Tổng = (n * (n + 1))/2
Nếu n nhỏ hơn 1, trả về thông báo lỗi.
Trả về kết quả tổng theo công thức.

2. Nhập số nguyên dương từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:

Gọi hàm sum_of_numbers() với tham số là số nguyên dương


mà người dùng đã nhập.
In ra kết quả tổng các số từ 1 đến số đó.
Tóm tắt
1. Công thức toán học: Sử dụng công thức để tính tổng các số từ
1 đến n.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Toán tử số học: Dùng để thực hiện các phép tính.
4. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
5. Chuyển đổi dữ liệu: Sử dụng hàm int() để chuyển đổi chuỗi
sang số nguyên.
6. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng công thức toán học, hàm
và xử lý ngoại lệ trong Python để giải quyết bài toán tính tổng các số
từ 1 đến n.
013 - Viết hàm để kiểm tra một số có
phải là số nguyên tố không

Giải thích đề bài


Bài tập yêu cầu bạn viết một hàm để kiểm tra xem một số có phải là
số nguyên tố hay không.

Định nghĩa số nguyên tố


Một số nguyên tố là một số tự nhiên lớn hơn 1, chỉ có hai ước là 1
và chính nó.

Thuật toán giải quyết


Để kiểm tra xem một số n có phải là số nguyên tố hay không, bạn có
thể làm theo các bước sau:

1. Nếu n nhỏ hơn hoặc bằng 1, thì n không phải là số nguyên tố.
2. Nếu n là 2 hoặc 3, thì n là số nguyên tố.
3. Nếu n chia hết cho 2 hoặc 3, thì n không phải là số nguyên tố.
4. Kiểm tra các số lẻ từ 5 đến căn bậc hai của n. Nếu n chia hết
cho bất kỳ số nào trong khoảng này, thì n không phải là số
nguyên tố.

Các bước thực hiện:


1. Nhập một số nguyên từ người dùng.
2. Sử dụng hàm kiểm tra số nguyên tố.
3. In ra kết quả.
Code Python
# Chương trình kiểm tra một số có phải là số nguyên tố không

def is_prime(n):
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True

# Nhập số nguyên từ người dùng


try:
number = int(input("Nhập một số nguyên: "))
if is_prime(number):
print(f"{number} là số nguyên tố.")
else:
print(f"{number} không phải là số nguyên tố.")
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm is_prime(n):

Hàm này nhận một tham số n là một số nguyên và kiểm tra


xem số đó có phải là số nguyên tố hay không.
Nếu n nhỏ hơn hoặc bằng 1, trả về False vì các số này
không phải là số nguyên tố.
Nếu n là 2 hoặc 3, trả về True vì 2 và 3 là các số nguyên tố.
Nếu n chia hết cho 2 hoặc 3, trả về False.
Sử dụng vòng lặp while để kiểm tra các số từ 5 đến căn bậc
hai của n. Nếu n chia hết cho bất kỳ số nào trong khoảng
này, trả về False.
Nếu không có số nào trong khoảng này chia hết n, trả về
True.

2. Nhập số nguyên từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:

Gọi hàm is_prime() với tham số là số nguyên mà người


dùng đã nhập.
In ra kết quả kiểm tra số nguyên tố.

Tóm tắt
1. Vòng lặp while: Dùng để lặp cho đến khi một điều kiện nào đó
không còn đúng.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Toán tử số học: Dùng để thực hiện phép chia và kiểm tra chia
hết.
4. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
5. Chuyển đổi dữ liệu: Sử dụng hàm int() để chuyển đổi chuỗi
sang số nguyên.
6. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.
Chương trình trên minh họa cách sử dụng các cấu trúc vòng lặp,
hàm và xử lý ngoại lệ trong Python để giải quyết bài toán kiểm tra
xem một số có phải là số nguyên tố hay không.
014 - Viết hàm để tìm số lớn nhất
trong một danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một hàm để tìm số lớn nhất trong một danh
sách các số.

Thuật toán giải quyết


Để tìm số lớn nhất trong một danh sách, ta có thể duyệt qua tất cả
các phần tử của danh sách và so sánh để tìm ra số lớn nhất.

Các bước thực hiện:


1. Nhập danh sách các số từ người dùng.
2. Sử dụng hàm để tìm số lớn nhất trong danh sách.
3. In ra kết quả.

Code Python
# Chương trình tìm số lớn nhất trong một danh sách

def find_max(numbers):
if not numbers:
return "Danh sách rỗng, không có số lớn nhất."
max_number = numbers[0]
for num in numbers:
if num > max_number:
max_number = num
return max_number

# Nhập danh sách các số từ người dùng


try:
input_numbers = input("Nhập các số, cách nhau bởi dấu
cách: ")
numbers = [float(num) for num in input_numbers.split()]

if not numbers:
print("Danh sách rỗng, không có số lớn nhất.")
else:
max_number = find_max(numbers)
print(f"Số lớn nhất trong danh sách là:
{max_number}")
except ValueError:
print("Vui lòng nhập các số hợp lệ.")

Giải thích code


1. Định nghĩa hàm find_max(numbers):

Hàm này nhận một tham số numbers là một danh sách các số
và tìm số lớn nhất trong danh sách đó.
Nếu danh sách rỗng, trả về thông báo lỗi.
Khởi tạo biến max_number bằng phần tử đầu tiên của danh
sách.
Sử dụng vòng lặp for để duyệt qua từng phần tử trong danh
sách. Nếu phần tử hiện tại lớn hơn max_number, cập nhật
max_number.
Trả về giá trị của max_number.

2. Nhập danh sách các số từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng dưới


dạng một chuỗi.
Tách chuỗi thành các phần tử con bằng phương thức
split() và chuyển đổi từng phần tử thành số thực (float)
bằng cách sử dụng list comprehension.
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là các số hợp lệ, từ đó in ra thông báo lỗi.
3. Hiển thị kết quả:

Gọi hàm find_max() với tham số là danh sách các số mà


người dùng đã nhập.
In ra kết quả số lớn nhất trong danh sách.

Tóm tắt
1. Vòng lặp for: Dùng để lặp qua các phần tử của một danh sách.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Toán tử so sánh: Dùng để so sánh các phần tử trong danh
sách.
4. List comprehension: Dùng để tạo danh sách mới bằng cách
chuyển đổi và lọc các phần tử từ một danh sách khác.
5. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
6. Chuyển đổi dữ liệu: Sử dụng phương thức split() và float()
để chuyển đổi chuỗi thành danh sách các số thực.
7. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng các cấu trúc vòng lặp,
hàm, list comprehension và xử lý ngoại lệ trong Python để giải quyết
bài toán tìm số lớn nhất trong một danh sách.
015 - Viết hàm để tính tổng các chữ số
của một số

Giải thích đề bài


Bài tập yêu cầu bạn viết một hàm để tính tổng các chữ số của một
số.

Thuật toán giải quyết


Để tính tổng các chữ số của một số nguyên, ta có thể tách từng chữ
số của số đó và cộng lại với nhau.

Các bước thực hiện:


1. Nhập một số nguyên từ người dùng.
2. Sử dụng hàm để tính tổng các chữ số của số đó.
3. In ra kết quả.

Code Python
# Chương trình tính tổng các chữ số của một số

def sum_of_digits(n):
# Đảm bảo n là số dương
n = abs(n)
total = 0
while n > 0:
total += n % 10
n //= 10
return total

# Nhập số nguyên từ người dùng


try:
number = int(input("Nhập một số nguyên: "))
print(f"Tổng các chữ số của {number} là:
{sum_of_digits(number)}")
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm sum_of_digits(n):

Hàm này nhận một tham số n là một số nguyên và tính tổng


các chữ số của số đó.
Chuyển n thành giá trị tuyệt đối để xử lý cả số dương và số
âm.
Khởi tạo biến total bằng 0 để lưu trữ tổng các chữ số.
Sử dụng vòng lặp while để lặp cho đến khi n bằng 0.
Trong mỗi vòng lặp, thêm chữ số cuối cùng của n vào
total.
Loại bỏ chữ số cuối cùng của n bằng cách chia n cho 10
và lấy phần nguyên.

2. Nhập số nguyên từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi dữ liệu từ chuỗi sang số nguyên bằng hàm
int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số nguyên hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:

Gọi hàm sum_of_digits() với tham số là số nguyên mà


người dùng đã nhập.
In ra kết quả tổng các chữ số của số đó.
Tóm tắt
1. Vòng lặp while: Dùng để lặp cho đến khi một điều kiện nào đó
không còn đúng.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Toán tử số học: Dùng để thực hiện phép chia lấy dư và phép
chia lấy phần nguyên.
4. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
5. Chuyển đổi dữ liệu: Sử dụng hàm int() để chuyển đổi chuỗi
sang số nguyên.
6. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng các cấu trúc vòng lặp,
hàm và xử lý ngoại lệ trong Python để giải quyết bài toán tính tổng
các chữ số của một số.
016 - Viết hàm để kiểm tra một chuỗi
có phải là palindrome không

Giải thích đề bài


Bài tập yêu cầu bạn viết một hàm để kiểm tra xem một chuỗi có phải
là palindrome hay không. Một chuỗi palindrome là chuỗi đọc xuôi và
ngược đều giống nhau, chẳng hạn như “madam” hoặc “racecar”.

Thuật toán giải quyết


Để kiểm tra một chuỗi có phải là palindrome hay không, ta có thể
làm theo các bước sau:

1. Chuyển chuỗi về cùng một dạng chuẩn (ví dụ: chuyển tất cả ký
tự về chữ thường và loại bỏ các ký tự không phải chữ cái và số).
2. So sánh chuỗi với chuỗi đảo ngược của nó.
3. Nếu hai chuỗi giống nhau, chuỗi ban đầu là palindrome.

Các bước thực hiện:


1. Nhập một chuỗi từ người dùng.
2. Sử dụng hàm để kiểm tra xem chuỗi có phải là palindrome hay
không.
3. In ra kết quả.

Code Python
# Chương trình kiểm tra một chuỗi có phải là palindrome không

def is_palindrome(s):
# Chuyển tất cả ký tự về chữ thường và loại bỏ các ký tự
không phải chữ cái và số
s = ''.join(char.lower() for char in s if char.isalnum())
# So sánh chuỗi với chuỗi đảo ngược của nó
return s == s[::-1]

# Nhập chuỗi từ người dùng


input_string = input("Nhập một chuỗi: ")

if is_palindrome(input_string):
print(f'"{input_string}" là palindrome.')
else:
print(f'"{input_string}" không phải là palindrome.')

Giải thích code


1. Định nghĩa hàm is_palindrome(s):

Hàm này nhận một tham số s là một chuỗi và kiểm tra xem
chuỗi đó có phải là palindrome hay không.
Sử dụng list comprehension để chuyển tất cả các ký tự của
chuỗi về chữ thường và loại bỏ các ký tự không phải chữ cái
và số.
So sánh chuỗi đã chuẩn hóa với chuỗi đảo ngược của nó
(sử dụng slicing [::-1] để đảo ngược chuỗi).

2. Nhập chuỗi từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng dưới


dạng một chuỗi.

3. Hiển thị kết quả:

Gọi hàm is_palindrome() với tham số là chuỗi mà người


dùng đã nhập.
In ra kết quả kiểm tra chuỗi có phải là palindrome hay không.
Tóm tắt
1. List comprehension: Dùng để tạo danh sách mới bằng cách
chuyển đổi và lọc các phần tử từ một danh sách khác.
2. Phương thức chuỗi:
lower(): Dùng để chuyển các ký tự của chuỗi về chữ
thường.
isalnum(): Dùng để kiểm tra xem một ký tự có phải là chữ
cái hoặc số không.
3. Slicing [::-1]: Dùng để đảo ngược chuỗi.
4. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
5. Câu điều kiện if-else: Dùng để kiểm tra và thực hiện các hành
động dựa trên điều kiện.

Chương trình trên minh họa cách sử dụng list comprehension, các
phương thức chuỗi và slicing trong Python để kiểm tra xem một
chuỗi có phải là palindrome hay không.
017 - Viết hàm để tính lũy thừa của
một số

Giải thích đề bài


Bài tập yêu cầu bạn viết một hàm để tính lũy thừa của một số. Cụ
thể, hàm này sẽ nhận vào hai tham số: cơ số (base) và số mũ
(exponent), và trả về kết quả của phép tính.

Thuật toán giải quyết


Để tính lũy thừa của một số, ta có thể sử dụng vòng lặp hoặc hàm
tích hợp sẵn trong Python như pow(). Ở đây, chúng ta sẽ sử dụng
vòng lặp để thực hiện phép tính lũy thừa nhằm minh họa cách tính
toán bằng cách nhân lặp lại.

Các bước thực hiện:


1. Nhập cơ số và số mũ từ người dùng.
2. Sử dụng hàm để tính lũy thừa của cơ số với số mũ.
3. In ra kết quả.

Code Python
# Chương trình tính lũy thừa của một số

def power(base, exponent):


result = 1
for _ in range(abs(exponent)):
result *= base
if exponent < 0:
result = 1 / result
return result
# Nhập cơ số và số mũ từ người dùng
try:
base = float(input("Nhập cơ số: "))
exponent = int(input("Nhập số mũ: "))
print(f"{base} ^ {exponent} = {power(base, exponent)}")
except ValueError:
print("Vui lòng nhập cơ số là một số và số mũ là một số
nguyên hợp lệ.")

Giải thích code


1. Định nghĩa hàm power(base, exponent):

Hàm này nhận hai tham số base (cơ số) và exponent (số mũ)
và tính lũy thừa của base với exponent.
Khởi tạo biến result bằng 1.
Sử dụng vòng lặp for để nhân base với result
abs(exponent) lần.
Nếu exponent là số âm, lấy nghịch đảo của result để tính
lũy thừa âm.
Trả về kết quả result.

2. Nhập cơ số và số mũ từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng.


Chuyển đổi cơ số từ chuỗi sang số thực bằng hàm float()
và số mũ từ chuỗi sang số nguyên bằng hàm int().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số hoặc số nguyên hợp lệ, từ đó in ra thông
báo lỗi.

3. Hiển thị kết quả:

Gọi hàm power() với các tham số là cơ số và số mũ mà


người dùng đã nhập.
In ra kết quả phép tính lũy thừa.

Tóm tắt
1. Vòng lặp for: Dùng để lặp qua một dãy số hoặc các phần tử
của một đối tượng.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Toán tử số học: Dùng để thực hiện phép nhân và phép chia.
4. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
5. Chuyển đổi dữ liệu: Sử dụng hàm float() để chuyển đổi chuỗi
sang số thực và hàm int() để chuyển đổi chuỗi sang số
nguyên.
6. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng vòng lặp, hàm và xử lý
ngoại lệ trong Python để tính lũy thừa của một số.
018 - Viết hàm để chuyển đổi độ C
sang độ F

Giải thích đề bài


Bài tập yêu cầu bạn viết một hàm để chuyển đổi nhiệt độ từ độ
Celsius (°C) sang độ Fahrenheit (°F). Công thức chuyển đổi giữa độ
Celsius và độ Fahrenheit là: F = (C * 9/5) + 32

Thuật toán giải quyết


Để chuyển đổi nhiệt độ từ độ Celsius sang độ Fahrenheit, ta có thể
làm theo các bước sau:

1. Nhập nhiệt độ tính bằng độ Celsius từ người dùng.


2. Sử dụng hàm để tính và chuyển đổi sang độ Fahrenheit.
3. In ra kết quả.

Code Python
# Chương trình chuyển đổi độ Celsius sang độ Fahrenheit

def celsius_to_fahrenheit(celsius):
return celsius * 9 / 5 + 32

# Nhập nhiệt độ tính bằng độ Celsius từ người dùng


try:
celsius = float(input("Nhập nhiệt độ tính bằng độ
Celsius: "))
fahrenheit = celsius_to_fahrenheit(celsius)
print(f"{celsius}°C bằng {fahrenheit}°F")
except ValueError:
print("Vui lòng nhập một giá trị hợp lệ cho độ Celsius.")
Giải thích code
1. Định nghĩa hàm celsius_to_fahrenheit(celsius):

Hàm này nhận một tham số celsius là nhiệt độ tính bằng độ


Celsius và trả về nhiệt độ tương ứng tính bằng độ
Fahrenheit.
Sử dụng công thức chuyển đổi: F = (C * 9/5) + 32
Trả về kết quả đã chuyển đổi.

2. Nhập nhiệt độ tính bằng độ Celsius từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng dưới


dạng một chuỗi.
Chuyển đổi dữ liệu từ chuỗi sang số thực bằng hàm float().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số hợp lệ, từ đó in ra thông báo lỗi.

3. Hiển thị kết quả:

Gọi hàm celsius_to_fahrenheit() với tham số là nhiệt độ


tính bằng độ Celsius mà người dùng đã nhập.
In ra kết quả chuyển đổi sang độ Fahrenheit.

Tóm tắt
1. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
2. Toán tử số học: Dùng để thực hiện các phép nhân, chia và
cộng.
3. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
4. Chuyển đổi dữ liệu: Sử dụng hàm float() để chuyển đổi chuỗi
sang số thực.
5. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.

Chương trình trên minh họa cách sử dụng hàm và xử lý ngoại lệ


trong Python để chuyển đổi nhiệt độ từ độ Celsius sang độ
Fahrenheit.
019 - Viết hàm để tính chu vi và diện
tích hình tròn

Giải thích đề bài


Bài tập yêu cầu bạn viết hai hàm để tính chu vi và diện tích của hình
tròn. Để làm điều này, ta cần biết bán kính của hình tròn. Công thức
để tính chu vi và diện tích của hình tròn như sau:

Chu vi (C) của hình tròn: C = 2 * pi * r


Diện tích (A) của hình tròn: A = pi * r^2

Trong đó, r là bán kính và pi có giá trị xấp xỉ 3.14159.

Thuật toán giải quyết


Để tính chu vi và diện tích của hình tròn:

1. Nhập bán kính từ người dùng.


2. Sử dụng hàm để tính chu vi và diện tích.
3. In ra kết quả.

Code Python
import math

# Hàm tính chu vi hình tròn


def circumference(radius):
return 2 * math.pi * radius

# Hàm tính diện tích hình tròn


def area(radius):
return math.pi * radius * radius
# Nhập bán kính từ người dùng
try:
radius = float(input("Nhập bán kính của hình tròn: "))
if radius < 0:
print("Bán kính phải là một số không âm.")
else:
circ = circumference(radius)
ar = area(radius)
print(f"Chu vi của hình tròn là: {circ}")
print(f"Diện tích của hình tròn là: {ar}")
except ValueError:
print("Vui lòng nhập một giá trị hợp lệ cho bán kính.")

Giải thích code


1. Sử dụng thư viện math:

Thư viện math cung cấp hằng số math.pi với giá trị xấp xỉ
của pi.

2. Định nghĩa hàm circumference(radius):

Hàm này nhận một tham số radius là bán kính của hình tròn
và trả về chu vi của hình tròn.
Sử dụng công thức: C = 2 * pi * r.

3. Định nghĩa hàm area(radius):

Hàm này nhận một tham số radius là bán kính của hình tròn
và trả về diện tích của hình tròn.
Sử dụng công thức: A = pi * r^2.

4. Nhập bán kính từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng dưới


dạng một chuỗi.
Chuyển đổi dữ liệu từ chuỗi sang số thực bằng hàm float().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số hợp lệ, từ đó in ra thông báo lỗi.
Kiểm tra nếu bán kính là số âm thì in ra thông báo lỗi vì bán
kính không thể là số âm.

5. Hiển thị kết quả:

Gọi hàm circumference() và area() với tham số là bán kính


mà người dùng đã nhập.
In ra kết quả tính toán chu vi và diện tích của hình tròn.

Tóm tắt
1. Thư viện math: Cung cấp các hằng số và hàm toán học, như
math.pi.
2. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
3. Toán tử số học: Dùng để thực hiện các phép nhân và bình
phương.
4. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
5. Chuyển đổi dữ liệu: Sử dụng hàm float() để chuyển đổi chuỗi
sang số thực.
6. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.
7. Câu điều kiện if-else: Dùng để kiểm tra điều kiện và thực hiện
các hành động dựa trên điều kiện đó.

Chương trình trên minh họa cách sử dụng thư viện math, hàm, xử lý
ngoại lệ và câu điều kiện trong Python để tính chu vi và diện tích của
hình tròn.
020 - Viết hàm để tính chu vi và diện
tích hình chữ nhật

Giải thích đề bài


Bài tập yêu cầu bạn viết hai hàm để tính chu vi và diện tích của hình
chữ nhật. Để làm điều này, ta cần biết chiều dài và chiều rộng của
hình chữ nhật. Công thức để tính chu vi và diện tích của hình chữ
nhật như sau:

Chu vi (P) của hình chữ nhật: P = 2 * (dài + rộng)


Diện tích (A) của hình chữ nhật: A = dài * rộng

Thuật toán giải quyết


Để tính chu vi và diện tích của hình chữ nhật:

1. Nhập chiều dài và chiều rộng từ người dùng.


2. Sử dụng hàm để tính chu vi và diện tích.
3. In ra kết quả.

Code Python
# Hàm tính chu vi hình chữ nhật
def rectangle_perimeter(length, width):
return 2 * (length + width)

# Hàm tính diện tích hình chữ nhật


def rectangle_area(length, width):
return length * width

# Nhập chiều dài và chiều rộng từ người dùng


try:
length = float(input("Nhập chiều dài của hình chữ nhật:
"))
width = float(input("Nhập chiều rộng của hình chữ nhật:
"))

if length < 0 or width < 0:


print("Chiều dài và chiều rộng phải là những số không
âm.")
else:
perimeter = rectangle_perimeter(length, width)
area = rectangle_area(length, width)
print(f"Chu vi của hình chữ nhật là: {perimeter}")
print(f"Diện tích của hình chữ nhật là: {area}")
except ValueError:
print("Vui lòng nhập một giá trị hợp lệ cho chiều dài và
chiều rộng.")

Giải thích code


1. Định nghĩa hàm rectangle_perimeter(length, width):

Hàm này nhận hai tham số length (chiều dài) và width


(chiều rộng) và trả về chu vi của hình chữ nhật.
Sử dụng công thức: P = 2 * (dài + rộng).

2. Định nghĩa hàm rectangle_area(length, width):

Hàm này nhận hai tham số length (chiều dài) và width


(chiều rộng) và trả về diện tích của hình chữ nhật.
Sử dụng công thức: A = dài * rộng.

3. Nhập chiều dài và chiều rộng từ người dùng:

Sử dụng hàm input() để nhận dữ liệu từ người dùng dưới


dạng một chuỗi.
Chuyển đổi dữ liệu từ chuỗi sang số thực bằng hàm float().
Sử dụng try-except để bắt lỗi nếu người dùng nhập vào
không phải là số hợp lệ, từ đó in ra thông báo lỗi.
Kiểm tra nếu chiều dài hoặc chiều rộng là số âm thì in ra
thông báo lỗi vì chiều dài và chiều rộng không thể là số âm.

4. Hiển thị kết quả:

Gọi hàm rectangle_perimeter() và rectangle_area() với


các tham số là chiều dài và chiều rộng mà người dùng đã
nhập.
In ra kết quả tính toán chu vi và diện tích của hình chữ nhật.

Tóm tắt
1. Hàm và định nghĩa hàm: Dùng để đóng gói các đoạn mã có thể
tái sử dụng và giúp chương trình dễ đọc hơn.
2. Toán tử số học: Dùng để thực hiện các phép cộng và nhân.
3. Nhập dữ liệu: Sử dụng hàm input() để nhận dữ liệu từ người
dùng.
4. Chuyển đổi dữ liệu: Sử dụng hàm float() để chuyển đổi chuỗi
sang số thực.
5. Xử lý ngoại lệ try-except: Dùng để xử lý các lỗi có thể xảy ra
khi chuyển đổi dữ liệu hoặc các lỗi khác.
6. Câu điều kiện if-else: Dùng để kiểm tra điều kiện và thực hiện
các hành động dựa trên điều kiện đó.

Chương trình trên minh họa cách sử dụng hàm, xử lý ngoại lệ và


câu điều kiện trong Python để tính chu vi và diện tích của hình chữ
nhật.
Chương 3: Danh sách
21. Viết chương trình để tạo danh sách các số từ 1 đến 100.
22. Viết chương trình để thêm một phần tử vào cuối danh sách.
23. Viết chương trình để thêm một phần tử vào đầu danh sách.
24. Viết chương trình để xóa một phần tử khỏi danh sách.
25. Viết chương trình để sắp xếp danh sách theo thứ tự tăng dần.
26. Viết chương trình để sắp xếp danh sách theo thứ tự giảm dần.
27. Viết chương trình để tìm phần tử lớn nhất trong danh sách.
28. Viết chương trình để tìm phần tử nhỏ nhất trong danh sách.
29. Viết chương trình để tính tổng các phần tử trong danh sách.
30. Viết chương trình để đếm số lần xuất hiện của một phần tử trong
danh sách.
021 - Viết chương trình để tạo danh
sách các số từ 1 đến 100

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tạo danh sách các số
từ 1 đến 100.

Thuật toán giải quyết


Để tạo một danh sách các số từ 1 đến 100, ta có thể sử dụng vòng
lặp for hoặc sử dụng hàm tích hợp sẵn của Python như range() kết
hợp với list(). Hàm range(start, stop) trả về một dãy số bắt đầu
từ start và kết thúc trước stop.

Code Python
# Tạo danh sách các số từ 1 đến 100
numbers = list(range(1, 101))

# In danh sách ra màn hình


print(numbers)

Giải thích code


1. Hàm range(start, stop):

Hàm range(1, 101) tạo một đối tượng dãy số bắt đầu từ 1
và kết thúc trước 101, nghĩa là từ 1 đến 100.

2. Chuyển đổi đối tượng dãy số thành danh sách:


Sử dụng hàm list() để chuyển đối tượng dãy số thành
danh sách các số nguyên.

3. In danh sách ra màn hình:

Sử dụng hàm print() để in danh sách các số từ 1 đến 100


ra màn hình.

Tóm tắt
1. Hàm range(): Dùng để tạo một dãy số theo các bước nhất định.
2. Hàm list(): Dùng để chuyển đổi một đối tượng có thể lặp lại
(iterable) thành một danh sách.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách sử dụng hàm range và list trong
Python để tạo danh sách các số từ 1 đến 100.
022 - Viết chương trình để thêm một
phần tử vào cuối danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để thêm một phần tử vào
cuối danh sách. Trong Python, bạn có thể sử dụng phương thức
append() của đối tượng danh sách (list) để thêm một phần tử vào
cuối danh sách.

Thuật toán giải quyết


Để thêm một phần tử vào cuối danh sách:

1. Khởi tạo danh sách ban đầu.


2. Nhập phần tử muốn thêm từ người dùng.
3. Sử dụng phương thức append() để thêm phần tử vào cuối danh
sách.
4. In ra danh sách sau khi thêm phần tử.

Code Python
# Khởi tạo danh sách ban đầu
my_list = [1, 2, 3, 4, 5]

# Nhập phần tử muốn thêm từ người dùng


new_element = input("Nhập phần tử muốn thêm vào danh sách: ")

# Thêm phần tử vào cuối danh sách


my_list.append(new_element)

# In danh sách sau khi thêm phần tử


print("Danh sách sau khi thêm phần tử:", my_list)
Giải thích code
1. Khởi tạo danh sách:

Khởi tạo một danh sách ban đầu với một số phần tử (trong ví
dụ này là [1, 2, 3, 4, 5]).

2. Nhập phần tử muốn thêm:

Sử dụng hàm input() để nhận phần tử mới từ người dùng


dưới dạng một chuỗi.

3. Thêm phần tử vào cuối danh sách:

Sử dụng phương thức append() của đối tượng danh sách để


thêm phần tử mới vào cuối danh sách.

4. In danh sách sau khi thêm phần tử:

Sử dụng hàm print() để in danh sách sau khi thêm phần tử


mới.

Tóm tắt
1. Phương thức append(): Dùng để thêm một phần tử vào cuối
danh sách.
2. Hàm input(): Dùng để nhận dữ liệu từ người dùng.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.
4. Khởi tạo danh sách: Dùng để tạo một danh sách ban đầu với
các phần tử nhất định.

Chương trình trên minh họa cách sử dụng phương thức append() để
thêm một phần tử vào cuối danh sách trong Python.
023 - Viết chương trình để thêm một
phần tử vào đầu danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để thêm một phần tử vào
đầu danh sách. Trong Python, bạn có thể sử dụng phương thức
insert() của đối tượng danh sách (list) để chèn một phần tử vào vị
trí đầu tiên của danh sách.

Thuật toán giải quyết


Để thêm một phần tử vào đầu danh sách:

1. Khởi tạo danh sách ban đầu.


2. Nhập phần tử muốn thêm từ người dùng.
3. Sử dụng phương thức insert() để chèn phần tử vào đầu danh
sách.
4. In ra danh sách sau khi thêm phần tử.

Code Python
# Khởi tạo danh sách ban đầu
my_list = [1, 2, 3, 4, 5]

# Nhập phần tử muốn thêm từ người dùng


new_element = input("Nhập phần tử muốn thêm vào đầu danh
sách: ")

# Thêm phần tử vào đầu danh sách


my_list.insert(0, new_element)

# In danh sách sau khi thêm phần tử


print("Danh sách sau khi thêm phần tử:", my_list)
Giải thích code
1. Khởi tạo danh sách:

Khởi tạo một danh sách ban đầu với một số phần tử (trong ví
dụ này là [1, 2, 3, 4, 5]).

2. Nhập phần tử muốn thêm:

Sử dụng hàm input() để nhận phần tử mới từ người dùng


dưới dạng một chuỗi.

3. Thêm phần tử vào đầu danh sách:

Sử dụng phương thức insert() của đối tượng danh sách để


chèn phần tử mới vào vị trí đầu tiên của danh sách (chỉ mục
0).

4. In danh sách sau khi thêm phần tử:

Sử dụng hàm print() để in danh sách sau khi thêm phần tử


mới.

Tóm tắt
1. Phương thức insert(): Dùng để chèn một phần tử vào danh
sách tại một vị trí cụ thể. Cú pháp: list.insert(index,
element) với index là vị trí và element là phần tử muốn chèn.
2. Hàm input(): Dùng để nhận dữ liệu từ người dùng.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.
4. Khởi tạo danh sách: Dùng để tạo một danh sách ban đầu với
các phần tử nhất định.

Chương trình trên minh họa cách sử dụng phương thức insert() để
chèn một phần tử vào đầu danh sách trong Python.
024 - Viết chương trình để xóa một
phần tử khỏi danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để xóa một phần tử khỏi
danh sách. Trong Python, bạn có thể sử dụng phương thức
remove() của đối tượng danh sách (list) để xóa một phần tử cụ thể.

Thuật toán giải quyết


Để xóa một phần tử khỏi danh sách:

1. Khởi tạo danh sách ban đầu.


2. Nhập phần tử muốn xóa từ người dùng.
3. Sử dụng phương thức remove() để xóa phần tử khỏi danh sách.
4. Kiểm tra nếu phần tử không tồn tại trong danh sách thì in ra
thông báo lỗi.
5. In ra danh sách sau khi xóa phần tử.

Code Python
# Khởi tạo danh sách ban đầu
my_list = [1, 2, 3, 4, 5]

# Nhập phần tử muốn xóa từ người dùng


element_to_remove = input("Nhập phần tử muốn xóa khỏi danh
sách: ")

# Chuyển đổi phần tử nhập vào từ người dùng thành kiểu dữ


liệu tương ứng
try:
# Cố gắng chuyển đổi phần tử nhập vào thành số nguyên
element_to_remove = int(element_to_remove)
except ValueError:
try:
# Nếu không phải số nguyên, cố gắng chuyển đổi thành
số thực
element_to_remove = float(element_to_remove)
except ValueError:
# Nếu không phải số thực, giữ nguyên dưới dạng chuỗi
pass

# Xóa phần tử khỏi danh sách nếu tồn tại


if element_to_remove in my_list:
my_list.remove(element_to_remove)
print("Danh sách sau khi xóa phần tử:", my_list)
else:
print("Phần tử không tồn tại trong danh sách.")

Giải thích code


1. Khởi tạo danh sách:

Khởi tạo một danh sách ban đầu với một số phần tử (trong ví
dụ này là [1, 2, 3, 4, 5]).

2. Nhập phần tử muốn xóa:

Sử dụng hàm input() để nhận phần tử cần xóa từ người


dùng dưới dạng một chuỗi.

3. Chuyển đổi kiểu dữ liệu của phần tử nhập vào:

Sử dụng try-except để thử chuyển đổi phần tử nhập vào


thành số nguyên (int) và số thực (float). Nếu không thể
chuyển đổi được, giữ nguyên phần tử dưới dạng chuỗi.

4. Kiểm tra và xóa phần tử:

Sử dụng câu điều kiện if để kiểm tra xem phần tử có tồn tại
trong danh sách không.
Nếu tồn tại, sử dụng phương thức remove() của đối tượng
danh sách để xóa phần tử đó.
Nếu không tồn tại, in ra thông báo lỗi.

5. In danh sách sau khi xóa phần tử:

Sử dụng hàm print() để in danh sách sau khi xóa phần tử.

Tóm tắt
1. Phương thức remove(): Dùng để xóa phần tử đầu tiên có giá trị
được chỉ định ra khỏi danh sách.
2. Hàm input(): Dùng để nhận dữ liệu từ người dùng.
3. Hàm int() và float(): Dùng để chuyển đổi chuỗi thành số
nguyên và số thực.
4. Xử lý ngoại lệ try-except: Dùng để bắt lỗi có thể xảy ra khi
chuyển đổi dữ liệu.
5. Câu điều kiện if-else: Dùng để kiểm tra điều kiện và thực hiện
các hành động dựa trên điều kiện đó.
6. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách sử dụng phương thức remove() để
xóa một phần tử khỏi danh sách trong Python, cùng với xử lý ngoại
lệ và kiểm tra điều kiện.
025 - Viết chương trình để sắp xếp
danh sách theo thứ tự tăng dần

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để sắp xếp một danh
sách theo thứ tự tăng dần. Trong Python, bạn có thể sử dụng
phương thức sort() của đối tượng danh sách (list) để sắp xếp danh
sách theo thứ tự tăng dần.

Thuật toán giải quyết


Để sắp xếp một danh sách theo thứ tự tăng dần:

1. Khởi tạo danh sách ban đầu.


2. Sử dụng phương thức sort() để sắp xếp danh sách theo thứ tự
tăng dần.
3. In ra danh sách sau khi sắp xếp.

Code Python
# Khởi tạo danh sách ban đầu
my_list = [34, 1, 23, 4, 3, 12, 45, 33, 6, 22]

# In danh sách ban đầu


print("Danh sách ban đầu:", my_list)

# Sắp xếp danh sách theo thứ tự tăng dần


my_list.sort()

# In danh sách sau khi sắp xếp


print("Danh sách sau khi sắp xếp tăng dần:", my_list)
Giải thích code
1. Khởi tạo danh sách:

Khởi tạo một danh sách ban đầu với một số phần tử (trong ví
dụ này là [34, 1, 23, 4, 3, 12, 45, 33, 6, 22]).

2. In danh sách ban đầu:

Sử dụng hàm print() để in danh sách ban đầu ra màn hình.

3. Sắp xếp danh sách:

Sử dụng phương thức sort() của đối tượng danh sách để


sắp xếp các phần tử của danh sách theo thứ tự tăng dần.

4. In danh sách sau khi sắp xếp:

Sử dụng hàm print() để in danh sách sau khi đã được sắp


xếp.

Tóm tắt
1. Phương thức sort(): Dùng để sắp xếp các phần tử của danh
sách theo thứ tự tăng dần. Phương thức này thay đổi danh sách
gốc và không trả về giá trị nào.
2. Hàm print(): Dùng để in dữ liệu ra màn hình.
3. Khởi tạo danh sách: Dùng để tạo một danh sách ban đầu với
các phần tử nhất định.

Chương trình trên minh họa cách sử dụng phương thức sort() để
sắp xếp danh sách theo thứ tự tăng dần trong Python.
026 - Viết chương trình để sắp xếp
danh sách theo thứ tự giảm dần

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để sắp xếp một danh
sách theo thứ tự giảm dần và trước đó xáo trộn ngẫu nhiên danh
sách. Trong Python, bạn có thể sử dụng phương thức
sort(reverse=True) của đối tượng danh sách (list) để sắp xếp danh
sách theo thứ tự giảm dần và sử dụng hàm shuffle() từ module
random để xáo trộn danh sách.

Thuật toán giải quyết


Để xáo trộn và sắp xếp một danh sách theo thứ tự giảm dần:

1. Khởi tạo danh sách ban đầu.


2. Xáo trộn ngẫu nhiên danh sách bằng hàm shuffle().
3. Sử dụng phương thức sort(reverse=True) để sắp xếp danh
sách theo thứ tự giảm dần.
4. In ra danh sách sau khi xáo trộn và sắp xếp.

Code Python
import random

# Khởi tạo danh sách ban đầu


my_list = [34, 1, 23, 4, 3, 12, 45, 33, 6, 22]

# In danh sách ban đầu


print("Danh sách ban đầu:", my_list)

# Xáo trộn ngẫu nhiên danh sách


random.shuffle(my_list)
print("Danh sách sau khi xáo trộn:", my_list)

# Sắp xếp danh sách theo thứ tự giảm dần


my_list.sort(reverse=True)

# In danh sách sau khi sắp xếp


print("Danh sách sau khi sắp xếp giảm dần:", my_list)

Giải thích code


1. Khởi tạo danh sách:

Khởi tạo một danh sách ban đầu với một số phần tử (trong ví
dụ này là [34, 1, 23, 4, 3, 12, 45, 33, 6, 22]).

2. In danh sách ban đầu:

Sử dụng hàm print() để in danh sách ban đầu ra màn hình.

3. Xáo trộn ngẫu nhiên danh sách:

Sử dụng hàm shuffle() từ module random để xáo trộn các


phần tử của danh sách một cách ngẫu nhiên.
In danh sách sau khi xáo trộn để kiểm tra kết quả.

4. Sắp xếp danh sách theo thứ tự giảm dần:

Sử dụng phương thức sort(reverse=True) của đối tượng


danh sách để sắp xếp các phần tử của danh sách theo thứ
tự giảm dần.
In danh sách sau khi sắp xếp để kiểm tra kết quả.
Tóm tắt
1. Module random: Cung cấp các hàm để tạo ra các số ngẫu nhiên
và xáo trộn danh sách.
2. Hàm random.shuffle(): Dùng để xáo trộn các phần tử của danh
sách một cách ngẫu nhiên.
3. Phương thức sort(reverse=True): Dùng để sắp xếp các phần
tử của danh sách theo thứ tự giảm dần.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.
5. Khởi tạo danh sách: Dùng để tạo một danh sách ban đầu với
các phần tử nhất định.

Chương trình trên minh họa cách sử dụng hàm shuffle() để xáo
trộn danh sách và phương thức sort(reverse=True) để sắp xếp
danh sách theo thứ tự giảm dần trong Python.
027 - Viết chương trình để tìm phần tử
lớn nhất trong danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm phần tử lớn nhất
trong danh sách. Trong Python, bạn có thể sử dụng hàm tích hợp
max() để tìm phần tử lớn nhất trong danh sách.

Thuật toán giải quyết


Để tìm phần tử lớn nhất trong danh sách:

1. Khởi tạo danh sách ban đầu.


2. Sử dụng hàm max() để tìm phần tử lớn nhất trong danh sách.
3. In ra phần tử lớn nhất.

Code Python
# Khởi tạo danh sách ban đầu
my_list = [34, 1, 23, 4, 3, 12, 45, 33, 6, 22]

# Tìm phần tử lớn nhất trong danh sách


max_element = max(my_list)

# In ra phần tử lớn nhất


print("Phần tử lớn nhất trong danh sách là:", max_element)

Giải thích code


1. Khởi tạo danh sách:
Khởi tạo một danh sách ban đầu với một số phần tử (trong ví
dụ này là [34, 1, 23, 4, 3, 12, 45, 33, 6, 22]).

2. Tìm phần tử lớn nhất:

Sử dụng hàm max() để tìm phần tử lớn nhất trong danh


sách. Hàm này trả về giá trị lớn nhất trong danh sách.

3. In phần tử lớn nhất:

Sử dụng hàm print() để in ra phần tử lớn nhất trong danh


sách.

Tóm tắt
1. Hàm max(): Dùng để tìm và trả về phần tử có giá trị lớn nhất
trong một danh sách hoặc iterable.
2. Hàm print(): Dùng để in dữ liệu ra màn hình.
3. Khởi tạo danh sách: Dùng để tạo một danh sách ban đầu với
các phần tử nhất định.

Chương trình trên minh họa cách sử dụng hàm max() để tìm phần tử
lớn nhất trong danh sách trong Python.
028 - Viết chương trình để tìm phần tử
nhỏ nhất trong danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm phần tử nhỏ nhất
trong danh sách. Trong Python, bạn có thể sử dụng hàm tích hợp
min() để tìm phần tử nhỏ nhất trong danh sách.

Thuật toán giải quyết


Để tìm phần tử nhỏ nhất trong danh sách:

1. Khởi tạo danh sách ban đầu.


2. Sử dụng hàm min() để tìm phần tử nhỏ nhất trong danh sách.
3. In ra phần tử nhỏ nhất.

Code Python
# Khởi tạo danh sách ban đầu
my_list = [34, 1, 23, 4, 3, 12, 45, 33, 6, 22]

# Tìm phần tử nhỏ nhất trong danh sách


min_element = min(my_list)

# In ra phần tử nhỏ nhất


print("Phần tử nhỏ nhất trong danh sách là:", min_element)

Giải thích code


1. Khởi tạo danh sách:
Khởi tạo một danh sách ban đầu với một số phần tử (trong ví
dụ này là [34, 1, 23, 4, 3, 12, 45, 33, 6, 22]).

2. Tìm phần tử nhỏ nhất:

Sử dụng hàm min() để tìm phần tử nhỏ nhất trong danh


sách. Hàm này trả về giá trị nhỏ nhất trong danh sách.

3. In phần tử nhỏ nhất:

Sử dụng hàm print() để in ra phần tử nhỏ nhất trong danh


sách.

Tóm tắt
1. Hàm min(): Dùng để tìm và trả về phần tử có giá trị nhỏ nhất
trong một danh sách hoặc iterable.
2. Hàm print(): Dùng để in dữ liệu ra màn hình.
3. Khởi tạo danh sách: Dùng để tạo một danh sách ban đầu với
các phần tử nhất định.

Chương trình trên minh họa cách sử dụng hàm min() để tìm phần tử
nhỏ nhất trong danh sách trong Python.
029 - Viết chương trình để tính tổng
các phần tử trong danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tính tổng các phần tử
trong danh sách. Trong Python, bạn có thể sử dụng hàm tích hợp
sum() để tính tổng các phần tử của danh sách. Chương trình cũng
yêu cầu khởi tạo danh sách với các phần tử có giá trị ngẫu nhiên.

Thuật toán giải quyết


Để tính tổng các phần tử trong danh sách có giá trị ngẫu nhiên:

1. Khởi tạo danh sách với các phần tử ngẫu nhiên.


2. Sử dụng hàm sum() để tính tổng các phần tử trong danh sách.
3. In ra tổng các phần tử.

Code Python
import random

# Khởi tạo danh sách với các phần tử ngẫu nhiên


# Giả sử danh sách có 10 phần tử với giá trị từ 1 đến 100
my_list = [random.randint(1, 100) for _ in range(10)]

# In danh sách ban đầu


print("Danh sách ban đầu:", my_list)

# Tính tổng các phần tử trong danh sách


total_sum = sum(my_list)

# In ra tổng các phần tử


print("Tổng các phần tử trong danh sách là:", total_sum)
Giải thích code
1. Khởi tạo danh sách với các phần tử ngẫu nhiên:

Sử dụng list comprehension và hàm random.randint(1,


100) để tạo danh sách với 10 phần tử có giá trị ngẫu nhiên
từ 1 đến 100.

2. In danh sách ban đầu:

Sử dụng hàm print() để in danh sách ban đầu ra màn hình.

3. Tính tổng các phần tử:

Sử dụng hàm sum() để tính tổng các phần tử trong danh


sách.

4. In tổng các phần tử:

Sử dụng hàm print() để in ra tổng các phần tử trong danh


sách.

Tóm tắt
1. Module random: Cung cấp các hàm để tạo ra các số ngẫu nhiên.
2. Hàm random.randint(a, b): Dùng để trả về một số nguyên
ngẫu nhiên trong khoảng từ a đến b (bao gồm cả a và b).
3. List Comprehension: Dùng để tạo danh sách mới từ một
iterable. Trong ví dụ này, [random.randint(1, 100) for _ in
range(10)] tạo một danh sách gồm 10 phần tử ngẫu nhiên.
4. Hàm sum(): Dùng để tính tổng các phần tử trong một danh sách
hoặc iterable.
5. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách sử dụng hàm random.randint()


để tạo danh sách các phần tử ngẫu nhiên và hàm sum() để tính tổng
các phần tử trong danh sách trong Python.
030 - Viết chương trình để đếm số lần
xuất hiện của một phần tử trong danh
sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số lần xuất hiện
của một phần tử trong danh sách. Trong Python, bạn có thể sử dụng
phương thức count() của đối tượng danh sách (list) để đếm số lần
xuất hiện của một phần tử cụ thể.

Thuật toán giải quyết


Để đếm số lần xuất hiện của một phần tử trong danh sách:

1. Khởi tạo danh sách ban đầu.


2. Nhập phần tử muốn đếm từ người dùng.
3. Sử dụng phương thức count() để đếm số lần xuất hiện của
phần tử trong danh sách.
4. In ra số lần xuất hiện của phần tử.

Code Python
# Khởi tạo danh sách ban đầu
my_list = [1, 3, 7, 8, 7, 5, 6, 7, 2, 7, 10]

# In danh sách ban đầu


print("Danh sách ban đầu:", my_list)

# Nhập phần tử muốn đếm số lần xuất hiện từ người dùng


element_to_count = input("Nhập phần tử muốn đếm số lần xuất
hiện: ")
# Chuyển đổi phần tử nhập vào từ người dùng thành kiểu dữ
liệu tương ứng
try:
# Cố gắng chuyển đổi phần tử nhập vào thành số nguyên
element_to_count = int(element_to_count)
except ValueError:
try:
# Nếu không phải số nguyên, cố gắng chuyển đổi thành
số thực
element_to_count = float(element_to_count)
except ValueError:
# Nếu không phải số thực, giữ nguyên dưới dạng chuỗi
pass

# Đếm số lần xuất hiện của phần tử trong danh sách


count = my_list.count(element_to_count)

# In ra số lần xuất hiện của phần tử


print(f"Phần tử {element_to_count} xuất hiện {count} lần
trong danh sách.")

Giải thích code


1. Khởi tạo danh sách:

Khởi tạo một danh sách ban đầu với một số phần tử (trong ví
dụ này là [1, 3, 7, 8, 7, 5, 6, 7, 2, 7, 10]).

2. In danh sách ban đầu:

Sử dụng hàm print() để in danh sách ban đầu ra màn hình.

3. Nhập phần tử muốn đếm:

Sử dụng hàm input() để nhận phần tử cần đếm từ người


dùng dưới dạng một chuỗi.

4. Chuyển đổi kiểu dữ liệu của phần tử nhập vào:


Sử dụng try-except để thử chuyển đổi phần tử nhập vào
thành số nguyên (int) và số thực (float). Nếu không thể
chuyển đổi được, giữ nguyên phần tử dưới dạng chuỗi.

5. Đếm số lần xuất hiện của phần tử:

Sử dụng phương thức count() của đối tượng danh sách để


đếm số lần xuất hiện của phần tử trong danh sách.

6. In số lần xuất hiện của phần tử:

Sử dụng hàm print() để in ra số lần xuất hiện của phần tử


trong danh sách.

Tóm tắt
1. Phương thức count(): Dùng để đếm số lần xuất hiện của một
phần tử cụ thể trong danh sách.
2. Hàm input(): Dùng để nhận dữ liệu từ người dùng.
3. Hàm int() và float(): Dùng để chuyển đổi chuỗi thành số
nguyên và số thực.
4. Xử lý ngoại lệ try-except: Dùng để bắt lỗi có thể xảy ra khi
chuyển đổi dữ liệu.
5. Hàm print(): Dùng để in dữ liệu ra màn hình.
6. Khởi tạo danh sách: Dùng để tạo một danh sách ban đầu với
các phần tử nhất định.

Chương trình trên minh họa cách sử dụng phương thức count() để
đếm số lần xuất hiện của một phần tử trong danh sách trong Python.
Chương 4: Tuple
31. Viết chương trình để tạo một tuple.
32. Viết chương trình để truy cập một phần tử trong tuple.
33. Viết chương trình để nối hai tuple.
34. Viết chương trình để lấy độ dài của một tuple.
35. Viết chương trình để chuyển đổi một tuple thành danh sách.
36. Viết chương trình để chuyển đổi một danh sách thành tuple.
37. Viết chương trình để kiểm tra một phần tử có tồn tại trong tuple
không.
38. Viết chương trình để đếm số lần xuất hiện của một phần tử trong
tuple.
39. Viết chương trình để tìm phần tử lớn nhất trong tuple.
40. Viết chương trình để tìm phần tử nhỏ nhất trong tuple.
031 - Viết chương trình để tạo một
tuple

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tạo một tuple trong
Python. Tuple là một kiểu dữ liệu tương tự như danh sách (list),
nhưng khác ở chỗ tuple là bất biến (immutable), nghĩa là các phần
tử trong tuple không thể thay đổi sau khi đã được tạo.

Thuật toán giải quyết


Để tạo một tuple trong Python:

1. Khởi tạo một tuple với các phần tử mong muốn.


2. In ra tuple đã tạo.

Code Python
# Khởi tạo một tuple
my_tuple = (1, 2, 3, 4, 5)

# In tuple đã tạo
print("Tuple đã tạo:", my_tuple)

Giải thích code


1. Khởi tạo tuple:

Khởi tạo một tuple với các phần tử mong muốn bằng cách
đặt các phần tử bên trong dấu ngoặc tròn (). Trong ví dụ
này, tuple được khởi tạo với các phần tử [1, 2, 3, 4, 5].
2. In tuple đã tạo:

Sử dụng hàm print() để in tuple ra màn hình.

Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo và in một tuple trong
Python. Tuple có thể chứa các loại dữ liệu khác nhau và một khi đã
được khởi tạo, các phần tử của nó không thể thay đổi.
032 - Viết chương trình để truy cập
một phần tử trong tuple

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để truy cập một phần tử
trong tuple. Tuple là một kiểu dữ liệu tương tự như danh sách (list),
nhưng khác ở chỗ tuple là bất biến (immutable). Để truy cập một
phần tử trong tuple, bạn có thể sử dụng chỉ số (index) của phần tử
đó.

Thuật toán giải quyết


Để truy cập một phần tử trong tuple:

1. Khởi tạo một tuple với các phần tử mong muốn.


2. Sử dụng chỉ số để truy cập phần tử cụ thể trong tuple.
3. In ra phần tử đã truy cập.

Code Python
# Khởi tạo một tuple
my_tuple = (10, 20, 30, 40, 50)

# Truy cập phần tử ở vị trí thứ 2 (chỉ số bắt đầu từ 0)


element = my_tuple[2]

# In ra phần tử đã truy cập


print("Phần tử ở vị trí thứ 2 trong tuple là:", element)

Giải thích code


1. Khởi tạo tuple:
Khởi tạo một tuple với các phần tử mong muốn bằng cách
đặt các phần tử bên trong dấu ngoặc tròn (). Trong ví dụ
này, tuple được khởi tạo với các phần tử (10, 20, 30, 40,
50).

2. Truy cập phần tử trong tuple:

Sử dụng chỉ số (index) để truy cập phần tử cụ thể trong


tuple. Chỉ số bắt đầu từ 0, vì vậy my_tuple[2] sẽ truy cập
phần tử ở vị trí thứ 2 (phần tử thứ 3 trong tuple).

3. In phần tử đã truy cập:

Sử dụng hàm print() để in phần tử đã truy cập ra màn hình.

Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Chỉ số (index): Dùng để truy cập các phần tử cụ thể trong tuple.
Chỉ số bắt đầu từ 0.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một tuple, truy cập một
phần tử cụ thể trong tuple bằng chỉ số và in ra phần tử đã truy cập
trong Python.
033 - Viết chương trình để nối hai
tuple

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để nối hai tuple trong
Python. Tuple là một kiểu dữ liệu bất biến (immutable), nhưng bạn
có thể nối hai tuple lại với nhau để tạo ra một tuple mới.

Thuật toán giải quyết


Để nối hai tuple:

1. Khởi tạo hai tuple với các phần tử mong muốn.


2. Sử dụng toán tử + để nối hai tuple lại với nhau.
3. In ra tuple kết quả sau khi nối.

Code Python
# Khởi tạo hai tuple
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)

# Nối hai tuple lại với nhau


combined_tuple = tuple1 + tuple2

# In ra tuple kết quả


print("Tuple sau khi nối:", combined_tuple)

Giải thích code


1. Khởi tạo hai tuple:
Khởi tạo hai tuple với các phần tử mong muốn. Trong ví dụ
này, tuple1 được khởi tạo với các phần tử (1, 2, 3) và
tuple2 được khởi tạo với các phần tử (4, 5, 6).

2. Nối hai tuple:

Sử dụng toán tử + để nối hai tuple lại với nhau. Toán tử + sẽ


tạo ra một tuple mới chứa tất cả các phần tử của tuple1 và
tuple2.

3. In tuple kết quả:

Sử dụng hàm print() để in tuple kết quả ra màn hình.

Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Toán tử +: Dùng để nối hai tuple lại với nhau. Kết quả là một
tuple mới chứa tất cả các phần tử của hai tuple ban đầu.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo hai tuple, nối hai tuple lại
với nhau bằng toán tử + và in ra tuple kết quả trong Python.
034 - Viết chương trình để lấy độ dài
của một tuple

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy độ dài của một
tuple trong Python. Độ dài của tuple là số lượng phần tử trong tuple.
Bạn có thể sử dụng hàm tích hợp len() để lấy độ dài của tuple.

Thuật toán giải quyết


Để lấy độ dài của một tuple:

1. Khởi tạo một tuple với các phần tử mong muốn.


2. Sử dụng hàm len() để lấy độ dài của tuple.
3. In ra độ dài của tuple.

Code Python
# Khởi tạo một tuple
my_tuple = (10, 20, 30, 40, 50)

# Lấy độ dài của tuple


tuple_length = len(my_tuple)

# In ra độ dài của tuple


print("Độ dài của tuple là:", tuple_length)

Giải thích code


1. Khởi tạo tuple:
Khởi tạo một tuple với các phần tử mong muốn bằng cách
đặt các phần tử bên trong dấu ngoặc tròn (). Trong ví dụ
này, tuple được khởi tạo với các phần tử (10, 20, 30, 40,
50).

2. Lấy độ dài của tuple:

Sử dụng hàm len() để lấy độ dài của tuple. Hàm này trả về
số lượng phần tử trong tuple.

3. In độ dài của tuple:

Sử dụng hàm print() để in độ dài của tuple ra màn hình.

Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Hàm len(): Dùng để lấy độ dài của một đối tượng có thể đếm
được, chẳng hạn như danh sách, chuỗi hoặc tuple. Hàm này trả
về số lượng phần tử trong đối tượng đó.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một tuple, lấy độ dài của
tuple bằng hàm len() và in ra độ dài của tuple trong Python.
035 - Viết chương trình để chuyển đổi
một tuple thành danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để chuyển đổi một tuple
thành danh sách trong Python. Tuple là một kiểu dữ liệu bất biến
(immutable), trong khi danh sách (list) là một kiểu dữ liệu có thể thay
đổi (mutable). Bạn có thể sử dụng hàm tích hợp list() để chuyển
đổi một tuple thành danh sách.

Thuật toán giải quyết


Để chuyển đổi một tuple thành danh sách:

1. Khởi tạo một tuple với các phần tử mong muốn.


2. Sử dụng hàm list() để chuyển đổi tuple thành danh sách.
3. In ra danh sách đã chuyển đổi.

Code Python
# Khởi tạo một tuple
my_tuple = (10, 20, 30, 40, 50)

# Chuyển đổi tuple thành danh sách


my_list = list(my_tuple)

# In ra danh sách đã chuyển đổi


print("Danh sách sau khi chuyển đổi từ tuple:", my_list)

Giải thích code


1. Khởi tạo tuple:
Khởi tạo một tuple với các phần tử mong muốn bằng cách
đặt các phần tử bên trong dấu ngoặc tròn (). Trong ví dụ
này, tuple được khởi tạo với các phần tử (10, 20, 30, 40,
50).

2. Chuyển đổi tuple thành danh sách:

Sử dụng hàm list() để chuyển đổi tuple thành danh sách.


Hàm này tạo ra một danh sách mới với các phần tử từ tuple.

3. In danh sách đã chuyển đổi:

Sử dụng hàm print() để in danh sách đã chuyển đổi ra màn


hình.

Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Danh sách (list): Một kiểu dữ liệu có thể thay đổi trong Python,
được sử dụng để lưu trữ một tập hợp các phần tử có thứ tự. Một
danh sách được tạo ra bằng cách đặt các phần tử bên trong dấu
ngoặc vuông [].
3. Hàm list(): Dùng để tạo một danh sách từ một iterable, chẳng
hạn như một tuple. Hàm này tạo ra một danh sách mới với các
phần tử từ iterable.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một tuple, chuyển đổi
tuple thành danh sách bằng hàm list() và in ra danh sách đã
chuyển đổi trong Python.
036 - Viết chương trình để chuyển đổi
một danh sách thành tuple

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để chuyển đổi một danh
sách (list) thành tuple trong Python. Danh sách là một kiểu dữ liệu
có thể thay đổi (mutable), trong khi tuple là một kiểu dữ liệu bất biến
(immutable). Bạn có thể sử dụng hàm tích hợp tuple() để chuyển
đổi một danh sách thành tuple.

Thuật toán giải quyết


Để chuyển đổi một danh sách thành tuple:

1. Khởi tạo một danh sách với các phần tử mong muốn.
2. Sử dụng hàm tuple() để chuyển đổi danh sách thành tuple.
3. In ra tuple đã chuyển đổi.

Code Python
# Khởi tạo một danh sách
my_list = [10, 20, 30, 40, 50]

# Chuyển đổi danh sách thành tuple


my_tuple = tuple(my_list)

# In ra tuple đã chuyển đổi


print("Tuple sau khi chuyển đổi từ danh sách:", my_tuple)

Giải thích code


1. Khởi tạo danh sách:
Khởi tạo một danh sách với các phần tử mong muốn bằng
cách đặt các phần tử bên trong dấu ngoặc vuông []. Trong
ví dụ này, danh sách được khởi tạo với các phần tử [10,
20, 30, 40, 50].

2. Chuyển đổi danh sách thành tuple:

Sử dụng hàm tuple() để chuyển đổi danh sách thành tuple.


Hàm này tạo ra một tuple mới với các phần tử từ danh sách.

3. In tuple đã chuyển đổi:

Sử dụng hàm print() để in tuple đã chuyển đổi ra màn hình.

Tóm tắt
1. Danh sách (list): Một kiểu dữ liệu có thể thay đổi trong Python,
được sử dụng để lưu trữ một tập hợp các phần tử có thứ tự. Một
danh sách được tạo ra bằng cách đặt các phần tử bên trong dấu
ngoặc vuông [].
2. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
3. Hàm tuple(): Dùng để tạo một tuple từ một iterable, chẳng hạn
như một danh sách. Hàm này tạo ra một tuple mới với các phần
tử từ iterable.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một danh sách, chuyển
đổi danh sách thành tuple bằng hàm tuple() và in ra tuple đã
chuyển đổi trong Python.
037 - Viết chương trình để kiểm tra
một phần tử có tồn tại trong tuple
không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một phần
tử có tồn tại trong tuple hay không. Trong Python, bạn có thể sử
dụng toán tử in để kiểm tra xem một phần tử có tồn tại trong một
tuple.

Thuật toán giải quyết


Để kiểm tra một phần tử có tồn tại trong tuple hay không:

1. Khởi tạo một tuple với các phần tử mong muốn.


2. Nhập phần tử cần kiểm tra từ người dùng.
3. Sử dụng toán tử in để kiểm tra xem phần tử có tồn tại trong
tuple không.
4. In ra kết quả kiểm tra.

Code Python
# Khởi tạo một tuple
my_tuple = (10, 20, 30, 40, 50)

# In tuple đã tạo
print("Tuple đã tạo:", my_tuple)

# Nhập phần tử cần kiểm tra từ người dùng


element = input("Nhập phần tử cần kiểm tra: ")

# Chuyển đổi phần tử nhập vào từ người dùng thành kiểu dữ


liệu tương ứng
try:
# Cố gắng chuyển đổi phần tử nhập vào thành số nguyên
element = int(element)
except ValueError:
try:
# Nếu không phải số nguyên, cố gắng chuyển đổi thành
số thực
element = float(element)
except ValueError:
# Nếu không phải số thực, giữ nguyên dưới dạng chuỗi
pass

# Kiểm tra xem phần tử có tồn tại trong tuple không


if element in my_tuple:
print(f"Phần tử {element} tồn tại trong tuple.")
else:
print(f"Phần tử {element} không tồn tại trong tuple.")

Giải thích code


1. Khởi tạo tuple:

Khởi tạo một tuple với các phần tử mong muốn bằng cách
đặt các phần tử bên trong dấu ngoặc tròn (). Trong ví dụ
này, tuple được khởi tạo với các phần tử (10, 20, 30, 40,
50).

2. In tuple đã tạo:

Sử dụng hàm print() để in tuple ra màn hình.

3. Nhập phần tử cần kiểm tra từ người dùng:

Sử dụng hàm input() để nhận phần tử cần kiểm tra từ


người dùng dưới dạng một chuỗi.

4. Chuyển đổi kiểu dữ liệu của phần tử nhập vào:


Sử dụng try-except để thử chuyển đổi phần tử nhập vào
thành số nguyên (int) và số thực (float). Nếu không thể
chuyển đổi được, giữ nguyên phần tử dưới dạng chuỗi.

5. Kiểm tra phần tử trong tuple:

Sử dụng toán tử in để kiểm tra xem phần tử có tồn tại trong


tuple không.

6. In kết quả kiểm tra:

Sử dụng hàm print() để in ra kết quả kiểm tra xem phần tử


có tồn tại trong tuple không.

Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Toán tử in: Dùng để kiểm tra xem một phần tử có tồn tại trong
một iterable (như tuple hoặc list) hay không. Nếu phần tử tồn tại,
kết quả trả về là True; ngược lại, kết quả là False.
3. Hàm input(): Dùng để nhận dữ liệu từ người dùng dưới dạng
chuỗi.
4. Hàm int() và float(): Dùng để chuyển đổi chuỗi thành số
nguyên và số thực.
5. Xử lý ngoại lệ try-except: Dùng để bắt lỗi có thể xảy ra khi
chuyển đổi dữ liệu.
6. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một tuple, nhập phần tử
từ người dùng, kiểm tra xem phần tử có tồn tại trong tuple bằng toán
tử in, và in ra kết quả kiểm tra trong Python.
038 - Viết chương trình để đếm số lần
xuất hiện của một phần tử trong tuple

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số lần xuất hiện
của một phần tử trong một tuple trong Python. Bạn có thể sử dụng
phương thức count() của tuple để thực hiện việc này.

Thuật toán giải quyết


Để đếm số lần xuất hiện của một phần tử trong tuple:

1. Khởi tạo một tuple với các phần tử mong muốn.


2. Nhập phần tử cần đếm số lần xuất hiện từ người dùng.
3. Sử dụng phương thức count() để đếm số lần xuất hiện của
phần tử trong tuple.
4. In ra kết quả đếm được.

Code Python
# Khởi tạo một tuple
my_tuple = (10, 20, 30, 20, 40, 50, 20, 60)

# In tuple đã tạo
print("Tuple đã tạo:", my_tuple)

# Nhập phần tử cần đếm số lần xuất hiện từ người dùng


element = input("Nhập phần tử cần đếm số lần xuất hiện: ")

# Chuyển đổi phần tử nhập vào từ người dùng thành kiểu dữ


liệu tương ứng
try:
# Cố gắng chuyển đổi phần tử nhập vào thành số nguyên
element = int(element)
except ValueError:
try:
# Nếu không phải số nguyên, cố gắng chuyển đổi thành
số thực
element = float(element)
except ValueError:
# Nếu không phải số thực, giữ nguyên dưới dạng chuỗi
pass

# Đếm số lần xuất hiện của phần tử trong tuple


count = my_tuple.count(element)

# In ra số lần xuất hiện của phần tử


print(f"Phần tử {element} xuất hiện {count} lần trong
tuple.")

Giải thích code


1. Khởi tạo tuple:

Khởi tạo một tuple với các phần tử mong muốn bằng cách
đặt các phần tử bên trong dấu ngoặc tròn (). Trong ví dụ
này, tuple được khởi tạo với các phần tử (10, 20, 30, 20,
40, 50, 20, 60).

2. In tuple đã tạo:

Sử dụng hàm print() để in tuple ra màn hình.

3. Nhập phần tử cần đếm số lần xuất hiện từ người dùng:

Sử dụng hàm input() để nhận phần tử cần đếm từ người


dùng dưới dạng một chuỗi.

4. Chuyển đổi kiểu dữ liệu của phần tử nhập vào:


Sử dụng try-except để thử chuyển đổi phần tử nhập vào
thành số nguyên (int) và số thực (float). Nếu không thể
chuyển đổi được, giữ nguyên phần tử dưới dạng chuỗi.

5. Đếm số lần xuất hiện của phần tử trong tuple:

Sử dụng phương thức count() của tuple để đếm số lần xuất


hiện của phần tử trong tuple.

6. In số lần xuất hiện của phần tử:

Sử dụng hàm print() để in ra số lần xuất hiện của phần tử


trong tuple.

Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Phương thức count(): Dùng để đếm số lần xuất hiện của một
phần tử trong một iterable (như tuple hoặc list). Kết quả trả về là
số lần xuất hiện của phần tử trong iterable.
3. Hàm input(): Dùng để nhận dữ liệu từ người dùng dưới dạng
chuỗi.
4. Hàm int() và float(): Dùng để chuyển đổi chuỗi thành số
nguyên và số thực.
5. Xử lý ngoại lệ try-except: Dùng để bắt lỗi có thể xảy ra khi
chuyển đổi dữ liệu.
6. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một tuple, nhập phần tử
từ người dùng, đếm số lần xuất hiện của phần tử trong tuple bằng
phương thức count(), và in ra kết quả đếm được trong Python.
039 - Viết chương trình để tìm phần tử
lớn nhất trong tuple

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm phần tử lớn nhất
trong một tuple trong Python. Bạn có thể sử dụng hàm tích hợp
max() để tìm phần tử lớn nhất trong một tuple.

Thuật toán giải quyết


Để tìm phần tử lớn nhất trong một tuple:

1. Khởi tạo một tuple với các phần tử mong muốn.


2. Sử dụng hàm max() để tìm phần tử lớn nhất trong tuple.
3. In ra phần tử lớn nhất.

Code Python
# Khởi tạo một tuple
my_tuple = (10, 20, 30, 40, 50)

# Tìm phần tử lớn nhất trong tuple


max_element = max(my_tuple)

# In ra phần tử lớn nhất


print("Phần tử lớn nhất trong tuple là:", max_element)

Giải thích code


1. Khởi tạo tuple:
Khởi tạo một tuple với các phần tử mong muốn bằng cách
đặt các phần tử bên trong dấu ngoặc tròn (). Trong ví dụ
này, tuple được khởi tạo với các phần tử (10, 20, 30, 40,
50).

2. Tìm phần tử lớn nhất trong tuple:

Sử dụng hàm max() để tìm phần tử lớn nhất trong tuple.


Hàm này trả về phần tử có giá trị lớn nhất trong tuple.

3. In phần tử lớn nhất:

Sử dụng hàm print() để in phần tử lớn nhất ra màn hình.

Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Hàm max(): Dùng để tìm phần tử lớn nhất trong một iterable
(như tuple hoặc list). Hàm này trả về phần tử có giá trị lớn nhất
trong iterable.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một tuple, tìm phần tử lớn
nhất trong tuple bằng hàm max(), và in ra phần tử lớn nhất trong
Python.
040 - Viết chương trình để tìm phần tử
nhỏ nhất trong tuple

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm phần tử nhỏ nhất
trong một tuple mà không sử dụng hàm min(). Thay vào đó, bạn có
thể sử dụng vòng lặp for để duyệt qua từng phần tử trong tuple và
tìm phần tử nhỏ nhất.

Thuật toán giải quyết


Để tìm phần tử nhỏ nhất trong một tuple mà không dùng hàm min():

1. Khởi tạo một tuple với các phần tử mong muốn.


2. Giả sử phần tử đầu tiên là phần tử nhỏ nhất ban đầu.
3. Sử dụng vòng lặp for để duyệt qua từng phần tử trong tuple.
4. Trong mỗi lần lặp, so sánh phần tử hiện tại với phần tử nhỏ nhất
hiện tại và cập nhật phần tử nhỏ nhất nếu phần tử hiện tại nhỏ
hơn.
5. In ra phần tử nhỏ nhất.

Code Python
# Khởi tạo một tuple
my_tuple = (10, 20, 30, 40, 5, 50, 3, 25)

# Giả sử phần tử đầu tiên là phần tử nhỏ nhất


min_element = my_tuple[0]

# Duyệt qua từng phần tử trong tuple để tìm phần tử nhỏ nhất
for element in my_tuple:
if element < min_element:
min_element = element
# In ra phần tử nhỏ nhất
print("Phần tử nhỏ nhất trong tuple là:", min_element)

Giải thích code


1. Khởi tạo tuple:

Khởi tạo một tuple với các phần tử mong muốn bằng cách
đặt các phần tử bên trong dấu ngoặc tròn (). Trong ví dụ
này, tuple được khởi tạo với các phần tử (10, 20, 30, 40,
5, 50, 3, 25).

2. Giả sử phần tử đầu tiên là phần tử nhỏ nhất:

Gán giá trị của phần tử đầu tiên của tuple (my_tuple[0]) cho
biến min_element.

3. Duyệt qua từng phần tử trong tuple:

Sử dụng vòng lặp for để duyệt qua từng phần tử trong tuple.
Trong mỗi lần lặp, biến element sẽ lần lượt nhận giá trị của
từng phần tử trong tuple.

4. So sánh và cập nhật phần tử nhỏ nhất:

Trong mỗi lần lặp, so sánh phần tử hiện tại (element) với
phần tử nhỏ nhất hiện tại (min_element). Nếu element nhỏ
hơn min_element, cập nhật min_element với giá trị của
element.

5. In phần tử nhỏ nhất:

Sử dụng hàm print() để in phần tử nhỏ nhất ra màn hình.


Tóm tắt
1. Tuple: Một kiểu dữ liệu bất biến trong Python, được sử dụng để
lưu trữ một tập hợp các phần tử có thứ tự. Một tuple được tạo ra
bằng cách đặt các phần tử bên trong dấu ngoặc tròn ().
2. Vòng lặp for: Dùng để duyệt qua từng phần tử trong một
iterable (như tuple hoặc list).
3. Toán tử so sánh <: Dùng để so sánh hai giá trị. Nếu giá trị bên
trái nhỏ hơn giá trị bên phải, kết quả trả về là True; ngược lại, kết
quả là False.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một tuple, duyệt qua các
phần tử trong tuple bằng vòng lặp for, so sánh để tìm phần tử nhỏ
nhất, và in ra phần tử nhỏ nhất trong Python.
Chương 5 : Dictionary
41. Viết chương trình để tạo một dictionary.
42. Viết chương trình để truy cập giá trị của một key trong dictionary.
43. Viết chương trình để thêm một cặp key-value vào dictionary.
44. Viết chương trình để xóa một cặp key-value khỏi dictionary.
45. Viết chương trình để kiểm tra một key có tồn tại trong dictionary
không.
46. Viết chương trình để lấy tất cả các key trong dictionary.
47. Viết chương trình để lấy tất cả các giá trị trong dictionary.
48. Viết chương trình để lấy tất cả các cặp key-value trong
dictionary.
49. Viết chương trình để đếm số lượng cặp key-value trong
dictionary.
50. Viết chương trình để nối hai dictionary.
041 - Viết chương trình để tạo một
dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tạo một dictionary (từ
điển) trong Python. Dictionary là một cấu trúc dữ liệu cho phép bạn
lưu trữ các cặp khóa-giá trị. Mỗi khóa trong dictionary là duy nhất và
ánh xạ đến một giá trị cụ thể.

Thuật toán giải quyết


Để tạo một dictionary trong Python:

1. Khởi tạo một dictionary rỗng hoặc với các cặp khóa-giá trị ban
đầu.
2. (Tùy chọn) Thêm hoặc cập nhật các cặp khóa-giá trị trong
dictionary.
3. In ra dictionary đã tạo.

Code Python
# Khởi tạo một dictionary rỗng
my_dict = {}

# Thêm các cặp khóa-giá trị vào dictionary


my_dict['name'] = 'Alice'
my_dict['age'] = 25
my_dict['city'] = 'New York'

# In ra dictionary đã tạo
print("Dictionary đã tạo:", my_dict)

# Khởi tạo một dictionary với các cặp khóa-giá trị ban đầu
my_dict_2 = {
'name': 'Bob',
'age': 30,
'city': 'Los Angeles'
}

# In ra dictionary đã tạo
print("Dictionary đã tạo:", my_dict_2)

Giải thích code


1. Khởi tạo dictionary rỗng:

Sử dụng {} để khởi tạo một dictionary rỗng.

2. Thêm các cặp khóa-giá trị vào dictionary:

Sử dụng cú pháp dictionary[key] = value để thêm hoặc


cập nhật các cặp khóa-giá trị trong dictionary. Ví dụ,
my_dict['name'] = 'Alice' thêm một cặp khóa-giá trị vào
dictionary với khóa là 'name' và giá trị là 'Alice'.

3. In dictionary đã tạo:

Sử dụng hàm print() để in dictionary ra màn hình.

4. Khởi tạo dictionary với các cặp khóa-giá trị ban đầu:

Sử dụng cú pháp {key1: value1, key2: value2, ...} để


khởi tạo một dictionary với các cặp khóa-giá trị ban đầu. Ví
dụ, my_dict_2 = {'name': 'Bob', 'age': 30, 'city':
'Los Angeles'} khởi tạo một dictionary với ba cặp khóa-giá
trị.
Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp khóa-giá trị. Mỗi khóa trong dictionary là duy nhất và
ánh xạ đến một giá trị cụ thể.
2. Khởi tạo dictionary rỗng: Sử dụng {} để khởi tạo một
dictionary rỗng.
3. Thêm hoặc cập nhật cặp khóa-giá trị: Sử dụng cú pháp
dictionary[key] = value để thêm hoặc cập nhật các cặp khóa-
giá trị trong dictionary.
4. Khởi tạo dictionary với các cặp khóa-giá trị ban đầu: Sử
dụng cú pháp {key1: value1, key2: value2, ...} để khởi tạo
một dictionary với các cặp khóa-giá trị ban đầu.
5. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary rỗng, thêm
các cặp khóa-giá trị vào dictionary, và khởi tạo một dictionary với các
cặp khóa-giá trị ban đầu, rồi in ra dictionary đã tạo trong Python.
042 - Viết chương trình để truy cập giá
trị của một key trong dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để truy cập giá trị của một
khóa (key) trong một dictionary. Bạn có thể sử dụng cú pháp
dictionary[key] hoặc phương thức get() để truy cập giá trị tương
ứng với khóa trong dictionary.

Thuật toán giải quyết


Để truy cập giá trị của một khóa trong dictionary:

1. Khởi tạo một dictionary với các cặp khóa-giá trị.


2. Nhập khóa cần truy cập từ người dùng.
3. Kiểm tra xem khóa có tồn tại trong dictionary hay không.
4. Nếu khóa tồn tại, truy cập và in giá trị tương ứng.
5. Nếu khóa không tồn tại, thông báo rằng khóa không tồn tại trong
dictionary.

Code Python
# Khởi tạo một dictionary với các cặp khóa-giá trị
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}

# In dictionary đã tạo
print("Dictionary đã tạo:", my_dict)

# Nhập khóa cần truy cập từ người dùng


key = input("Nhập khóa cần truy cập: ")

# Kiểm tra xem khóa có tồn tại trong dictionary hay không
if key in my_dict:
# Truy cập và in giá trị tương ứng với khóa
value = my_dict[key]
print(f"Giá trị của khóa '{key}' là: {value}")
else:
# Thông báo khóa không tồn tại trong dictionary
print(f"Khóa '{key}' không tồn tại trong dictionary.")

Giải thích code


1. Khởi tạo dictionary:

Khởi tạo một dictionary với các cặp khóa-giá trị bằng cách
sử dụng cú pháp {key1: value1, key2: value2, ...}.
Trong ví dụ này, dictionary được khởi tạo với các cặp khóa-
giá trị {'name': 'Alice', 'age': 25, 'city': 'New York'}.

2. In dictionary đã tạo:

Sử dụng hàm print() để in dictionary ra màn hình.

3. Nhập khóa cần truy cập từ người dùng:

Sử dụng hàm input() để nhận khóa cần truy cập từ người


dùng dưới dạng một chuỗi.

4. Kiểm tra xem khóa có tồn tại trong dictionary hay không:

Sử dụng toán tử in để kiểm tra xem khóa có tồn tại trong


dictionary hay không.

5. Truy cập và in giá trị tương ứng với khóa:

Nếu khóa tồn tại, sử dụng cú pháp dictionary[key] để truy


cập giá trị tương ứng và in ra màn hình.
6. Thông báo khóa không tồn tại trong dictionary:

Nếu khóa không tồn tại, in ra thông báo rằng khóa không tồn
tại trong dictionary.

Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp khóa-giá trị. Mỗi khóa trong dictionary là duy nhất và
ánh xạ đến một giá trị cụ thể.
2. Truy cập giá trị của khóa: Sử dụng cú pháp dictionary[key]
để truy cập giá trị tương ứng với khóa trong dictionary.
3. Toán tử in: Dùng để kiểm tra xem một khóa có tồn tại trong một
dictionary hay không. Nếu khóa tồn tại, kết quả trả về là True;
ngược lại, kết quả là False.
4. Hàm input(): Dùng để nhận dữ liệu từ người dùng dưới dạng
chuỗi.
5. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary, nhập khóa
cần truy cập từ người dùng, kiểm tra xem khóa có tồn tại trong
dictionary hay không, truy cập giá trị tương ứng với khóa, và in ra
giá trị hoặc thông báo khóa không tồn tại trong Python.
043 - Viết chương trình để thêm một
cặp key-value vào dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để thêm một cặp key-
value (khóa-giá trị) vào một dictionary trong Python. Bạn có thể sử
dụng cú pháp dictionary[key] = value để thêm hoặc cập nhật một
cặp key-value trong dictionary.

Thuật toán giải quyết


Để thêm một cặp key-value vào dictionary:

1. Khởi tạo một dictionary với các cặp key-value ban đầu (có thể là
rỗng).
2. Nhập khóa và giá trị từ người dùng.
3. Thêm cặp key-value vào dictionary.
4. In ra dictionary sau khi thêm cặp key-value.

Code Python
# Khởi tạo một dictionary với các cặp khóa-giá trị ban đầu
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}

# In dictionary đã tạo
print("Dictionary ban đầu:", my_dict)

# Nhập khóa cần thêm từ người dùng


new_key = input("Nhập khóa cần thêm: ")
# Nhập giá trị cần thêm từ người dùng
new_value = input("Nhập giá trị cần thêm: ")

# Thêm cặp key-value vào dictionary


my_dict[new_key] = new_value

# In ra dictionary sau khi thêm cặp key-value


print("Dictionary sau khi thêm cặp key-value:", my_dict)

Giải thích code


1. Khởi tạo dictionary:

Khởi tạo một dictionary với các cặp key-value ban đầu bằng
cách sử dụng cú pháp {key1: value1, key2: value2, ...}.
Trong ví dụ này, dictionary được khởi tạo với các cặp key-
value {'name': 'Alice', 'age': 25, 'city': 'New York'}.

2. In dictionary ban đầu:

Sử dụng hàm print() để in dictionary ban đầu ra màn hình.

3. Nhập khóa cần thêm từ người dùng:

Sử dụng hàm input() để nhận khóa cần thêm từ người


dùng dưới dạng một chuỗi.

4. Nhập giá trị cần thêm từ người dùng:

Sử dụng hàm input() để nhận giá trị cần thêm từ người


dùng dưới dạng một chuỗi.

5. Thêm cặp key-value vào dictionary:

Sử dụng cú pháp dictionary[key] = value để thêm hoặc


cập nhật cặp key-value trong dictionary. Trong ví dụ này,
my_dict[new_key] = new_value sẽ thêm hoặc cập nhật cặp
key-value vào dictionary.

6. In dictionary sau khi thêm cặp key-value:

Sử dụng hàm print() để in dictionary sau khi thêm cặp key-


value ra màn hình.

Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp key-value. Mỗi key trong dictionary là duy nhất và ánh
xạ đến một giá trị cụ thể.
2. Thêm hoặc cập nhật cặp key-value: Sử dụng cú pháp
dictionary[key] = value để thêm hoặc cập nhật cặp key-value
trong dictionary.
3. Hàm input(): Dùng để nhận dữ liệu từ người dùng dưới dạng
chuỗi.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary, nhập khóa
và giá trị từ người dùng, thêm cặp key-value vào dictionary, và in ra
dictionary sau khi thêm cặp key-value trong Python.
044 - Viết chương trình để xóa một
cặp key-value khỏi dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để xóa một cặp key-value
khỏi một dictionary trong Python. Bạn có thể sử dụng phương thức
pop() hoặc từ khóa del để xóa một cặp key-value khỏi dictionary.

Thuật toán giải quyết


Để xóa một cặp key-value khỏi dictionary:

1. Khởi tạo một dictionary với các cặp key-value ban đầu.
2. Nhập khóa cần xóa từ người dùng.
3. Kiểm tra xem khóa có tồn tại trong dictionary hay không.
4. Nếu khóa tồn tại, xóa cặp key-value tương ứng.
5. In ra dictionary sau khi xóa cặp key-value.

Code Python
# Khởi tạo một dictionary với các cặp key-value ban đầu
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}

# In dictionary ban đầu


print("Dictionary ban đầu:", my_dict)

# Nhập khóa cần xóa từ người dùng


key_to_delete = input("Nhập khóa cần xóa: ")
# Kiểm tra xem khóa có tồn tại trong dictionary hay không
if key_to_delete in my_dict:
# Xóa cặp key-value bằng phương thức pop()
my_dict.pop(key_to_delete)
print(f"Đã xóa cặp key-value có khóa '{key_to_delete}'.")
else:
# Thông báo khóa không tồn tại trong dictionary
print(f"Khóa '{key_to_delete}' không tồn tại trong
dictionary.")

# In ra dictionary sau khi xóa cặp key-value


print("Dictionary sau khi xóa cặp key-value:", my_dict)

Giải thích code


1. Khởi tạo dictionary:

Khởi tạo một dictionary với các cặp key-value ban đầu bằng
cách sử dụng cú pháp {key1: value1, key2: value2, ...}.
Trong ví dụ này, dictionary được khởi tạo với các cặp key-
value {'name': 'Alice', 'age': 25, 'city': 'New York'}.

2. In dictionary ban đầu:

Sử dụng hàm print() để in dictionary ban đầu ra màn hình.

3. Nhập khóa cần xóa từ người dùng:

Sử dụng hàm input() để nhận khóa cần xóa từ người dùng


dưới dạng một chuỗi.

4. Kiểm tra xem khóa có tồn tại trong dictionary hay không:

Sử dụng toán tử in để kiểm tra xem khóa có tồn tại trong


dictionary hay không.

5. Xóa cặp key-value bằng phương thức pop():


Nếu khóa tồn tại, sử dụng phương thức pop() để xóa cặp
key-value khỏi dictionary. Phương thức pop(key) xóa cặp
key-value tương ứng với khóa key và trả về giá trị của khóa
đó.

6. Thông báo khóa không tồn tại trong dictionary:

Nếu khóa không tồn tại, in ra thông báo rằng khóa không tồn
tại trong dictionary.

7. In dictionary sau khi xóa cặp key-value:

Sử dụng hàm print() để in dictionary sau khi xóa cặp key-


value ra màn hình.

Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp key-value. Mỗi key trong dictionary là duy nhất và ánh
xạ đến một giá trị cụ thể.
2. Phương thức pop(): Dùng để xóa cặp key-value khỏi dictionary
dựa trên khóa và trả về giá trị của khóa đó. Nếu khóa không tồn
tại, nó sẽ gây ra lỗi KeyError.
3. Toán tử in: Dùng để kiểm tra xem một khóa có tồn tại trong một
dictionary hay không. Nếu khóa tồn tại, kết quả trả về là True;
ngược lại, kết quả là False.
4. Hàm input(): Dùng để nhận dữ liệu từ người dùng dưới dạng
chuỗi.
5. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary, nhập khóa
cần xóa từ người dùng, kiểm tra xem khóa có tồn tại trong dictionary
hay không, xóa cặp key-value khỏi dictionary nếu khóa tồn tại, và in
ra dictionary sau khi xóa cặp key-value trong Python.
045 - Viết chương trình để kiểm tra
một key có tồn tại trong dictionary
không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một khóa
(key) có tồn tại trong một dictionary trong Python hay không. Bạn có
thể sử dụng toán tử in để kiểm tra sự tồn tại của một khóa trong
dictionary.

Thuật toán giải quyết


Để kiểm tra xem một khóa có tồn tại trong dictionary hay không:

1. Khởi tạo một dictionary với các cặp key-value ban đầu.
2. Nhập khóa cần kiểm tra từ người dùng.
3. Sử dụng toán tử in để kiểm tra xem khóa có tồn tại trong
dictionary hay không.
4. In ra thông báo kết quả kiểm tra.

Code Python
# Khởi tạo một dictionary với các cặp key-value ban đầu
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}

# In dictionary ban đầu


print("Dictionary ban đầu:", my_dict)
# Nhập khóa cần kiểm tra từ người dùng
key_to_check = input("Nhập khóa cần kiểm tra: ")

# Kiểm tra xem khóa có tồn tại trong dictionary hay không
if key_to_check in my_dict:
print(f"Khóa '{key_to_check}' tồn tại trong dictionary.")
else:
print(f"Khóa '{key_to_check}' không tồn tại trong
dictionary.")

Giải thích code


1. Khởi tạo dictionary:

Khởi tạo một dictionary với các cặp key-value ban đầu bằng
cách sử dụng cú pháp {key1: value1, key2: value2, ...}.
Trong ví dụ này, dictionary được khởi tạo với các cặp key-
value {'name': 'Alice', 'age': 25, 'city': 'New York'}.

2. In dictionary ban đầu:

Sử dụng hàm print() để in dictionary ban đầu ra màn hình.

3. Nhập khóa cần kiểm tra từ người dùng:

Sử dụng hàm input() để nhận khóa cần kiểm tra từ người


dùng dưới dạng một chuỗi.

4. Kiểm tra xem khóa có tồn tại trong dictionary hay không:

Sử dụng toán tử in để kiểm tra xem khóa có tồn tại trong


dictionary hay không. Cú pháp key in dictionary sẽ trả về
True nếu khóa tồn tại trong dictionary, ngược lại trả về False.

5. In thông báo kết quả kiểm tra:


Sử dụng hàm print() để in thông báo kết quả kiểm tra. Nếu
khóa tồn tại, in thông báo khóa tồn tại. Nếu khóa không tồn
tại, in thông báo khóa không tồn tại.

Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp key-value. Mỗi key trong dictionary là duy nhất và ánh
xạ đến một giá trị cụ thể.
2. Toán tử in: Dùng để kiểm tra xem một khóa có tồn tại trong một
dictionary hay không. Nếu khóa tồn tại, kết quả trả về là True;
ngược lại, kết quả là False.
3. Hàm input(): Dùng để nhận dữ liệu từ người dùng dưới dạng
chuỗi.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary, nhập khóa
cần kiểm tra từ người dùng, sử dụng toán tử in để kiểm tra xem
khóa có tồn tại trong dictionary hay không, và in ra thông báo kết
quả kiểm tra trong Python.
046 - Viết chương trình để lấy tất cả
các key trong dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy tất cả các key
trong một dictionary. Bạn có thể sử dụng phương thức keys() của
dictionary để lấy danh sách các key.

Thuật toán giải quyết


Để lấy tất cả các key trong dictionary:

1. Khởi tạo một dictionary với các cặp key-value ban đầu.
2. Sử dụng phương thức keys() để lấy danh sách các key từ
dictionary.
3. In ra danh sách các key.

Code Python
# Khởi tạo một dictionary với các cặp key-value ban đầu
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}

# In dictionary ban đầu


print("Dictionary ban đầu:", my_dict)

# Lấy tất cả các key trong dictionary


keys = my_dict.keys()
# In ra danh sách các key
print("Các key trong dictionary:", list(keys))

Giải thích code


1. Khởi tạo dictionary:

Khởi tạo một dictionary với các cặp key-value ban đầu bằng
cách sử dụng cú pháp {key1: value1, key2: value2, ...}.
Trong ví dụ này, dictionary được khởi tạo với các cặp key-
value {'name': 'Alice', 'age': 25, 'city': 'New York'}.

2. In dictionary ban đầu:

Sử dụng hàm print() để in dictionary ban đầu ra màn hình.

3. Lấy tất cả các key trong dictionary:

Sử dụng phương thức keys() để lấy danh sách các key từ


dictionary. Phương thức keys() trả về một đối tượng
dict_keys, là một view object hiển thị danh sách các key
trong dictionary.

4. In ra danh sách các key:

Sử dụng hàm list() để chuyển đổi đối tượng dict_keys


thành danh sách (list) và in ra màn hình.

Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp key-value. Mỗi key trong dictionary là duy nhất và ánh
xạ đến một giá trị cụ thể.
2. Phương thức keys(): Dùng để lấy danh sách các key trong
dictionary. Phương thức này trả về một view object (dict_keys)
chứa các key trong dictionary.
3. Hàm list(): Dùng để chuyển đổi một đối tượng iterable (như
dict_keys) thành một danh sách.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary, sử dụng
phương thức keys() để lấy danh sách các key từ dictionary, và in ra
danh sách các key trong Python.
047 - Viết chương trình để lấy tất cả
các giá trị trong dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy tất cả các giá trị
(values) trong một dictionary và chuyển các giá trị đó thành một
mảng (array). Bạn có thể sử dụng phương thức values() của
dictionary để lấy danh sách các giá trị.

Thuật toán giải quyết


Để lấy tất cả các giá trị trong dictionary và chuyển các giá trị đó
thành một mảng:

1. Khởi tạo một dictionary với các cặp key-value ban đầu.
2. Sử dụng phương thức values() để lấy danh sách các giá trị từ
dictionary.
3. Chuyển đổi danh sách các giá trị thành một mảng (array).
4. In ra mảng các giá trị.

Code Python
# Khởi tạo một dictionary với các cặp key-value ban đầu
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}

# In dictionary ban đầu


print("Dictionary ban đầu:", my_dict)

# Lấy tất cả các giá trị trong dictionary


values = my_dict.values()

# Chuyển đổi các giá trị thành một array (danh sách trong
Python)
values_array = list(values)

# In ra array các giá trị


print("Array các giá trị trong dictionary:", values_array)

Giải thích code


1. Khởi tạo dictionary:

Khởi tạo một dictionary với các cặp key-value ban đầu bằng
cách sử dụng cú pháp {key1: value1, key2: value2, ...}.
Trong ví dụ này, dictionary được khởi tạo với các cặp key-
value {'name': 'Alice', 'age': 25, 'city': 'New York'}.

2. In dictionary ban đầu:

Sử dụng hàm print() để in dictionary ban đầu ra màn hình.

3. Lấy tất cả các giá trị trong dictionary:

Sử dụng phương thức values() để lấy danh sách các giá trị
từ dictionary. Phương thức values() trả về một view object
(dict_values), là một view object hiển thị danh sách các giá
trị trong dictionary.

4. Chuyển đổi các giá trị thành một array (danh sách):

Sử dụng hàm list() để chuyển đổi đối tượng dict_values


thành một danh sách (array) và lưu vào biến values_array.

5. In ra array các giá trị:

Sử dụng hàm print() để in array các giá trị ra màn hình.


Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp key-value. Mỗi key trong dictionary là duy nhất và ánh
xạ đến một giá trị cụ thể.
2. Phương thức values(): Dùng để lấy danh sách các giá trị trong
dictionary. Phương thức này trả về một view object
(dict_values) chứa các giá trị trong dictionary.
3. Hàm list(): Dùng để chuyển đổi một đối tượng iterable (như
dict_values) thành một danh sách (array).
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary, sử dụng
phương thức values() để lấy danh sách các giá trị từ dictionary,
chuyển danh sách các giá trị thành một mảng (array), và in ra mảng
các giá trị trong Python.
048 - Viết chương trình để lấy tất cả
các cặp key-value trong dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy tất cả các cặp key-
value trong một dictionary. Bạn có thể sử dụng phương thức
items() của dictionary để lấy danh sách các cặp key-value dưới
dạng các tuple (bộ).

Thuật toán giải quyết


Để lấy tất cả các cặp key-value trong dictionary:

1. Khởi tạo một dictionary với các cặp key-value ban đầu.
2. Sử dụng phương thức items() để lấy danh sách các cặp key-
value từ dictionary.
3. In ra danh sách các cặp key-value.

Code Python
# Khởi tạo một dictionary với các cặp key-value ban đầu
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}

# In dictionary ban đầu


print("Dictionary ban đầu:", my_dict)

# Lấy tất cả các cặp key-value trong dictionary


items = my_dict.items()
# Chuyển đổi các cặp key-value thành danh sách (list)
items_list = list(items)

# In ra danh sách các cặp key-value


print("Danh sách các cặp key-value trong dictionary:",
items_list)

Giải thích code


1. Khởi tạo dictionary:

Khởi tạo một dictionary với các cặp key-value ban đầu bằng
cách sử dụng cú pháp {key1: value1, key2: value2, ...}.
Trong ví dụ này, dictionary được khởi tạo với các cặp key-
value {'name': 'Alice', 'age': 25, 'city': 'New York'}.

2. In dictionary ban đầu:

Sử dụng hàm print() để in dictionary ban đầu ra màn hình.

3. Lấy tất cả các cặp key-value trong dictionary:

Sử dụng phương thức items() để lấy danh sách các cặp


key-value từ dictionary. Phương thức items() trả về một
view object (dict_items), là một view object hiển thị danh
sách các cặp key-value dưới dạng các tuple (bộ).

4. Chuyển đổi các cặp key-value thành danh sách (list):

Sử dụng hàm list() để chuyển đổi đối tượng dict_items


thành một danh sách và lưu vào biến items_list.

5. In ra danh sách các cặp key-value:

Sử dụng hàm print() để in danh sách các cặp key-value ra


màn hình.
Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp key-value. Mỗi key trong dictionary là duy nhất và ánh
xạ đến một giá trị cụ thể.
2. Phương thức items(): Dùng để lấy danh sách các cặp key-
value trong dictionary. Phương thức này trả về một view object
(dict_items) chứa các cặp key-value dưới dạng các tuple (bộ).
3. Hàm list(): Dùng để chuyển đổi một đối tượng iterable (như
dict_items) thành một danh sách.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary, sử dụng
phương thức items() để lấy danh sách các cặp key-value từ
dictionary, chuyển danh sách các cặp key-value thành một danh
sách, và in ra danh sách các cặp key-value trong Python.
049 - Viết chương trình để đếm số
lượng cặp key-value trong dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số lượng cặp
key-value trong một dictionary và liệt kê các cách khác nhau để đếm
số lượng này trong Python. Bạn có thể sử dụng nhiều phương pháp
để đếm số lượng cặp key-value trong dictionary.

Thuật toán giải quyết


Để đếm số lượng cặp key-value trong dictionary, bạn có thể sử dụng
các phương pháp sau:

1. Sử dụng hàm len() trực tiếp trên dictionary.


2. Sử dụng phương thức items() và hàm len().
3. Sử dụng vòng lặp for để đếm thủ công.

Code Python
# Khởi tạo một dictionary với các cặp key-value ban đầu
my_dict = {
'name': 'Alice',
'age': 25,
'city': 'New York'
}

# In dictionary ban đầu


print("Dictionary ban đầu:", my_dict)

# Phương pháp 1: Sử dụng hàm len() trực tiếp trên dictionary


count1 = len(my_dict)
print("Số lượng cặp key-value (Phương pháp 1):", count1)
# Phương pháp 2: Sử dụng phương thức items() và hàm len()
count2 = len(my_dict.items())
print("Số lượng cặp key-value (Phương pháp 2):", count2)

# Phương pháp 3: Sử dụng vòng lặp for để đếm thủ công


count3 = 0
for _ in my_dict:
count3 += 1
print("Số lượng cặp key-value (Phương pháp 3):", count3)

Giải thích code


1. Khởi tạo dictionary:

Khởi tạo một dictionary với các cặp key-value ban đầu bằng
cách sử dụng cú pháp {key1: value1, key2: value2, ...}.
Trong ví dụ này, dictionary được khởi tạo với các cặp key-
value {'name': 'Alice', 'age': 25, 'city': 'New York'}.

2. In dictionary ban đầu:

Sử dụng hàm print() để in dictionary ban đầu ra màn hình.

3. Phương pháp 1: Sử dụng hàm len() trực tiếp trên


dictionary:

Sử dụng hàm len() trực tiếp trên dictionary để đếm số


lượng cặp key-value. Hàm len() trả về số lượng cặp key-
value trong dictionary.

4. Phương pháp 2: Sử dụng phương thức items() và hàm


len():

Sử dụng phương thức items() để lấy danh sách các cặp


key-value dưới dạng các tuple và sau đó sử dụng hàm len()
để đếm số lượng cặp key-value trong danh sách này.
5. Phương pháp 3: Sử dụng vòng lặp for để đếm thủ công:

Sử dụng vòng lặp for để duyệt qua các key trong dictionary
và đếm số lượng cặp key-value bằng cách tăng biến đếm
count3 lên 1 trong mỗi lần lặp.

Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp key-value. Mỗi key trong dictionary là duy nhất và ánh
xạ đến một giá trị cụ thể.
2. Hàm len(): Dùng để trả về số lượng các phần tử trong một đối
tượng iterable (như danh sách, tuple, dictionary).
3. Phương thức items(): Dùng để lấy danh sách các cặp key-
value trong dictionary dưới dạng các tuple.
4. Vòng lặp for: Dùng để lặp qua các phần tử của một đối tượng
iterable. Trong trường hợp này, nó được sử dụng để đếm số
lượng cặp key-value trong dictionary một cách thủ công.
5. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một dictionary, sử dụng
nhiều phương pháp khác nhau để đếm số lượng cặp key-value
trong dictionary, và in ra kết quả trong Python.
050 - Viết chương trình để nối hai
dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để nối hai dictionary
thành một. Bạn có thể sử dụng hai phương pháp:

1. Sử dụng phương thức update().


2. Sử dụng toán tử ** để unpack các dictionary và nối chúng lại với
nhau.

Thuật toán giải quyết


Để nối hai dictionary thành một:

1. Khởi tạo hai dictionary với các cặp key-value ban đầu.
2. Sử dụng phương thức update() để nối hai dictionary.
3. Sử dụng toán tử ** để nối hai dictionary.

Code Python
# Khởi tạo hai dictionary với các cặp key-value ban đầu
dict1 = {
'name': 'Alice',
'age': 25
}

dict2 = {
'city': 'New York',
'country': 'USA'
}

# In hai dictionary ban đầu


print("Dictionary 1:", dict1)
print("Dictionary 2:", dict2)

# Phương pháp 1: Sử dụng phương thức update() để nối hai


dictionary
dict3 = dict1.copy() # Tạo một bản sao của dict1 để không
thay đổi dict1 gốc
dict3.update(dict2)
print("Kết quả nối dictionary bằng phương thức update():",
dict3)

# Phương pháp 2: Sử dụng toán tử ** để nối hai dictionary


dict4 = {**dict1, **dict2}
print("Kết quả nối dictionary bằng toán tử **:", dict4)

Giải thích code


1. Khởi tạo hai dictionary:

Khởi tạo hai dictionary dict1 và dict2 với các cặp key-value
ban đầu.

2. In hai dictionary ban đầu:

Sử dụng hàm print() để in hai dictionary ban đầu ra màn


hình.

3. Phương pháp 1: Sử dụng phương thức update():

Tạo một bản sao của dict1 bằng cách sử dụng phương thức
copy().
Sử dụng phương thức update() để thêm các cặp key-value
từ dict2 vào bản sao của dict1. Phương thức update() sẽ
cập nhật dictionary gốc với các cặp key-value từ dictionary
khác.
In kết quả của dictionary sau khi nối bằng phương thức
update().
4. **Phương pháp 2: Sử dụng toán tử ****:

Sử dụng toán tử ** để unpack các cặp key-value từ dict1 và


dict2, sau đó nối chúng lại với nhau để tạo một dictionary
mới.
In kết quả của dictionary sau khi nối bằng toán tử **.

Tóm tắt
1. Dictionary: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
các cặp key-value. Mỗi key trong dictionary là duy nhất và ánh
xạ đến một giá trị cụ thể.
2. Phương thức update(): Dùng để cập nhật dictionary bằng cách
thêm các cặp key-value từ một dictionary khác. Nếu key đã tồn
tại, giá trị sẽ được cập nhật.
3. **Toán tử ****: Dùng để unpack các cặp key-value từ nhiều
dictionary và nối chúng lại với nhau. Đây là cách dễ đọc và gọn
gàng để nối nhiều dictionary thành một.
4. Phương thức copy(): Dùng để tạo một bản sao của dictionary,
giúp tránh thay đổi dictionary gốc.

Chương trình trên minh họa cách khởi tạo hai dictionary, sử dụng
phương thức update() và toán tử ** để nối hai dictionary, và in ra
kết quả trong Python.
Chương 6 : Set
51. Viết chương trình để tạo một set.
52. Viết chương trình để thêm một phần tử vào set.
53. Viết chương trình để xóa một phần tử khỏi set.
54. Viết chương trình để kiểm tra một phần tử có tồn tại trong set
không.
55. Viết chương trình để lấy độ dài của set.
56. Viết chương trình để tìm hợp của hai set.
57. Viết chương trình để tìm giao của hai set.
58. Viết chương trình để tìm phần bù của hai set.
59. Viết chương trình để xóa tất cả các phần tử trong set.
60. Viết chương trình để chuyển đổi một danh sách thành set.
051 - Viết chương trình để tạo một set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tạo một set trong
Python bằng cách sử dụng hai cách khác nhau:

1. Sử dụng dấu ngoặc nhọn {}.


2. Sử dụng hàm dựng sẵn set().

Thuật toán giải quyết


Để tạo một set:

1. Sử dụng dấu ngoặc nhọn {} để khởi tạo set.


2. Sử dụng hàm dựng sẵn set() để khởi tạo set.

Code Python
# Phương pháp 1: Sử dụng dấu ngoặc nhọn {} để tạo một set
set1 = {'apple', 'banana', 'cherry'}
print("Set tạo bằng dấu ngoặc nhọn {}:", set1)

# Phương pháp 2: Sử dụng hàm set() để tạo một set


set2 = set(['apple', 'banana', 'cherry'])
print("Set tạo bằng hàm set():", set2)

Giải thích code


1. Tạo set bằng dấu ngoặc nhọn {}:

Sử dụng dấu ngoặc nhọn {} để khởi tạo một set với các
phần tử 'apple', 'banana', và 'cherry'.
Sử dụng hàm print() để in set được tạo ra.
2. Tạo set bằng hàm set():

Sử dụng hàm dựng sẵn set() để khởi tạo một set với danh
sách các phần tử ['apple', 'banana', 'cherry'].
Hàm set() nhận vào một iterable (trong trường hợp này là
danh sách) và chuyển đổi nó thành một set.
Sử dụng hàm print() để in set được tạo ra.

Tóm tắt
1. Set: Một cấu trúc dữ liệu trong Python cho phép lưu trữ các
phần tử không trùng lặp. Set không duy trì thứ tự các phần tử và
hỗ trợ các phép toán tập hợp như hợp, giao, và hiệu.
2. Dấu ngoặc nhọn {}: Dùng để khởi tạo một set trực tiếp với các
phần tử được liệt kê trong ngoặc nhọn.
3. Hàm dựng sẵn set(): Dùng để khởi tạo một set từ một iterable
như danh sách, tuple, hoặc chuỗi.

Chương trình trên minh họa cách tạo một set bằng hai cách: sử
dụng dấu ngoặc nhọn {} và sử dụng hàm dựng sẵn set(), và in kết
quả của các set được tạo ra trong Python.
052 - Viết chương trình để thêm một
phần tử vào set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để thêm một phần tử vào
set trong Python bằng cách sử dụng hai phương pháp:

1. Sử dụng phương thức add().


2. Sử dụng phương thức update().

Thuật toán giải quyết


Để thêm một phần tử vào set:

1. Khởi tạo một set ban đầu.


2. Sử dụng phương thức add() để thêm một phần tử vào set.
3. Sử dụng phương thức update() để thêm một phần tử vào set.

Code Python
# Khởi tạo một set ban đầu
my_set = {'apple', 'banana', 'cherry'}
print("Set ban đầu:", my_set)

# Phương pháp 1: Sử dụng phương thức add() để thêm một phần


tử vào set
my_set.add('orange')
print("Set sau khi thêm 'orange' bằng phương thức add():",
my_set)

# Phương pháp 2: Sử dụng phương thức update() để thêm một


phần tử vào set
my_set.update(['grape']) # Phương thức update() nhận vào một
iterable, vì vậy phần tử cần được đưa vào một iterable
print("Set sau khi thêm 'grape' bằng phương thức update():",
my_set)

Giải thích code


1. Khởi tạo set:

Khởi tạo một set ban đầu với các phần tử 'apple',
'banana', và 'cherry'.

2. In set ban đầu:

Sử dụng hàm print() để in set ban đầu ra màn hình.

3. Phương pháp 1: Sử dụng phương thức add():

Sử dụng phương thức add() để thêm phần tử 'orange' vào


set. Phương thức add() thêm một phần tử duy nhất vào set.
In kết quả của set sau khi thêm phần tử bằng phương thức
add().

4. Phương pháp 2: Sử dụng phương thức update():

Sử dụng phương thức update() để thêm phần tử 'grape'


vào set. Phương thức update() nhận vào một iterable và
thêm tất cả các phần tử của iterable đó vào set. Do đó, phần
tử 'grape' cần được đặt trong một iterable (trong trường
hợp này là danh sách ['grape']).
In kết quả của set sau khi thêm phần tử bằng phương thức
update().
Tóm tắt
1. Set: Một cấu trúc dữ liệu trong Python cho phép lưu trữ các
phần tử không trùng lặp. Set không duy trì thứ tự các phần tử và
hỗ trợ các phép toán tập hợp như hợp, giao, và hiệu.
2. Phương thức add(): Dùng để thêm một phần tử duy nhất vào
set.
3. Phương thức update(): Dùng để thêm nhiều phần tử vào set
bằng cách nhận vào một iterable (như danh sách, tuple, hoặc
chuỗi) và thêm tất cả các phần tử của iterable đó vào set.
4. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một set, sử dụng phương
thức add() và update() để thêm phần tử vào set, và in ra kết quả
của set trong Python.
053 - Viết chương trình để xóa một
phần tử khỏi set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để xóa một phần tử khỏi
set trong Python bằng cách sử dụng hai phương pháp:

1. Sử dụng phương thức remove().


2. Sử dụng phương thức discard().

Thuật toán giải quyết


Đầu vào: Một set ban đầu và một phần tử cần xóa khỏi set.

Đầu ra: Set sau khi đã xóa phần tử.

Các bước thực hiện:

1. Khởi tạo một set ban đầu.


2. Sử dụng phương thức remove() để xóa một phần tử khỏi set.
3. Sử dụng phương thức discard() để xóa một phần tử khỏi set.

Code Python
# Khởi tạo một set ban đầu
my_set = {'apple', 'banana', 'cherry'}
print("Set ban đầu:", my_set)

# Phương pháp 1: Sử dụng phương thức remove() để xóa một phần


tử khỏi set
my_set.remove('banana')
print("Set sau khi xóa 'banana' bằng phương thức remove():",
my_set)
# Phương pháp 2: Sử dụng phương thức discard() để xóa một
phần tử khỏi set
my_set.discard('apple')
print("Set sau khi xóa 'apple' bằng phương thức discard():",
my_set)

Giải thích code


1. Khởi tạo set: Khởi tạo một set ban đầu với các phần tử
'apple', 'banana', và 'cherry'.
2. In set ban đầu: Sử dụng hàm print() để in set ban đầu ra màn
hình.
3. Phương pháp 1: Sử dụng phương thức remove():
Sử dụng phương thức remove() để xóa phần tử 'banana'
khỏi set.
Phương thức remove() xóa một phần tử duy nhất khỏi set.
Nếu phần tử không tồn tại, remove() sẽ gây ra lỗi.
In kết quả của set sau khi xóa phần tử bằng phương thức
remove().
4. Phương pháp 2: Sử dụng phương thức discard():
Sử dụng phương thức discard() để xóa phần tử 'apple'
khỏi set.
Phương thức discard() cũng xóa một phần tử duy nhất khỏi
set.
Tuy nhiên, nếu phần tử không tồn tại, discard() không gây
ra lỗi. In kết quả của set sau khi xóa phần tử bằng phương
thức discard().

Tóm tắt
1. set là một cấu trúc dữ liệu không có thứ tự và không chứa các
phần tử trùng lặp.
2. Bạn có thể xóa một phần tử khỏi set bằng cách sử dụng
phương thức remove() hoặc discard().
3. Phương thức remove() sẽ gây ra lỗi nếu phần tử không tồn tại
trong set, trong khi discard() không gây ra lỗi trong trường hợp
tương tự.
054 - Viết chương trình để kiểm tra
một phần tử có tồn tại trong set
không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một phần
tử có tồn tại trong set hay không. Bạn có thể sử dụng toán tử in để
kiểm tra sự tồn tại của phần tử trong set.

Thuật toán giải quyết


Để kiểm tra một phần tử có tồn tại trong set hay không:

1. Khởi tạo một set ban đầu.


2. Sử dụng toán tử in để kiểm tra sự tồn tại của phần tử trong set.
3. In kết quả kiểm tra.

Code Python
# Khởi tạo một set ban đầu
my_set = {'apple', 'banana', 'cherry'}
print("Set ban đầu:", my_set)

# Kiểm tra sự tồn tại của phần tử trong set


element = 'banana'
if element in my_set:
print(f"Phần tử '{element}' tồn tại trong set.")
else:
print(f"Phần tử '{element}' không tồn tại trong set.")

element = 'orange'
if element in my_set:
print(f"Phần tử '{element}' tồn tại trong set.")
else:
print(f"Phần tử '{element}' không tồn tại trong set.")

Giải thích code


1. Khởi tạo set:

Khởi tạo một set ban đầu với các phần tử 'apple',
'banana', và 'cherry'.

2. In set ban đầu:

Sử dụng hàm print() để in set ban đầu ra màn hình.

3. Kiểm tra sự tồn tại của phần tử trong set:

Kiểm tra sự tồn tại của phần tử 'banana' trong set bằng toán
tử in. Nếu phần tử tồn tại, in ra thông báo phần tử tồn tại.
Ngược lại, in ra thông báo phần tử không tồn tại.
Lặp lại quá trình kiểm tra với phần tử 'orange'.

Tóm tắt
1. Set: Một cấu trúc dữ liệu trong Python cho phép lưu trữ các
phần tử không trùng lặp. Set không duy trì thứ tự các phần tử và
hỗ trợ các phép toán tập hợp như hợp, giao, và hiệu.
2. Toán tử in: Dùng để kiểm tra xem một phần tử có tồn tại trong
set hay không. Trả về True nếu phần tử tồn tại, ngược lại trả về
False.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách khởi tạo một set, sử dụng toán tử
in để kiểm tra sự tồn tại của phần tử trong set, và in ra kết quả kiểm
tra trong Python.
055 - Viết chương trình để lấy độ dài
của set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy độ dài của set
trong Python.

Thuật toán giải quyết


Đầu vào: Một set ban đầu.

Đầu ra: Độ dài của set.

Các bước thực hiện:

1. Khởi tạo một set ban đầu.


2. Lấy độ dài của set bằng cách sử dụng hàm len().

Code Python
# Khởi tạo một set ban đầu
my_set = {'apple', 'banana', 'cherry'}
print("Set ban đầu:", my_set)

# Lấy độ dài của set


length = len(my_set)
print("Độ dài của set:", length)

Giải thích code


1. Khởi tạo set: Khởi tạo một set ban đầu với các phần tử
'apple', 'banana', và 'cherry'.
2. In set ban đầu: Sử dụng hàm print() để in set ban đầu ra màn
hình.
3. Lấy độ dài của set: Sử dụng hàm len() để lấy độ dài của set.
Hàm len() trả về số lượng phần tử trong set.
4. In độ dài của set: Sử dụng hàm print() để in độ dài của set ra
màn hình.

Tóm tắt
Trong Python, set là một cấu trúc dữ liệu không có thứ tự và
không chứa các phần tử trùng lặp.
Bạn có thể lấy độ dài của set bằng cách sử dụng hàm len().
Hàm len() trả về số lượng phần tử trong set.

Chương trình Python này khởi tạo một set và lấy độ dài của set
bằng cách sử dụng hàm len().
056 - Viết chương trình để tìm hợp
của hai set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm hợp của hai set
trong Python.

Thuật toán giải quyết


Đầu vào: Hai set ban đầu.

Đầu ra: Hợp của hai set.

Các bước thực hiện:

1. Khởi tạo hai set ban đầu.


2. Tìm hợp của hai set bằng cách sử dụng phép toán | hoặc hàm
union().

Code Python
# Khởi tạo hai set ban đầu
set1 = {'apple', 'banana', 'cherry'}
set2 = {'banana', 'cherry', 'durian'}
print("Set 1:", set1)
print("Set 2:", set2)

# Tìm hợp của hai set


set_union = set1 | set2
print("Hợp của hai set:", set_union)
Giải thích code
1. Khởi tạo hai set: Khởi tạo hai set ban đầu với các phần tử
tương ứng.
2. In hai set ban đầu: Sử dụng hàm print() để in hai set ban đầu
ra màn hình.
3. Tìm hợp của hai set: Sử dụng phép toán | để tìm hợp của hai
set. Hợp của hai set là một set mới chứa tất cả các phần tử từ
cả hai set ban đầu, không có phần tử trùng lặp.
4. In hợp của hai set: Sử dụng hàm print() để in hợp của hai set
ra màn hình.

Bổ sung
Cách giải khác:

Sử dụng hàm union() để tìm hợp của hai set.


set_union = set1.union(set2)

Tóm tắt
Trong Python, set là một cấu trúc dữ liệu không có thứ tự và
không chứa các phần tử trùng lặp.
Bạn có thể tìm hợp của hai set bằng cách sử dụng phép toán |
hoặc hàm union().
Hợp của hai set là một set mới chứa tất cả các phần tử từ cả
hai set ban đầu, không có phần tử trùng lặp.

Chương trình Python này khởi tạo hai set và tìm hợp của hai set
bằng cách sử dụng phép toán |.
057 - Viết chương trình để tìm giao
của hai set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm giao của hai set
trong Python.

Thuật toán giải quyết


Đầu vào: Hai set ban đầu.

Đầu ra: Giao của hai set.

Các bước thực hiện:

1. Sử dụng hai set đã khởi tạo từ đoạn code trước.


2. Tìm giao của hai set bằng cách sử dụng phép toán & hoặc hàm
intersection().

Code Python
# Khởi tạo hai set ban đầu
set1 = {'apple', 'banana', 'cherry'}
set2 = {'banana', 'cherry', 'durian'}
print("Set 1:", set1)
print("Set 2:", set2)

# Tìm giao của hai set


set_intersection = set1 & set2
print("Giao của hai set:", set_intersection)
Giải thích code
1. Tìm giao của hai set: Sử dụng phép toán & để tìm giao của hai
set. Giao của hai set là một set mới chứa các phần tử xuất hiện
trong cả hai set ban đầu.
2. In giao của hai set: Sử dụng hàm print() để in giao của hai
set ra màn hình.

Bổ sung
Cách giải khác:

Sử dụng hàm intersection() để tìm giao của hai set.


set_intersection = set1.intersection(set2)

Tóm tắt
Trong Python, set là một cấu trúc dữ liệu không có thứ tự và
không chứa các phần tử trùng lặp.
Bạn có thể tìm giao của hai set bằng cách sử dụng phép toán &
hoặc hàm intersection().
Giao của hai set là một set mới chứa các phần tử xuất hiện
trong cả hai set ban đầu.

Chương trình Python này tìm giao của hai set đã khởi tạo bằng
cách sử dụng phép toán &.
058 - Viết chương trình để tìm phần
bù của hai set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm phần bù của hai
set trong Python. Phần bù của hai set A và B (đôi khi còn được gọi
là hiệu của hai set) là một set mới chứa các phần tử chỉ xuất hiện
trong set A nhưng không xuất hiện trong set B.

Thuật toán giải quyết


Đầu vào: Hai set ban đầu.

Đầu ra: Phần bù của hai set.

Các bước thực hiện:

1. Sử dụng hai set đã khởi tạo từ đoạn code trước.


2. Tìm phần bù của hai set bằng cách sử dụng phép toán - hoặc
hàm difference().

Code Python
# Khởi tạo hai set ban đầu
set1 = {'apple', 'banana', 'cherry'}
set2 = {'banana', 'cherry', 'durian'}
print("Set 1:", set1)
print("Set 2:", set2)

# Tìm phần bù của hai set


set_difference = set1 - set2
print("Phần bù của hai set:", set_difference)
Giải thích code
1. Tìm phần bù của hai set: Sử dụng phép toán - để tìm phần bù
của hai set. Phần bù của hai set A và B là một set mới chứa
các phần tử chỉ xuất hiện trong set A nhưng không xuất hiện
trong set B.
2. In phần bù của hai set: Sử dụng hàm print() để in phần bù
của hai set ra màn hình.

Bổ sung
Cách giải khác:

Sử dụng hàm difference() để tìm phần bù của hai set.


set_difference = set1.difference(set2)

Tóm tắt
Trong Python, set là một cấu trúc dữ liệu không có thứ tự và
không chứa các phần tử trùng lặp.
Bạn có thể tìm phần bù của hai set bằng cách sử dụng phép
toán - hoặc hàm difference().
Phần bù của hai set A và B là một set mới chứa các phần tử chỉ
xuất hiện trong set A nhưng không xuất hiện trong set B.

Chương trình Python này tìm phần bù của hai set đã khởi tạo bằng
cách sử dụng phép toán -.
059 - Viết chương trình để xóa tất cả
các phần tử trong set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để xóa tất cả các phần tử
trong một set trong Python.

Thuật toán giải quyết


Đầu vào: Một set ban đầu.

Đầu ra: set sau khi đã xóa tất cả các phần tử.

Các bước thực hiện:

1. Khởi tạo một set.


2. Xóa tất cả các phần tử trong set bằng cách sử dụng hàm
clear().

Code Python
# Khởi tạo set
set1 = {1, 2, 3, 4, 5}
print("Set ban đầu:", set1)

# Xóa tất cả các phần tử trong set


set1.clear()
print("Set sau khi xóa tất cả các phần tử:", set1)
Giải thích code
1. Khởi tạo set: Sử dụng {} để khởi tạo một set mới với các phần
tử là 1, 2, 3, 4, 5.
2. In set ban đầu: Sử dụng hàm print() để in set ban đầu ra màn
hình.
3. Xóa tất cả các phần tử trong set: Sử dụng hàm clear() để
xóa tất cả các phần tử trong set.
4. In set sau khi xóa tất cả các phần tử: Sử dụng hàm print()
để in set sau khi đã xóa tất cả các phần tử ra màn hình.

Bổ sung
Cách giải khác:

Sử dụng vòng lặp for và phương thức remove() để xóa từng


phần tử trong set.
for item in list(set1):
set1.remove(item)

Lưu ý: Trong trường hợp này, chúng ta cần chuyển set thành list
trước khi thực hiện vòng lặp for để tránh lỗi RuntimeError: Set
changed size during iteration - lỗi này xảy ra khi kích thước của
set thay đổi trong quá trình lặp.

Tóm tắt
Trong Python, set là một cấu trúc dữ liệu không có thứ tự và
không chứa các phần tử trùng lặp.
Bạn có thể xóa tất cả các phần tử trong một set bằng cách sử
dụng hàm clear() hoặc vòng lặp for kết hợp với phương thức
remove().
Chương trình Python này xóa tất cả các phần tử trong một set đã
khởi tạo bằng cách sử dụng hàm clear() hoặc vòng lặp for kết hợp
với phương thức remove().
060 - Viết chương trình để chuyển đổi
một danh sách thành set

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để chuyển đổi một danh
sách (list) thành một tập hợp (set) trong Python.

Thuật toán giải quyết


Đầu vào: Một danh sách (list) ban đầu.

Đầu ra: Một tập hợp (set) sau khi chuyển đổi từ danh sách.

Các bước thực hiện:

1. Khởi tạo một danh sách.


2. Chuyển đổi danh sách thành tập hợp bằng cách sử dụng hàm
set().

Code Python
# Khởi tạo danh sách
list1 = [1, 2, 3, 4, 5]
print("Danh sách ban đầu:", list1)

# Chuyển đổi danh sách thành set


set1 = set(list1)
print("Set sau khi chuyển đổi từ danh sách:", set1)
Giải thích code
1. Khởi tạo danh sách: Sử dụng [] để khởi tạo một danh sách
mới với các phần tử là 1, 2, 3, 4, 5.
2. In danh sách ban đầu: Sử dụng hàm print() để in danh sách
ban đầu ra màn hình.
3. Chuyển đổi danh sách thành set: Sử dụng hàm set() để
chuyển đổi danh sách thành set.
4. In set sau khi chuyển đổi từ danh sách: Sử dụng hàm
print() để in set sau khi chuyển đổi từ danh sách ra màn hình.

Bổ sung
Cách giải khác:

Tạo một set rỗng và sử dụng vòng lặp for để thêm từng phần tử
của danh sách vào set.
# Khởi tạo set rỗng
set1 = set()

# Duyệt qua từng phần tử của danh sách và thêm vào set
for item in list1:
set1.add(item)

Lưu ý: Trong trường hợp này, chúng ta sử dụng phương thức add()
để thêm từng phần tử của danh sách vào set. Phương thức add()
thêm một phần tử vào set. Nếu phần tử đã tồn tại trong set, nó
không thêm phần tử đó.

Tóm tắt
Trong Python, bạn có thể chuyển đổi một danh sách thành một
tập hợp bằng cách sử dụng hàm set() hoặc tạo một set rỗng và
sử dụng vòng lặp for để thêm từng phần tử của danh sách vào
set.
Hàm set() tạo một tập hợp mới từ các phần tử trong danh sách.
Nếu danh sách chứa các phần tử trùng lặp, chúng sẽ bị loại bỏ
khi chuyển đổi thành tập hợp vì tập hợp không chứa các phần tử
trùng lặp.

Chương trình Python này chuyển đổi một danh sách đã khởi tạo
thành một tập hợp bằng cách sử dụng hàm set() hoặc tạo một set
rỗng và sử dụng vòng lặp for để thêm từng phần tử của danh sách
vào set.
Chương 7 : Chuỗi
61. Viết chương trình để tạo một chuỗi.
62. Viết chương trình để nối hai chuỗi.
63. Viết chương trình để lấy độ dài của chuỗi.
64. Viết chương trình để chuyển đổi chuỗi thành chữ hoa.
65. Viết chương trình để chuyển đổi chuỗi thành chữ thường.
66. Viết chương trình để đếm số lần xuất hiện của một ký tự trong
chuỗi.
67. Viết chương trình để kiểm tra một chuỗi có chứa một từ không.
68. Viết chương trình để thay thế một từ trong chuỗi bằng từ khác.
69. Viết chương trình để tách chuỗi thành danh sách các từ.
70. Viết chương trình để nối các từ thành một chuỗi.
061 - Viết chương trình để tạo một
chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tạo một chuỗi trong
Python.

Thuật toán giải quyết


Đầu vào: Không có.

Đầu ra: Một chuỗi.

Các bước thực hiện:

1. Tạo một chuỗi.

Code Python
# Tạo một chuỗi
str1 = "Hello, World!"
print(str1)

Giải thích code


1. Tạo một chuỗi: Sử dụng dấu ngoặc kép "" hoặc dấu ngoặc đơn
'' để tạo một chuỗi mới với nội dung là “Hello, World!”.
2. In chuỗi: Sử dụng hàm print() để in chuỗi ra màn hình.
Bổ sung
Trong Python, bạn có thể tạo chuỗi bằng nhiều cách khác nhau:

1. Sử dụng dấu ngoặc kép hoặc ngoặc đơn: Đây là cách đơn
giản nhất để tạo một chuỗi.
str1 = "Hello, World!"
str2 = 'Hello, World!'

2. Sử dụng ba dấu ngoặc kép hoặc ngoặc đơn: Điều này cho
phép bạn tạo chuỗi nhiều dòng.
str3 = """Hello,
World!"""
str4 = '''Hello,
World!'''

3. Sử dụng hàm str(): Hàm này chuyển đổi một đối tượng thành
chuỗi.
num = 123
str5 = str(num) # '123'

4. Nối chuỗi: Bạn có thể nối nhiều chuỗi lại với nhau bằng cách sử
dụng toán tử +.
str6 = "Hello, " + "World!"

5. Sử dụng f-string: Trong Python 3.6 trở lên, bạn có thể sử dụng
f-string để tạo chuỗi.
name = "World"
str7 = f"Hello, {name}!"

6. Sử dụng phương thức format(): Đây là một cách khác để tạo


chuỗi có chứa các biến.
name = "World"
str8 = "Hello, {}!".format(name)

Tóm tắt
Trong Python, bạn có thể tạo một chuỗi bằng cách sử dụng dấu
ngoặc kép "" hoặc dấu ngoặc đơn ''.
Hàm print() được sử dụng để in chuỗi ra màn hình.

Chương trình Python này tạo một chuỗi mới và in chuỗi đó ra màn
hình.
062 - Viết chương trình để nối hai
chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để nối hai chuỗi trong
Python.

Thuật toán giải quyết


Đầu vào: Hai chuỗi.

Đầu ra: Một chuỗi sau khi nối.

Các bước thực hiện:

1. Tạo hai chuỗi.


2. Nối hai chuỗi lại với nhau.

Code Python
# Tạo hai chuỗi
str1 = "Hello, "
str2 = "World!"

# Nối hai chuỗi


str3 = str1 + str2
print(str3)

Giải thích code


1. Tạo hai chuỗi: Sử dụng dấu ngoặc kép "" hoặc dấu ngoặc đơn
'' để tạo hai chuỗi mới với nội dung là “Hello,” và “World!”.
2. Nối hai chuỗi: Sử dụng toán tử + để nối hai chuỗi lại với nhau.
3. In chuỗi sau khi nối: Sử dụng hàm print() để in chuỗi sau khi
nối ra màn hình.

Bổ sung
Cách giải khác:

Sử dụng phương thức join() để nối hai chuỗi.


# Tạo hai chuỗi
str1 = "Hello, "
str2 = "World!"

# Nối hai chuỗi


str3 = ''.join([str1, str2])
print(str3)

Sử dụng f-string để nối hai chuỗi.


# Tạo hai chuỗi
str1 = "Hello, "
str2 = "World!"

# Nối hai chuỗi


str3 = f"{str1}{str2}"
print(str3)

Sử dụng phương thức format() để nối hai chuỗi.


# Tạo hai chuỗi
str1 = "Hello, "
str2 = "World!"

# Nối hai chuỗi


str3 = "{}{}".format(str1, str2)
print(str3)
Tóm tắt
Trong Python, bạn có thể nối hai chuỗi bằng cách sử dụng toán
tử +, phương thức join(), f-string hoặc phương thức format().
Hàm print() được sử dụng để in chuỗi sau khi nối ra màn hình.

Chương trình Python này tạo hai chuỗi mới và nối chúng lại với
nhau bằng cách sử dụng toán tử +, phương thức join(), f-string
hoặc phương thức format().
063 - Viết chương trình để lấy độ dài
của chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy độ dài của một
chuỗi trong Python.

Thuật toán giải quyết


Đầu vào: Một chuỗi.

Đầu ra: Độ dài của chuỗi.

Các bước thực hiện:

1. Tạo một chuỗi.


2. Lấy độ dài của chuỗi.

Code Python
# Tạo một chuỗi
str1 = "Hello, World!"

# Lấy độ dài của chuỗi


length = len(str1)
print(length)

Giải thích code


1. Tạo một chuỗi: Sử dụng dấu ngoặc kép "" hoặc dấu ngoặc đơn
'' để tạo một chuỗi mới với nội dung là “Hello, World!”.
2. Lấy độ dài của chuỗi: Sử dụng hàm len() để lấy độ dài của
chuỗi.
3. In độ dài của chuỗi: Sử dụng hàm print() để in độ dài của
chuỗi ra màn hình.

Bổ sung
Cách giải khác:

Sử dụng vòng lặp for để đếm số lượng ký tự trong chuỗi.


# Tạo một chuỗi
str1 = "Hello, World!"

# Lấy độ dài của chuỗi


length = 0
for char in str1:
length += 1
print(length)

Tóm tắt
Trong Python, bạn có thể lấy độ dài của một chuỗi bằng cách sử
dụng hàm len() hoặc sử dụng vòng lặp for để đếm số lượng ký
tự trong chuỗi.
Hàm print() được sử dụng để in độ dài của chuỗi ra màn hình.

Chương trình Python này tạo một chuỗi mới và lấy độ dài của chuỗi
bằng cách sử dụng hàm len() hoặc sử dụng vòng lặp for để đếm
số lượng ký tự trong chuỗi.
064 - Viết chương trình để chuyển đổi
chuỗi thành chữ hoa

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để chuyển đổi một chuỗi
thành chữ hoa. Bạn có thể sử dụng phương thức upper() của chuỗi
trong Python để thực hiện việc này.

Thuật toán giải quyết


Để chuyển đổi một chuỗi thành chữ hoa:

1. Nhập vào một chuỗi.


2. Sử dụng phương thức upper() để chuyển đổi chuỗi thành chữ
hoa.
3. In chuỗi sau khi chuyển đổi.

Code Python
# Nhập vào một chuỗi
input_str = "hello world"
print("Chuỗi ban đầu:", input_str)

# Chuyển đổi chuỗi thành chữ hoa


upper_str = input_str.upper()
print("Chuỗi sau khi chuyển đổi thành chữ hoa:", upper_str)

Giải thích code


1. Nhập vào một chuỗi:
Khởi tạo một chuỗi ban đầu input_str với giá trị “hello
world”.

2. In chuỗi ban đầu:

Sử dụng hàm print() để in chuỗi ban đầu ra màn hình.

3. Chuyển đổi chuỗi thành chữ hoa:

Sử dụng phương thức upper() để chuyển đổi chuỗi


input_str thành chữ hoa và lưu kết quả vào biến upper_str.

4. In chuỗi sau khi chuyển đổi:

Sử dụng hàm print() để in chuỗi upper_str sau khi đã


chuyển đổi thành chữ hoa.

Tóm tắt
1. Chuỗi: Một cấu trúc dữ liệu trong Python cho phép lưu trữ và xử
lý văn bản. Chuỗi trong Python là bất biến, nghĩa là không thể
thay đổi sau khi đã được khởi tạo.
2. Phương thức upper(): Dùng để chuyển đổi tất cả các ký tự
trong chuỗi thành chữ hoa.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách chuyển đổi một chuỗi thành chữ
hoa bằng cách sử dụng phương thức upper() và in ra kết quả trong
Python.
065 - Viết chương trình để chuyển đổi
chuỗi thành chữ thường

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để chuyển đổi một chuỗi
thành chữ thường trong Python.

Thuật toán giải quyết


Đầu vào: Một chuỗi.

Đầu ra: Chuỗi sau khi chuyển đổi thành chữ thường.

Các bước thực hiện:

1. Tạo một chuỗi.


2. Chuyển đổi chuỗi thành chữ thường.

Code Python
# Tạo một chuỗi
str1 = "Hello, World!"

# Chuyển đổi chuỗi thành chữ thường


lowercase_str = str1.lower()
print(lowercase_str)

Giải thích code


1. Tạo một chuỗi: Sử dụng dấu ngoặc kép "" hoặc dấu ngoặc đơn
'' để tạo một chuỗi mới với nội dung là “Hello, World!”.
2. Chuyển đổi chuỗi thành chữ thường: Sử dụng phương thức
lower() của chuỗi để chuyển đổi tất cả các ký tự trong chuỗi
thành chữ thường.
3. In chuỗi sau khi chuyển đổi: Sử dụng hàm print() để in chuỗi
sau khi chuyển đổi ra màn hình.

Bổ sung
Cách giải khác:

Sử dụng vòng lặp for và hàm ord() để chuyển đổi từng ký tự


trong chuỗi thành chữ thường.
# Tạo một chuỗi
str1 = "Hello, World!"

# Chuyển đổi chuỗi thành chữ thường


lowercase_str = ""
for char in str1:
if 'A' <= char <= 'Z':
lowercase_str += chr(ord(char) + 32)
else:
lowercase_str += char
print(lowercase_str)

Tóm tắt
Trong Python, bạn có thể chuyển đổi một chuỗi thành chữ
thường bằng cách sử dụng phương thức lower() của chuỗi
hoặc sử dụng vòng lặp for và hàm ord() để chuyển đổi từng ký
tự trong chuỗi thành chữ thường.
Hàm print() được sử dụng để in chuỗi sau khi chuyển đổi ra
màn hình.

Chương trình Python này tạo một chuỗi mới và chuyển đổi chuỗi đó
thành chữ thường bằng cách sử dụng phương thức lower() của
chuỗi hoặc sử dụng vòng lặp for và hàm ord() để chuyển đổi từng
ký tự trong chuỗi thành chữ thường.
066 - Viết chương trình để đếm số lần
xuất hiện của một ký tự trong chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số lần xuất hiện
của một ký tự trong một chuỗi. Bạn có thể sử dụng phương thức
count() của chuỗi trong Python để thực hiện việc này.

Thuật toán giải quyết


Để đếm số lần xuất hiện của một ký tự trong một chuỗi:

1. Nhập vào một chuỗi.


2. Nhập vào ký tự cần đếm.
3. Sử dụng phương thức count() để đếm số lần xuất hiện của ký
tự trong chuỗi.
4. In kết quả đếm.

Code Python
# Nhập vào một chuỗi
input_str = "hello world"
print("Chuỗi ban đầu:", input_str)

# Nhập vào ký tự cần đếm


char_to_count = 'l'
print("Ký tự cần đếm:", char_to_count)

# Đếm số lần xuất hiện của ký tự trong chuỗi


count = input_str.count(char_to_count)
print(f"Số lần xuất hiện của ký tự '{char_to_count}' trong
chuỗi: {count}")
Giải thích code
1. Nhập vào một chuỗi:

Khởi tạo một chuỗi ban đầu input_str với giá trị “hello
world”.

2. In chuỗi ban đầu:

Sử dụng hàm print() để in chuỗi ban đầu ra màn hình.

3. Nhập vào ký tự cần đếm:

Khởi tạo một biến char_to_count với ký tự cần đếm, ở đây là


'l'.

4. In ký tự cần đếm:

Sử dụng hàm print() để in ký tự cần đếm ra màn hình.

5. Đếm số lần xuất hiện của ký tự trong chuỗi:

Sử dụng phương thức count() của chuỗi để đếm số lần xuất


hiện của ký tự char_to_count trong chuỗi input_str.
Lưu kết quả vào biến count.

6. In kết quả đếm:

Sử dụng hàm print() để in kết quả đếm số lần xuất hiện


của ký tự trong chuỗi.

Tóm tắt
1. Chuỗi: Một cấu trúc dữ liệu trong Python cho phép lưu trữ và xử
lý văn bản. Chuỗi trong Python là bất biến, nghĩa là không thể
thay đổi sau khi đã được khởi tạo.
2. Phương thức count(): Dùng để đếm số lần xuất hiện của một
ký tự hoặc một chuỗi con trong chuỗi gốc.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách đếm số lần xuất hiện của một ký
tự trong một chuỗi bằng cách sử dụng phương thức count() và in ra
kết quả trong Python.
067 - Viết chương trình để kiểm tra
một chuỗi có chứa một từ không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một
chuỗi có chứa một từ cụ thể không trong Python.

Thuật toán giải quyết


Đầu vào: Một chuỗi và một từ cần kiểm tra.

Đầu ra: True nếu chuỗi chứa từ cần kiểm tra, False nếu ngược lại.

Các bước thực hiện:

1. Tạo một chuỗi và một từ cần kiểm tra.


2. Kiểm tra xem chuỗi có chứa từ cần kiểm tra không.

Code Python
# Tạo một chuỗi và một từ cần kiểm tra
str1 = "Hello, World!"
word = "World"

# Kiểm tra xem chuỗi có chứa từ cần kiểm tra không


contains_word = word in str1
print(contains_word)

Giải thích code


1. Tạo một chuỗi và một từ cần kiểm tra: Sử dụng dấu ngoặc
kép "" hoặc dấu ngoặc đơn '' để tạo một chuỗi mới và một từ
cần kiểm tra.
2. Kiểm tra xem chuỗi có chứa từ cần kiểm tra không: Sử dụng
toán tử in để kiểm tra xem từ cần kiểm tra có nằm trong chuỗi
không.
3. In kết quả: Sử dụng hàm print() để in kết quả ra màn hình.

Bổ sung
Cách giải khác:

Sử dụng phương thức find() của chuỗi để kiểm tra xem từ cần
kiểm tra có nằm trong chuỗi không.
# Tạo một chuỗi và một từ cần kiểm tra
str1 = "Hello, World!"
word = "World"

# Kiểm tra xem chuỗi có chứa từ cần kiểm tra không


contains_word = str1.find(word) != -1
print(contains_word)

Tóm tắt
Trong Python, bạn có thể kiểm tra xem một chuỗi có chứa một
từ cụ thể không bằng cách sử dụng toán tử in hoặc phương
thức find() của chuỗi.
Hàm print() được sử dụng để in kết quả ra màn hình.

Chương trình Python này tạo một chuỗi mới và một từ cần kiểm tra,
sau đó kiểm tra xem từ cần kiểm tra có nằm trong chuỗi không bằng
cách sử dụng toán tử in hoặc phương thức find() của chuỗi.
068 - Viết chương trình để thay thế
một từ trong chuỗi bằng từ khác

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để thay thế một từ trong
chuỗi bằng một từ khác. Bạn có thể sử dụng phương thức
replace() của chuỗi trong Python để thực hiện việc này.

Thuật toán giải quyết


Để thay thế một từ trong chuỗi bằng một từ khác:

1. Nhập vào một chuỗi.


2. Nhập vào từ cần thay thế.
3. Nhập vào từ thay thế.
4. Sử dụng phương thức replace() để thay thế từ trong chuỗi.
5. In chuỗi sau khi thay thế.

Code Python
# Nhập vào một chuỗi
input_str = "Hello world, welcome to the world of Python."
print("Chuỗi ban đầu:", input_str)

# Nhập vào từ cần thay thế


word_to_replace = "world"
print("Từ cần thay thế:", word_to_replace)

# Nhập vào từ thay thế


replacement_word = "universe"
print("Từ thay thế:", replacement_word)

# Thay thế từ trong chuỗi


new_str = input_str.replace(word_to_replace,
replacement_word)
print("Chuỗi sau khi thay thế:", new_str)

Giải thích code


1. Nhập vào một chuỗi:

Khởi tạo một chuỗi ban đầu input_str với giá trị “Hello
world, welcome to the world of Python.”

2. In chuỗi ban đầu:

Sử dụng hàm print() để in chuỗi ban đầu ra màn hình.

3. Nhập vào từ cần thay thế:

Khởi tạo một biến word_to_replace với từ cần thay thế, ở


đây là “world”.

4. In từ cần thay thế:

Sử dụng hàm print() để in từ cần thay thế ra màn hình.

5. Nhập vào từ thay thế:

Khởi tạo một biến replacement_word với từ thay thế, ở đây là


“universe”.

6. In từ thay thế:

Sử dụng hàm print() để in từ thay thế ra màn hình.

7. Thay thế từ trong chuỗi:

Sử dụng phương thức replace() của chuỗi để thay thế tất


cả các từ word_to_replace bằng replacement_word trong
chuỗi input_str.
Lưu kết quả vào biến new_str.

8. In chuỗi sau khi thay thế:

Sử dụng hàm print() để in chuỗi new_str sau khi đã thay


thế từ.

Tóm tắt
1. Chuỗi: Một cấu trúc dữ liệu trong Python cho phép lưu trữ và xử
lý văn bản. Chuỗi trong Python là bất biến, nghĩa là không thể
thay đổi sau khi đã được khởi tạo.
2. Phương thức replace(): Dùng để thay thế tất cả các lần xuất
hiện của một chuỗi con (có thể là một từ) trong chuỗi gốc bằng
một chuỗi con khác.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách thay thế một từ trong chuỗi bằng
một từ khác bằng cách sử dụng phương thức replace() và in ra kết
quả trong Python.
069 - Viết chương trình để tách chuỗi
thành danh sách các từ

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tách một chuỗi thành
danh sách các từ. Bạn có thể sử dụng phương thức split() của
chuỗi trong Python để thực hiện việc này. Ngoài ra, bạn có thể tách
chuỗi theo các dấu phân cách khác nhau như khoảng trắng, dấu
phẩy, dấu chấm, v.v.

Thuật toán giải quyết


Để tách một chuỗi thành danh sách các từ:

1. Nhập vào một chuỗi.


2. Sử dụng phương thức split() để tách chuỗi thành danh sách
các từ dựa trên khoảng trắng.
3. In danh sách các từ.

Code Python
# Nhập vào một chuỗi
input_str = "Hello world, welcome to the world of Python."
print("Chuỗi ban đầu:", input_str)

# Tách chuỗi thành danh sách các từ bằng khoảng trắng


words_list = input_str.split()
print("Danh sách các từ (tách bằng khoảng trắng):",
words_list)
Các cách giải khác
Ngoài cách tách chuỗi bằng khoảng trắng, bạn có thể tách chuỗi
bằng các dấu phân cách khác nhau bằng cách chỉ định ký tự phân
cách trong phương thức split().

Tách chuỗi bằng dấu phẩy


# Tách chuỗi bằng dấu phẩy
input_str_comma = "apple,banana,orange,grape"
print("Chuỗi ban đầu:", input_str_comma)

words_list_comma = input_str_comma.split(',')
print("Danh sách các từ (tách bằng dấu phẩy):",
words_list_comma)

Tách chuỗi bằng dấu chấm


# Tách chuỗi bằng dấu chấm
input_str_dot = "This.is.a.sample.sentence."
print("Chuỗi ban đầu:", input_str_dot)

words_list_dot = input_str_dot.split('.')
print("Danh sách các từ (tách bằng dấu chấm):",
words_list_dot)

Giải thích code


1. Nhập vào một chuỗi:

Khởi tạo một chuỗi ban đầu input_str với giá trị “Hello
world, welcome to the world of Python.”

2. In chuỗi ban đầu:

Sử dụng hàm print() để in chuỗi ban đầu ra màn hình.

3. Tách chuỗi thành danh sách các từ bằng khoảng trắng:


Sử dụng phương thức split() không có tham số để tách
chuỗi input_str thành danh sách các từ dựa trên khoảng
trắng.
Lưu kết quả vào biến words_list.

4. In danh sách các từ:

Sử dụng hàm print() để in danh sách các từ words_list


sau khi tách.

Các cách giải khác:

1. Tách chuỗi bằng dấu phẩy:

Sử dụng phương thức split(',') để tách chuỗi


input_str_comma thành danh sách các từ dựa trên dấu phẩy.
In kết quả danh sách các từ words_list_comma.

2. Tách chuỗi bằng dấu chấm:

Sử dụng phương thức split('.') để tách chuỗi


input_str_dot thành danh sách các từ dựa trên dấu chấm.
In kết quả danh sách các từ words_list_dot.

Tóm tắt
1. Chuỗi: Một cấu trúc dữ liệu trong Python cho phép lưu trữ và xử
lý văn bản. Chuỗi trong Python là bất biến, nghĩa là không thể
thay đổi sau khi đã được khởi tạo.
2. Phương thức split(): Dùng để tách chuỗi thành danh sách
các từ. Mặc định tách theo khoảng trắng, nhưng có thể chỉ định
ký tự phân cách khác.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách tách một chuỗi thành danh sách
các từ bằng cách sử dụng phương thức split() và in ra kết quả
trong Python. Ngoài ra, nó còn minh họa cách tách chuỗi bằng các
dấu phân cách khác như dấu phẩy và dấu chấm.
070 - Viết chương trình để nối các từ
thành một chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để nối các từ trong một
danh sách thành một chuỗi duy nhất. Bạn có thể sử dụng phương
thức join() của chuỗi trong Python để thực hiện việc này.

Thuật toán giải quyết


Để nối các từ thành một chuỗi:

1. Nhập vào một danh sách các từ.


2. Sử dụng phương thức join() để nối các từ trong danh sách
thành một chuỗi duy nhất, sử dụng một ký tự phân cách (ví dụ:
khoảng trắng).
3. In chuỗi sau khi nối.

Code Python
# Nhập vào một danh sách các từ
words_list = ["Hello", "world", "welcome", "to", "Python"]
print("Danh sách các từ:", words_list)

# Nối các từ thành một chuỗi bằng khoảng trắng


joined_str = ' '.join(words_list)
print("Chuỗi sau khi nối:", joined_str)

Giải thích code


1. Nhập vào một danh sách các từ:
Khởi tạo một danh sách words_list với các từ [“Hello”,
“world”, “welcome”, “to”, “Python”].

2. In danh sách các từ:

Sử dụng hàm print() để in danh sách các từ ra màn hình.

3. Nối các từ thành một chuỗi:

Sử dụng phương thức ' '.join(words_list) để nối các từ


trong danh sách words_list thành một chuỗi duy nhất, sử
dụng khoảng trắng làm ký tự phân cách.
Lưu kết quả vào biến joined_str.

4. In chuỗi sau khi nối:

Sử dụng hàm print() để in chuỗi joined_str sau khi đã nối.

Các cách giải khác


Bạn có thể sử dụng các ký tự phân cách khác nhau để nối các từ
trong danh sách.

Nối các từ bằng dấu phẩy


# Nối các từ bằng dấu phẩy
joined_str_comma = ', '.join(words_list)
print("Chuỗi sau khi nối bằng dấu phẩy:", joined_str_comma)

Nối các từ bằng dấu chấm phẩy


# Nối các từ bằng dấu chấm phẩy
joined_str_semicolon = '; '.join(words_list)
print("Chuỗi sau khi nối bằng dấu chấm phẩy:",
joined_str_semicolon)
Tóm tắt
1. Danh sách: Một cấu trúc dữ liệu trong Python cho phép lưu trữ
một tập hợp các phần tử có thứ tự và có thể thay đổi được.
2. Phương thức join(): Dùng để nối các phần tử của một danh
sách thành một chuỗi duy nhất, sử dụng một chuỗi làm ký tự
phân cách.
3. Hàm print(): Dùng để in dữ liệu ra màn hình.

Chương trình trên minh họa cách nối các từ trong một danh sách
thành một chuỗi bằng cách sử dụng phương thức join() và in ra kết
quả trong Python. Ngoài ra, nó còn minh họa cách sử dụng các ký
tự phân cách khác nhau như khoảng trắng, dấu phẩy, và dấu chấm
phẩy để nối các từ.
Chương 8 : File I/O
71. Viết chương trình để đọc nội dung của một file văn bản.
72. Viết chương trình để ghi nội dung vào một file văn bản.
73. Viết chương trình để đếm số dòng trong một file văn bản.
74. Viết chương trình để đếm số từ trong một file văn bản.
75. Viết chương trình để đếm số ký tự trong một file văn bản.
76. Viết chương trình để kiểm tra một file có tồn tại không.
77. Viết chương trình để xóa một file văn bản.
78. Viết chương trình để đọc file theo từng dòng.
79. Viết chương trình để ghi thêm nội dung vào cuối file.
80. Viết chương trình để sao chép nội dung của một file sang file
khác.
071 - Viết chương trình để đọc nội
dung của một file văn bản

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đọc nội dung của một
file văn bản. Bạn có thể sử dụng hàm open() trong Python để mở
file và phương thức read() để đọc nội dung của file.

Thuật toán giải quyết


Để đọc nội dung của một file văn bản:

1. Mở file văn bản bằng hàm open() với chế độ đọc (‘r’).
2. Sử dụng phương thức read() để đọc toàn bộ nội dung của file.
3. In nội dung vừa đọc được.
4. Đóng file để giải phóng tài nguyên.

Code Python
# Đường dẫn đến file văn bản
file_path = 'example.txt'

try:
# Mở file văn bản với chế độ đọc
with open(file_path, 'r') as file:
# Đọc toàn bộ nội dung của file
content = file.read()
# In nội dung của file
print("Nội dung của file:")
print(content)
except FileNotFoundError:
print(f"Không tìm thấy file: {file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích code


1. Đường dẫn đến file văn bản:

Khởi tạo biến file_path chứa đường dẫn đến file văn bản
cần đọc, ví dụ: ‘example.txt’.

2. Mở file với chế độ đọc:

Sử dụng hàm open(file_path, 'r') để mở file với chế độ


đọc. Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc đọc.

3. Đọc toàn bộ nội dung của file:

Sử dụng phương thức read() của đối tượng file để đọc toàn
bộ nội dung của file và lưu vào biến content.

4. In nội dung của file:

Sử dụng hàm print() để in nội dung của file ra màn hình.

5. Xử lý ngoại lệ:

Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ


như FileNotFoundError nếu file không tồn tại và các ngoại lệ
khác.

Tóm tắt
1. Hàm open(): Dùng để mở file. Tham số đầu tiên là đường dẫn
đến file, tham số thứ hai là chế độ mở file (ở đây là chế độ đọc
‘r’).
2. Phương thức read(): Dùng để đọc toàn bộ nội dung của file.
3. Câu lệnh with: Dùng để đảm bảo rằng file được đóng tự động
sau khi hoàn thành thao tác đọc.
4. Xử lý ngoại lệ: Sử dụng câu lệnh try-except để bắt và xử lý
các lỗi có thể xảy ra khi làm việc với file.

Chương trình trên minh họa cách đọc nội dung của một file văn bản
bằng cách sử dụng hàm open() và phương thức read() trong
Python, đồng thời xử lý các ngoại lệ có thể xảy ra.
072 - Viết chương trình để ghi nội
dung vào một file văn bản

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để ghi nội dung vào một
file văn bản. Bạn có thể sử dụng hàm open() trong Python để mở
file với chế độ ghi và phương thức write() để ghi nội dung vào file.

Thuật toán giải quyết


Để ghi nội dung vào một file văn bản:

1. Mở file văn bản bằng hàm open() với chế độ ghi (‘w’).
2. Sử dụng phương thức write() để ghi nội dung vào file.
3. Đóng file để lưu thay đổi và giải phóng tài nguyên.

Code Python
# Đường dẫn đến file văn bản
file_path = 'example_output.txt'

# Nội dung cần ghi vào file


content_to_write = "Hello, world!\nWelcome to the world of
Python programming."

try:
# Mở file văn bản với chế độ ghi
with open(file_path, 'w') as file:
# Ghi nội dung vào file
file.write(content_to_write)
# In thông báo ghi thành công
print(f"Nội dung đã được ghi vào file: {file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích code


1. Đường dẫn đến file văn bản:

Khởi tạo biến file_path chứa đường dẫn đến file văn bản
cần ghi, ví dụ: ‘example_output.txt’.

2. Nội dung cần ghi vào file:

Khởi tạo biến content_to_write chứa nội dung cần ghi vào
file, ở đây là “Hello, world!to the world of Python
programming.”

3. Mở file với chế độ ghi:

Sử dụng hàm open(file_path, 'w') để mở file với chế độ


ghi. Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc ghi.

4. Ghi nội dung vào file:

Sử dụng phương thức write() của đối tượng file để ghi nội
dung content_to_write vào file.

5. In thông báo ghi thành công:

Sử dụng hàm print() để in thông báo ghi nội dung thành


công vào file.

6. Xử lý ngoại lệ:

Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ có


thể xảy ra khi làm việc với file.
Tóm tắt
1. Hàm open(): Dùng để mở file. Tham số đầu tiên là đường dẫn
đến file, tham số thứ hai là chế độ mở file (ở đây là chế độ ghi
‘w’).
2. Phương thức write(): Dùng để ghi nội dung vào file.
3. Câu lệnh with: Dùng để đảm bảo rằng file được đóng tự động
sau khi hoàn thành thao tác ghi.
4. Xử lý ngoại lệ: Sử dụng câu lệnh try-except để bắt và xử lý
các lỗi có thể xảy ra khi làm việc với file.

Chương trình trên minh họa cách ghi nội dung vào một file văn bản
bằng cách sử dụng hàm open() và phương thức write() trong
Python, đồng thời xử lý các ngoại lệ có thể xảy ra.
073 - Viết chương trình để đếm số
dòng trong một file văn bản

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số dòng trong
một file văn bản. Bạn có thể sử dụng hàm open() trong Python để
mở file và đọc từng dòng để đếm số lượng dòng.

Thuật toán giải quyết


Để đếm số dòng trong một file văn bản:

1. Mở file văn bản bằng hàm open() với chế độ đọc (‘r’).
2. Đọc từng dòng của file và đếm số lượng dòng.
3. In số lượng dòng.

Code Python
# Đường dẫn đến file văn bản
file_path = 'example.txt'

try:
# Mở file văn bản với chế độ đọc
with open(file_path, 'r') as file:
# Đếm số lượng dòng trong file
line_count = sum(1 for line in file)
# In số lượng dòng
print(f"Số lượng dòng trong file: {line_count}")
except FileNotFoundError:
print(f"Không tìm thấy file: {file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")
Giải thích code
1. Đường dẫn đến file văn bản:

Khởi tạo biến file_path chứa đường dẫn đến file văn bản
cần đếm số dòng, ví dụ: ‘example.txt’.

2. Mở file với chế độ đọc:

Sử dụng hàm open(file_path, 'r') để mở file với chế độ


đọc. Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc đọc.

3. Đếm số lượng dòng trong file:

Sử dụng biểu thức sum(1 for line in file) để đếm số


lượng dòng trong file và lưu kết quả vào biến line_count.

4. In số lượng dòng:

Sử dụng hàm print() để in số lượng dòng ra màn hình.

5. Xử lý ngoại lệ:

Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ


như FileNotFoundError nếu file không tồn tại và các ngoại lệ
khác.

Cách giải khác


Một cách khác để đếm số dòng trong file là đọc toàn bộ nội dung file
vào một danh sách các dòng và đếm độ dài của danh sách đó.
try:
# Mở file văn bản với chế độ đọc
with open(file_path, 'r') as file:
# Đọc toàn bộ nội dung file vào một danh sách các
dòng
lines = file.readlines()
# Đếm số lượng dòng
line_count = len(lines)
# In số lượng dòng
print(f"Số lượng dòng trong file: {line_count}")
except FileNotFoundError:
print(f"Không tìm thấy file: {file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích cách giải khác


1. Đọc toàn bộ nội dung file vào một danh sách các dòng:

Sử dụng phương thức readlines() của đối tượng file để đọc


toàn bộ nội dung file và lưu vào một danh sách các dòng
lines.

2. Đếm số lượng dòng:

Sử dụng hàm len() để đếm số lượng phần tử (dòng) trong


danh sách lines và lưu kết quả vào biến line_count.

Tóm tắt
1. Hàm open(): Dùng để mở file. Tham số đầu tiên là đường dẫn
đến file, tham số thứ hai là chế độ mở file (ở đây là chế độ đọc
‘r’).
2. Phương thức readlines(): Dùng để đọc toàn bộ nội dung của
file vào một danh sách các dòng.
3. Câu lệnh with: Dùng để đảm bảo rằng file được đóng tự động
sau khi hoàn thành thao tác đọc.
4. Biểu thức generator và sum(): Dùng để đếm số lượng dòng
trong file.
5. Xử lý ngoại lệ: Sử dụng câu lệnh try-except để bắt và xử lý
các lỗi có thể xảy ra khi làm việc với file.

Chương trình trên minh họa cách đếm số dòng trong một file văn
bản bằng cách sử dụng biểu thức generator và phương thức
readlines() trong Python, đồng thời xử lý các ngoại lệ có thể xảy
ra.
074 - Viết chương trình để đếm số từ
trong một file văn bản

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số từ trong một
file văn bản. Bạn có thể sử dụng hàm open() trong Python để mở
file và đọc từng dòng, sau đó tách dòng thành các từ và đếm số
lượng từ.

Thuật toán giải quyết


Để đếm số từ trong một file văn bản:

1. Mở file văn bản bằng hàm open() với chế độ đọc (‘r’).
2. Đọc từng dòng của file.
3. Tách từng dòng thành các từ.
4. Đếm tổng số từ.
5. In số lượng từ.

Code Python
# Đường dẫn đến file văn bản
file_path = 'example.txt'

try:
# Mở file văn bản với chế độ đọc
with open(file_path, 'r') as file:
# Khởi tạo biến đếm số từ
word_count = 0
# Đọc từng dòng của file
for line in file:
# Tách dòng thành các từ và đếm số từ
words = line.split()
word_count += len(words)
# In số lượng từ
print(f"Số lượng từ trong file: {word_count}")
except FileNotFoundError:
print(f"Không tìm thấy file: {file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích code


1. Đường dẫn đến file văn bản:

Khởi tạo biến file_path chứa đường dẫn đến file văn bản
cần đếm số từ, ví dụ: ‘example.txt’.

2. Mở file với chế độ đọc:

Sử dụng hàm open(file_path, 'r') để mở file với chế độ


đọc. Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc đọc.

3. Khởi tạo biến đếm số từ:

Khởi tạo biến word_count để lưu số lượng từ, bắt đầu từ 0.

4. Đọc từng dòng của file:

Sử dụng vòng lặp for để duyệt qua từng dòng trong file.

5. Tách dòng thành các từ và đếm số từ:

Sử dụng phương thức split() để tách dòng thành các từ.


Phương thức này mặc định tách dựa trên khoảng trắng.
Sử dụng len(words) để đếm số từ trong dòng và cộng vào
word_count.
6. In số lượng từ:

Sử dụng hàm print() để in số lượng từ ra màn hình.

7. Xử lý ngoại lệ:

Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ


như FileNotFoundError nếu file không tồn tại và các ngoại lệ
khác.

Tóm tắt
1. Hàm open(): Dùng để mở file. Tham số đầu tiên là đường dẫn
đến file, tham số thứ hai là chế độ mở file (ở đây là chế độ đọc
‘r’).
2. Phương thức split(): Dùng để tách một chuỗi thành các từ
dựa trên khoảng trắng hoặc một ký tự phân cách khác.
3. Câu lệnh with: Dùng để đảm bảo rằng file được đóng tự động
sau khi hoàn thành thao tác đọc.
4. Vòng lặp for: Dùng để duyệt qua từng dòng trong file.
5. Xử lý ngoại lệ: Sử dụng câu lệnh try-except để bắt và xử lý
các lỗi có thể xảy ra khi làm việc với file.

Chương trình trên minh họa cách đếm số từ trong một file văn bản
bằng cách sử dụng phương thức split() để tách các từ và đếm
tổng số từ trong file. Đồng thời, chương trình xử lý các ngoại lệ có
thể xảy ra khi làm việc với file.
075 - Viết chương trình để đếm số ký
tự trong một file văn bản

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số ký tự trong
một file văn bản, nhưng bỏ qua các ký tự “khoảng trắng” và “xuống
dòng”. Bạn có thể sử dụng hàm open() trong Python để mở file và
đọc toàn bộ nội dung, sau đó lọc bỏ các ký tự không cần thiết và
đếm số lượng ký tự còn lại.

Thuật toán giải quyết


Để đếm số ký tự trong một file văn bản mà bỏ qua các ký tự “khoảng
trắng” và “xuống dòng”:

1. Mở file văn bản bằng hàm open() với chế độ đọc (‘r’).
2. Đọc toàn bộ nội dung của file.
3. Lọc bỏ các ký tự “khoảng trắng” và “xuống dòng”.
4. Đếm tổng số ký tự còn lại.
5. In số lượng ký tự.

Code Python
# Đường dẫn đến file văn bản
file_path = 'example.txt'

try:
# Mở file văn bản với chế độ đọc
with open(file_path, 'r') as file:
# Đọc toàn bộ nội dung của file
content = file.read()
# Lọc bỏ các ký tự khoảng trắng và xuống dòng
filtered_content = ''.join(c for c in content if c
not in (' ', '\n', '\t'))
# Đếm số lượng ký tự trong nội dung đã lọc
char_count = len(filtered_content)
# In số lượng ký tự
print(f"Số lượng ký tự trong file (bỏ qua khoảng
trắng và xuống dòng): {char_count}")
except FileNotFoundError:
print(f"Không tìm thấy file: {file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích code


1. Đường dẫn đến file văn bản:

Khởi tạo biến file_path chứa đường dẫn đến file văn bản
cần đếm số ký tự, ví dụ: ‘example.txt’.

2. Mở file với chế độ đọc:

Sử dụng hàm open(file_path, 'r') để mở file với chế độ


đọc. Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc đọc.

3. Đọc toàn bộ nội dung của file:

Sử dụng phương thức read() của đối tượng file để đọc toàn
bộ nội dung của file và lưu vào biến content.

4. Lọc bỏ các ký tự khoảng trắng và xuống dòng:

Sử dụng một biểu thức tạo chuỗi mới ''.join(c for c in


content if c not in (' ', '\n', '\t')) để lọc bỏ các ký
tự không cần thiết và tạo một chuỗi mới filtered_content
chứa các ký tự cần đếm.
5. Đếm số lượng ký tự trong nội dung đã lọc:

Sử dụng hàm len() để đếm số lượng ký tự trong chuỗi


filtered_content và lưu kết quả vào biến char_count.

6. In số lượng ký tự:

Sử dụng hàm print() để in số lượng ký tự ra màn hình.

7. Xử lý ngoại lệ:

Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ


như FileNotFoundError nếu file không tồn tại và các ngoại lệ
khác.

Tóm tắt
1. Hàm open(): Dùng để mở file. Tham số đầu tiên là đường dẫn
đến file, tham số thứ hai là chế độ mở file (ở đây là chế độ đọc
‘r’).
2. Phương thức read(): Dùng để đọc toàn bộ nội dung của file.
3. Biểu thức tạo chuỗi mới: Dùng để lọc bỏ các ký tự không cần
thiết (khoảng trắng, xuống dòng, tab) và tạo một chuỗi mới chứa
các ký tự cần đếm.
4. Hàm len(): Dùng để đếm số lượng ký tự trong một chuỗi.
5. Câu lệnh with: Dùng để đảm bảo rằng file được đóng tự động
sau khi hoàn thành thao tác đọc.
6. Xử lý ngoại lệ: Sử dụng câu lệnh try-except để bắt và xử lý
các lỗi có thể xảy ra khi làm việc với file.

Chương trình trên minh họa cách đếm số ký tự trong một file văn
bản bằng cách sử dụng phương thức read() để đọc toàn bộ nội
dung của file, sau đó lọc bỏ các ký tự “khoảng trắng” và “xuống
dòng” và đếm số lượng ký tự còn lại. Đồng thời, chương trình xử lý
các ngoại lệ có thể xảy ra khi làm việc với file.
076 - Viết chương trình để kiểm tra
một file có tồn tại không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một file
có tồn tại hay không. Bạn có thể sử dụng module os trong Python để
kiểm tra sự tồn tại của file.

Thuật toán giải quyết


Để kiểm tra xem một file có tồn tại hay không:

1. Sử dụng module os để kiểm tra sự tồn tại của file.


2. In ra thông báo cho biết file có tồn tại hay không.

Code Python
import os

# Đường dẫn đến file cần kiểm tra


file_path = 'example.txt'

# Kiểm tra sự tồn tại của file


if os.path.isfile(file_path):
print(f"File '{file_path}' tồn tại.")
else:
print(f"File '{file_path}' không tồn tại.")

Giải thích code


1. Import module os:
Sử dụng import os để sử dụng các hàm trong module os,
giúp làm việc với hệ thống tập tin.

2. Đường dẫn đến file cần kiểm tra:

Khởi tạo biến file_path chứa đường dẫn đến file cần kiểm
tra, ví dụ: ‘example.txt’.

3. Kiểm tra sự tồn tại của file:

Sử dụng hàm os.path.isfile(file_path) để kiểm tra xem


file có tồn tại hay không. Hàm này trả về True nếu file tồn tại,
ngược lại trả về False.

4. In ra thông báo:

Sử dụng câu lệnh if để kiểm tra kết quả của


os.path.isfile(file_path).
Nếu file tồn tại, in ra thông báo “File ‘example.txt’ tồn tại.”.
Nếu file không tồn tại, in ra thông báo “File ‘example.txt’
không tồn tại.”.

Tóm tắt
1. Module os: Cung cấp các hàm để tương tác với hệ thống tập tin
và thư mục.
2. Hàm os.path.isfile(): Dùng để kiểm tra xem một đường dẫn
có phải là file và file đó có tồn tại hay không.
3. Câu lệnh if-else: Dùng để kiểm tra điều kiện và thực hiện các
hành động tương ứng.

Chương trình trên minh họa cách kiểm tra sự tồn tại của một file
bằng cách sử dụng hàm os.path.isfile() và in ra thông báo phù
hợp dựa trên kết quả kiểm tra.
077 - Viết chương trình để xóa một file
văn bản

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để xóa một file văn bản.
Bạn có thể sử dụng module os trong Python để xóa file.

Thuật toán giải quyết


Để xóa một file văn bản:

1. Sử dụng module os để kiểm tra sự tồn tại của file.


2. Sử dụng hàm os.remove() để xóa file nếu file tồn tại.
3. In ra thông báo xác nhận rằng file đã được xóa hoặc không tồn
tại.

Code Python
import os

# Đường dẫn đến file cần xóa


file_path = 'example.txt'

try:
# Kiểm tra sự tồn tại của file
if os.path.isfile(file_path):
# Xóa file
os.remove(file_path)
print(f"File '{file_path}' đã được xóa.")
else:
print(f"File '{file_path}' không tồn tại.")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")
Giải thích code
1. Import module os:

Sử dụng import os để sử dụng các hàm trong module os,


giúp làm việc với hệ thống tập tin.

2. Đường dẫn đến file cần xóa:

Khởi tạo biến file_path chứa đường dẫn đến file cần xóa, ví
dụ: ‘example.txt’.

3. Kiểm tra sự tồn tại của file:

Sử dụng hàm os.path.isfile(file_path) để kiểm tra xem


file có tồn tại hay không. Hàm này trả về True nếu file tồn tại,
ngược lại trả về False.

4. Xóa file nếu tồn tại:

Nếu file tồn tại (if os.path.isfile(file_path)), sử dụng


hàm os.remove(file_path) để xóa file.
In ra thông báo “File ‘example.txt’ đã được xóa.” nếu file
được xóa thành công.

5. Xử lý trường hợp file không tồn tại:

Nếu file không tồn tại, in ra thông báo “File ‘example.txt’


không tồn tại.”

6. Xử lý ngoại lệ:

Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ có


thể xảy ra khi xóa file. Ví dụ: nếu file đang được sử dụng bởi
một chương trình khác hoặc nếu không có quyền xóa file.
Tóm tắt
1. Module os: Cung cấp các hàm để tương tác với hệ thống tập tin
và thư mục.
2. Hàm os.path.isfile(): Dùng để kiểm tra xem một đường dẫn
có phải là file và file đó có tồn tại hay không.
3. Hàm os.remove(): Dùng để xóa file khỏi hệ thống.
4. Câu lệnh try-except: Dùng để bắt và xử lý các lỗi có thể xảy ra
khi làm việc với file.

Chương trình trên minh họa cách xóa một file văn bản bằng cách sử
dụng hàm os.remove() sau khi kiểm tra sự tồn tại của file với hàm
os.path.isfile(). Chương trình cũng xử lý các ngoại lệ có thể xảy
ra trong quá trình xóa file.
078 - Viết chương trình để đọc file
theo từng dòng

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đọc file văn bản theo
từng dòng. Bạn có thể sử dụng hàm open() trong Python để mở file
và phương thức readline() hoặc lặp qua file object để đọc từng
dòng.

Thuật toán giải quyết


Để đọc file văn bản theo từng dòng:

1. Mở file văn bản bằng hàm open() với chế độ đọc (‘r’).
2. Sử dụng vòng lặp for để lặp qua từng dòng trong file object.
3. In từng dòng ra màn hình.

Code Python
# Đường dẫn đến file văn bản
file_path = 'example.txt'

try:
# Mở file văn bản với chế độ đọc
with open(file_path, 'r') as file:
# Lặp qua từng dòng trong file
for line in file:
# In từng dòng ra màn hình
print(line, end='')
except FileNotFoundError:
print(f"Không tìm thấy file: {file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")
Giải thích code
1. Đường dẫn đến file văn bản:

Khởi tạo biến file_path chứa đường dẫn đến file văn bản
cần đọc, ví dụ: ‘example.txt’.

2. Mở file với chế độ đọc:

Sử dụng hàm open(file_path, 'r') để mở file với chế độ


đọc. Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc đọc.

3. Lặp qua từng dòng trong file:

Sử dụng vòng lặp for line in file: để lặp qua từng dòng
trong file object. Mỗi lần lặp, một dòng mới từ file được đọc
vào biến line.

4. In từng dòng ra màn hình:

Sử dụng hàm print(line, end='') để in từng dòng ra màn


hình. Tham số end='' đảm bảo rằng dòng mới không bị
thêm thêm một dòng trống nữa.

5. Xử lý ngoại lệ:

Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ


như FileNotFoundError nếu file không tồn tại và các ngoại lệ
khác.

Tóm tắt
1. Hàm open(): Dùng để mở file. Tham số đầu tiên là đường dẫn
đến file, tham số thứ hai là chế độ mở file (ở đây là chế độ đọc
‘r’).
2. Vòng lặp for: Dùng để lặp qua từng dòng trong file object.
3. Hàm print(): Dùng để in từng dòng ra màn hình. Tham số
end='' được sử dụng để tránh thêm dòng mới không cần thiết.
4. Câu lệnh with: Dùng để đảm bảo rằng file được đóng tự động
sau khi hoàn thành thao tác đọc.
5. Xử lý ngoại lệ: Sử dụng câu lệnh try-except để bắt và xử lý
các lỗi có thể xảy ra khi làm việc với file.

Chương trình trên minh họa cách đọc một file văn bản theo từng
dòng bằng cách sử dụng vòng lặp for để lặp qua từng dòng trong
file object và in từng dòng ra màn hình. Đồng thời, chương trình xử
lý các ngoại lệ có thể xảy ra khi làm việc với file.
079 - Viết chương trình để ghi thêm
nội dung vào cuối file

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để ghi thêm nội dung vào
cuối file. Bạn có thể sử dụng hàm open() trong Python với chế độ
append (‘a’) để mở file và phương thức write() để ghi nội dung vào
file.

Thuật toán giải quyết


Để ghi thêm nội dung vào cuối file:

1. Mở file văn bản bằng hàm open() với chế độ ghi thêm (‘a’).
2. Sử dụng phương thức write() để ghi nội dung mới vào cuối file.
3. Đóng file sau khi ghi xong.

Code Python
# Đường dẫn đến file văn bản
file_path = 'example.txt'
# Nội dung cần ghi thêm
content_to_add = "\nThis is the new content added to the
file."

try:
# Mở file văn bản với chế độ ghi thêm
with open(file_path, 'a') as file:
# Ghi nội dung mới vào cuối file
file.write(content_to_add)
print(f"Nội dung đã được ghi thêm vào file
'{file_path}'.")
except FileNotFoundError:
print(f"Không tìm thấy file: {file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích code


1. Đường dẫn đến file văn bản:

Khởi tạo biến file_path chứa đường dẫn đến file văn bản
cần ghi thêm, ví dụ: ‘example.txt’.

2. Nội dung cần ghi thêm:

Khởi tạo biến content_to_add chứa nội dung cần ghi thêm
vào cuối file. Ở đây, nội dung được ghi thêm là “is the new
content added to the file.” (kèm theo ký tự xuống dòng ở đầu
để tách nội dung mới khỏi nội dung cũ).

3. Mở file với chế độ ghi thêm:

Sử dụng hàm open(file_path, 'a') để mở file với chế độ


ghi thêm (‘a’). Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc ghi.

4. Ghi nội dung mới vào cuối file:

Sử dụng phương thức write(content_to_add) của đối


tượng file để ghi nội dung mới vào cuối file.

5. In ra thông báo xác nhận:

Sử dụng hàm print() để in ra thông báo rằng nội dung đã


được ghi thêm vào file.

6. Xử lý ngoại lệ:
Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ
như FileNotFoundError nếu file không tồn tại và các ngoại lệ
khác.

Tóm tắt
1. Hàm open(): Dùng để mở file. Tham số đầu tiên là đường dẫn
đến file, tham số thứ hai là chế độ mở file (ở đây là chế độ ghi
thêm ‘a’).
2. Phương thức write(): Dùng để ghi nội dung vào file.
3. Câu lệnh with: Dùng để đảm bảo rằng file được đóng tự động
sau khi hoàn thành thao tác ghi.
4. Xử lý ngoại lệ: Sử dụng câu lệnh try-except để bắt và xử lý
các lỗi có thể xảy ra khi làm việc với file.

Chương trình trên minh họa cách ghi thêm nội dung vào cuối file
bằng cách sử dụng hàm open() với chế độ ghi thêm (‘a’) và phương
thức write() để ghi nội dung mới vào file. Đồng thời, chương trình
xử lý các ngoại lệ có thể xảy ra khi làm việc với file.
080 - Viết chương trình để sao chép
nội dung của một file sang file khác

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để sao chép nội dung của
một file sang một file khác. Bạn có thể sử dụng hàm open() trong
Python để mở file nguồn để đọc và mở file đích để ghi. Sau đó, bạn
đọc nội dung từ file nguồn và ghi nội dung đó vào file đích.

Thuật toán giải quyết


Để sao chép nội dung của một file sang file khác:

1. Mở file nguồn bằng hàm open() với chế độ đọc (‘r’).


2. Mở file đích bằng hàm open() với chế độ ghi (‘w’).
3. Đọc toàn bộ nội dung từ file nguồn.
4. Ghi toàn bộ nội dung vào file đích.
5. Đóng cả hai file sau khi hoàn thành.

Code Python
# Đường dẫn đến file nguồn và file đích
source_file_path = 'source.txt'
destination_file_path = 'destination.txt'

try:
# Mở file nguồn với chế độ đọc
with open(source_file_path, 'r') as source_file:
# Đọc toàn bộ nội dung của file nguồn
content = source_file.read()

# Mở file đích với chế độ ghi


with open(destination_file_path, 'w') as
destination_file:
# Ghi toàn bộ nội dung vào file đích
destination_file.write(content)

print(f"Nội dung đã được sao chép từ '{source_file_path}'


sang '{destination_file_path}'.")
except FileNotFoundError:
print(f"Không tìm thấy file: {source_file_path} hoặc
{destination_file_path}")
except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích code


1. Đường dẫn đến file nguồn và file đích:

Khởi tạo biến source_file_path chứa đường dẫn đến file


nguồn cần sao chép, ví dụ: ‘source.txt’.
Khởi tạo biến destination_file_path chứa đường dẫn đến
file đích cần sao chép đến, ví dụ: ‘destination.txt’.

2. Mở file nguồn với chế độ đọc:

Sử dụng hàm open(source_file_path, 'r') để mở file


nguồn với chế độ đọc (‘r’). Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc đọc.

3. Đọc toàn bộ nội dung của file nguồn:

Sử dụng phương thức read() của đối tượng file để đọc toàn
bộ nội dung từ file nguồn vào biến content.

4. Mở file đích với chế độ ghi:

Sử dụng hàm open(destination_file_path, 'w') để mở file


đích với chế độ ghi (‘w’). Hàm này trả về một đối tượng file.
Sử dụng câu lệnh with để đảm bảo file được đóng tự động
sau khi hoàn thành việc ghi.

5. Ghi toàn bộ nội dung vào file đích:

Sử dụng phương thức write(content) của đối tượng file để


ghi toàn bộ nội dung vào file đích.

6. In ra thông báo xác nhận:

Sử dụng hàm print() để in ra thông báo rằng nội dung đã


được sao chép thành công từ file nguồn sang file đích.

7. Xử lý ngoại lệ:

Sử dụng câu lệnh try-except để bắt và xử lý các ngoại lệ


như FileNotFoundError nếu file nguồn hoặc file đích không
tồn tại và các ngoại lệ khác.

Tóm tắt
1. Hàm open(): Dùng để mở file. Tham số đầu tiên là đường dẫn
đến file, tham số thứ hai là chế độ mở file (ở đây là chế độ đọc ‘r’
cho file nguồn và chế độ ghi ‘w’ cho file đích).
2. Phương thức read(): Dùng để đọc toàn bộ nội dung từ file.
3. Phương thức write(): Dùng để ghi nội dung vào file.
4. Câu lệnh with: Dùng để đảm bảo rằng file được đóng tự động
sau khi hoàn thành thao tác đọc hoặc ghi.
5. Xử lý ngoại lệ: Sử dụng câu lệnh try-except để bắt và xử lý
các lỗi có thể xảy ra khi làm việc với file.

Chương trình trên minh họa cách sao chép nội dung từ một file
nguồn sang một file đích bằng cách sử dụng các hàm open(),
read(), và write(). Đồng thời, chương trình xử lý các ngoại lệ có
thể xảy ra khi làm việc với file.
Chương 9 : Lập trình hướng
đối tượng
81. Viết chương trình để tạo một lớp học sinh.
82. Viết chương trình để thêm thuộc tính cho lớp học sinh.
83. Viết chương trình để thêm phương thức cho lớp học sinh.
84. Viết chương trình để tạo đối tượng từ lớp học sinh.
85. Viết chương trình để truy cập thuộc tính của đối tượng.
86. Viết chương trình để gọi phương thức của đối tượng.
87. Viết chương trình để kế thừa từ một lớp cơ bản.
88. Viết chương trình để ghi đè phương thức của lớp cha.
89. Viết chương trình để sử dụng trừu tượng trong Python.
90. Viết chương trình để sử dụng đa hình trong Python.
081 - Viết chương trình để tạo một lớp
học sinh

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tạo một lớp HocSinh.
Lớp này sẽ chứa các thuộc tính và phương thức để mô tả và thao
tác với đối tượng học sinh. Các thuộc tính cơ bản của học sinh có
thể bao gồm tên, tuổi, điểm trung bình, và các phương thức để hiển
thị thông tin học sinh hoặc tính toán các giá trị nào đó.

Thuật toán giải quyết


1. Định nghĩa lớp HocSinh với các thuộc tính cơ bản như tên, tuổi
và điểm trung bình.
2. Viết phương thức khởi tạo __init__ để khởi tạo các đối tượng
học sinh với các thuộc tính đã định nghĩa.
3. Viết các phương thức để thao tác với đối tượng học sinh, chẳng
hạn như hiển thị thông tin học sinh.

Code Python
class HocSinh:
def __init__(self, ten, tuoi, diem_tb):
"""Phương thức khởi tạo để thiết lập các thuộc tính
của học sinh"""
self.ten = ten
self.tuoi = tuoi
self.diem_tb = diem_tb

def hien_thi_thong_tin(self):
"""Phương thức để hiển thị thông tin của học sinh"""
print(f"Học sinh: {self.ten}")
print(f"Tuổi: {self.tuoi}")
print(f"Điểm trung bình: {self.diem_tb}")

def xep_loai(self):
"""Phương thức để xếp loại học sinh dựa trên điểm
trung bình"""
if self.diem_tb >= 8.5:
return "Giỏi"
elif self.diem_tb >= 6.5:
return "Khá"
elif self.diem_tb >= 5.0:
return "Trung bình"
else:
return "Yếu"

# Tạo đối tượng học sinh


hs = HocSinh("Nguyễn Văn A", 16, 8.2)

# Hiển thị thông tin học sinh


hs.hien_thi_thong_tin()

# Xếp loại học sinh


print(f"Xếp loại: {hs.xep_loai()}")

Giải thích code


1. Định nghĩa lớp HocSinh:

Dùng từ khóa class để định nghĩa lớp HocSinh.

2. Phương thức khởi tạo __init__:

Phương thức __init__ được gọi khi một đối tượng của lớp
được khởi tạo.
Các tham số ten, tuoi, diem_tb được truyền vào để khởi tạo
các thuộc tính self.ten, self.tuoi, self.diem_tb.

3. Phương thức hien_thi_thong_tin:


Phương thức này hiển thị thông tin của học sinh bằng cách
in ra các thuộc tính ten, tuoi, và diem_tb.

4. Phương thức xep_loai:

Phương thức này xếp loại học sinh dựa trên điểm trung bình
diem_tb.
Nếu diem_tb >= 8.5, học sinh được xếp loại “Giỏi”.
Nếu diem_tb >= 6.5, học sinh được xếp loại “Khá”.
Nếu diem_tb >= 5.0, học sinh được xếp loại “Trung bình”.
Nếu diem_tb < 5.0, học sinh được xếp loại “Yếu”.

5. Tạo đối tượng học sinh:

Tạo một đối tượng hs của lớp HocSinh với tên “Nguyễn Văn
A”, tuổi 16, và điểm trung bình 8.2.

6. Hiển thị thông tin học sinh:

Gọi phương thức hien_thi_thong_tin của đối tượng hs để


hiển thị thông tin học sinh.

7. Xếp loại học sinh:

Gọi phương thức xep_loai của đối tượng hs để xếp loại và


in kết quả xếp loại.

Tóm tắt
1. Định nghĩa lớp: Sử dụng từ khóa class để định nghĩa một lớp
trong Python.
2. Phương thức khởi tạo __init__: Thiết lập các thuộc tính của
đối tượng khi khởi tạo.
3. Phương thức của lớp: Định nghĩa các phương thức để thao
tác với đối tượng của lớp.
4. Tạo đối tượng: Khởi tạo đối tượng của lớp và gọi các phương
thức của nó.

Chương trình trên minh họa cách định nghĩa một lớp HocSinh với
các thuộc tính và phương thức cơ bản, tạo đối tượng của lớp và
thao tác với đối tượng đó.
082 - Viết chương trình để thêm thuộc
tính cho lớp học sinh

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để thêm thuộc tính mới
cho lớp HocSinh. Thuộc tính mới này có thể là bất kỳ thông tin bổ
sung nào về học sinh, chẳng hạn như địa chỉ, lớp học, hoặc số điện
thoại. Chúng ta sẽ thêm thuộc tính “địa chỉ” cho lớp HocSinh và điều
chỉnh các phương thức để hiển thị và xử lý thuộc tính mới này.

Thuật toán giải quyết


1. Cập nhật lớp HocSinh để bao gồm thuộc tính mới (ví dụ:
dia_chi).
2. Cập nhật phương thức khởi tạo __init__ để nhận và khởi tạo
giá trị cho thuộc tính mới.
3. Cập nhật các phương thức hiện có (như hien_thi_thong_tin)
để hiển thị thông tin của thuộc tính mới.

Code Python
class HocSinh:
def __init__(self, ten, tuoi, diem_tb, dia_chi):
"""Phương thức khởi tạo để thiết lập các thuộc tính
của học sinh"""
self.ten = ten
self.tuoi = tuoi
self.diem_tb = diem_tb
self.dia_chi = dia_chi # Thêm thuộc tính dia_chi

def hien_thi_thong_tin(self):
"""Phương thức để hiển thị thông tin của học sinh"""
print(f"Học sinh: {self.ten}")
print(f"Tuổi: {self.tuoi}")
print(f"Điểm trung bình: {self.diem_tb}")
print(f"Địa chỉ: {self.dia_chi}") # Hiển thị thuộc
tính dia_chi

def xep_loai(self):
"""Phương thức để xếp loại học sinh dựa trên điểm
trung bình"""
if self.diem_tb >= 8.5:
return "Giỏi"
elif self.diem_tb >= 6.5:
return "Khá"
elif self.diem_tb >= 5.0:
return "Trung bình"
else:
return "Yếu"

# Tạo đối tượng học sinh với thuộc tính địa chỉ
hs = HocSinh("Nguyễn Văn A", 16, 8.2, "123 Đường A, Thành phố
B")

# Hiển thị thông tin học sinh


hs.hien_thi_thong_tin()

# Xếp loại học sinh


print(f"Xếp loại: {hs.xep_loai()}")

Giải thích code


1. Định nghĩa lớp HocSinh:

Dùng từ khóa class để định nghĩa lớp HocSinh.

2. Phương thức khởi tạo __init__:

Phương thức __init__ được gọi khi một đối tượng của lớp
được khởi tạo.
Các tham số ten, tuoi, diem_tb, dia_chi được truyền vào để
khởi tạo các thuộc tính self.ten, self.tuoi, self.diem_tb,
self.dia_chi.

3. Phương thức hien_thi_thong_tin:

Phương thức này hiển thị thông tin của học sinh bằng cách
in ra các thuộc tính ten, tuoi, diem_tb, dia_chi.

4. Phương thức xep_loai:

Phương thức này xếp loại học sinh dựa trên điểm trung bình
diem_tb.
Nếu diem_tb >= 8.5, học sinh được xếp loại “Giỏi”.
Nếu diem_tb >= 6.5, học sinh được xếp loại “Khá”.
Nếu diem_tb >= 5.0, học sinh được xếp loại “Trung bình”.
Nếu diem_tb < 5.0, học sinh được xếp loại “Yếu”.

5. Tạo đối tượng học sinh với thuộc tính địa chỉ:

Tạo một đối tượng hs của lớp HocSinh với tên “Nguyễn Văn
A”, tuổi 16, điểm trung bình 8.2, và địa chỉ “123 Đường A,
Thành phố B”.

6. Hiển thị thông tin học sinh:

Gọi phương thức hien_thi_thong_tin của đối tượng hs để


hiển thị thông tin học sinh.

7. Xếp loại học sinh:

Gọi phương thức xep_loai của đối tượng hs để xếp loại và


in kết quả xếp loại.

Tóm tắt
1. Định nghĩa lớp: Sử dụng từ khóa class để định nghĩa một lớp
trong Python.
2. Phương thức khởi tạo __init__: Thiết lập các thuộc tính của
đối tượng khi khởi tạo.
3. Phương thức của lớp: Định nghĩa các phương thức để thao
tác với đối tượng của lớp.
4. Tạo đối tượng: Khởi tạo đối tượng của lớp và gọi các phương
thức của nó.

Chương trình trên minh họa cách thêm thuộc tính mới (dia_chi) cho
lớp HocSinh và cập nhật các phương thức để xử lý thuộc tính mới
này.
083 - Viết chương trình để thêm
phương thức cho lớp học sinh

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để thêm phương thức
mới cho lớp HocSinh. Phương thức mới này có thể là bất kỳ chức
năng bổ sung nào liên quan đến đối tượng học sinh, chẳng hạn như
tính tuổi, thay đổi điểm trung bình, hoặc hiển thị lời chào.

Thuật toán giải quyết


1. Thêm phương thức mới vào định nghĩa của lớp HocSinh.
2. Cập nhật lớp để sử dụng phương thức mới.

Code Python
Chúng ta sẽ thêm một phương thức mới có tên là cap_nhat_diem để
cập nhật điểm trung bình của học sinh, và một phương thức
loi_chao để hiển thị lời chào từ học sinh.

class HocSinh:
def __init__(self, ten, tuoi, diem_tb, dia_chi):
"""Phương thức khởi tạo để thiết lập các thuộc tính
của học sinh"""
self.ten = ten
self.tuoi = tuoi
self.diem_tb = diem_tb
self.dia_chi = dia_chi

def hien_thi_thong_tin(self):
"""Phương thức để hiển thị thông tin của học sinh"""
print(f"Học sinh: {self.ten}")
print(f"Tuổi: {self.tuoi}")
print(f"Điểm trung bình: {self.diem_tb}")
print(f"Địa chỉ: {self.dia_chi}")

def xep_loai(self):
"""Phương thức để xếp loại học sinh dựa trên điểm
trung bình"""
if self.diem_tb >= 8.5:
return "Giỏi"
elif self.diem_tb >= 6.5:
return "Khá"
elif self.diem_tb >= 5.0:
return "Trung bình"
else:
return "Yếu"

# Phương thức được thêm mới


def cap_nhat_diem(self, diem_moi):
"""Phương thức để cập nhật điểm trung bình của học
sinh"""
self.diem_tb = diem_moi
print(f"Điểm trung bình mới của học sinh {self.ten}
là: {self.diem_tb}")

def loi_chao(self):
"""Phương thức để hiển thị lời chào từ học sinh"""
print(f"Xin chào! Tôi là {self.ten} và tôi học lớp
12. Rất vui được gặp bạn!")

# Tạo đối tượng học sinh với thuộc tính địa chỉ
hs = HocSinh("Nguyễn Văn A", 16, 8.2, "123 Đường A, Thành phố
B")

# Hiển thị thông tin học sinh


hs.hien_thi_thong_tin()

# Xếp loại học sinh


print(f"Xếp loại: {hs.xep_loai()}")

# Cập nhật điểm trung bình và hiển thị thông tin


hs.cap_nhat_diem(9.0)
# Hiển thị lời chào từ học sinh
hs.loi_chao()

Giải thích code


1. Định nghĩa lớp HocSinh:

Dùng từ khóa class để định nghĩa lớp HocSinh.

2. Phương thức khởi tạo __init__:

Phương thức __init__ được gọi khi một đối tượng của lớp
được khởi tạo.
Các tham số ten, tuoi, diem_tb, dia_chi được truyền vào để
khởi tạo các thuộc tính self.ten, self.tuoi, self.diem_tb,
self.dia_chi.

3. Phương thức hien_thi_thong_tin:

Phương thức này hiển thị thông tin của học sinh bằng cách
in ra các thuộc tính ten, tuoi, diem_tb, dia_chi.

4. Phương thức xep_loai:

Phương thức này xếp loại học sinh dựa trên điểm trung bình
diem_tb.
Nếu diem_tb >= 8.5, học sinh được xếp loại “Giỏi”.
Nếu diem_tb >= 6.5, học sinh được xếp loại “Khá”.
Nếu diem_tb >= 5.0, học sinh được xếp loại “Trung bình”.
Nếu diem_tb < 5.0, học sinh được xếp loại “Yếu”.

5. Phương thức cap_nhat_diem:

Phương thức này cho phép cập nhật điểm trung bình của
học sinh. Nó nhận tham số diem_moi và gán giá trị này cho
self.diem_tb.
6. Phương thức loi_chao:

Phương thức này hiển thị một lời chào từ học sinh, sử dụng
thuộc tính ten.

7. Tạo đối tượng học sinh với thuộc tính địa chỉ:

Tạo một đối tượng hs của lớp HocSinh với tên “Nguyễn Văn
A”, tuổi 16, điểm trung bình 8.2, và địa chỉ “123 Đường A,
Thành phố B”.

8. Hiển thị thông tin học sinh:

Gọi phương thức hien_thi_thong_tin của đối tượng hs để


hiển thị thông tin học sinh.

9. Xếp loại học sinh:

Gọi phương thức xep_loai của đối tượng hs để xếp loại và


in kết quả xếp loại.

10. Cập nhật điểm trung bình và hiển thị thông tin:

Gọi phương thức cap_nhat_diem của đối tượng hs để cập


nhật điểm trung bình và hiển thị điểm trung bình mới.

11. Hiển thị lời chào từ học sinh:

Gọi phương thức loi_chao của đối tượng hs để hiển thị lời
chào.

Tóm tắt
1. Định nghĩa lớp: Sử dụng từ khóa class để định nghĩa một lớp
trong Python.
2. Phương thức khởi tạo __init__: Thiết lập các thuộc tính của
đối tượng khi khởi tạo.
3. Phương thức của lớp: Định nghĩa các phương thức để thao
tác với đối tượng của lớp.
4. Tạo đối tượng: Khởi tạo đối tượng của lớp và gọi các phương
thức của nó.

Chương trình trên minh họa cách thêm phương thức mới
(cap_nhat_diem và loi_chao) cho lớp HocSinh và cập nhật các
phương thức để xử lý và hiển thị thông tin của đối tượng học sinh.
084 - Viết chương trình để tạo đối
tượng từ lớp học sinh

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tạo đối tượng từ lớp
HocSinh và tạo một danh sách các đối tượng từ lớp HocSinh. Điều
này sẽ giúp quản lý thông tin của nhiều học sinh cùng lúc.

Thuật toán giải quyết


1. Định nghĩa lớp HocSinh với các thuộc tính và phương thức cần
thiết.
2. Tạo đối tượng từ lớp HocSinh.
3. Tạo danh sách các đối tượng từ lớp HocSinh.
4. Hiển thị thông tin của từng đối tượng trong danh sách.

Code Python
class HocSinh:
def __init__(self, ten, tuoi, diem_tb, dia_chi):
"""Phương thức khởi tạo để thiết lập các thuộc tính
của học sinh"""
self.ten = ten
self.tuoi = tuoi
self.diem_tb = diem_tb
self.dia_chi = dia_chi

def hien_thi_thong_tin(self):
"""Phương thức để hiển thị thông tin của học sinh"""
print(f"Học sinh: {self.ten}")
print(f"Tuổi: {self.tuoi}")
print(f"Điểm trung bình: {self.diem_tb}")
print(f"Địa chỉ: {self.dia_chi}")
def xep_loai(self):
"""Phương thức để xếp loại học sinh dựa trên điểm
trung bình"""
if self.diem_tb >= 8.5:
return "Giỏi"
elif self.diem_tb >= 6.5:
return "Khá"
elif self.diem_tb >= 5.0:
return "Trung bình"
else:
return "Yếu"

# Tạo đối tượng học sinh


hs1 = HocSinh("Nguyễn Văn A", 16, 8.2, "123 Đường A, Thành
phố B")
hs2 = HocSinh("Trần Thị B", 15, 7.5, "456 Đường B, Thành phố
C")
hs3 = HocSinh("Lê Văn C", 17, 9.0, "789 Đường C, Thành phố
D")

# Tạo danh sách các đối tượng học sinh


danh_sach_hoc_sinh = [hs1, hs2, hs3]

# Hiển thị thông tin của từng học sinh trong danh sách
for hoc_sinh in danh_sach_hoc_sinh:
hoc_sinh.hien_thi_thong_tin()
print(f"Xếp loại: {hoc_sinh.xep_loai()}")
print("-----")

Giải thích code


1. Định nghĩa lớp HocSinh:

Sử dụng từ khóa class để định nghĩa lớp HocSinh.

2. Phương thức khởi tạo __init__:


Phương thức __init__ được gọi khi một đối tượng của lớp
được khởi tạo.
Các tham số ten, tuoi, diem_tb, dia_chi được truyền vào để
khởi tạo các thuộc tính self.ten, self.tuoi, self.diem_tb,
self.dia_chi.

3. Phương thức hien_thi_thong_tin:

Phương thức này hiển thị thông tin của học sinh bằng cách
in ra các thuộc tính ten, tuoi, diem_tb, dia_chi.

4. Phương thức xep_loai:

Phương thức này xếp loại học sinh dựa trên điểm trung bình
diem_tb.
Nếu diem_tb >= 8.5, học sinh được xếp loại “Giỏi”.
Nếu diem_tb >= 6.5, học sinh được xếp loại “Khá”.
Nếu diem_tb >= 5.0, học sinh được xếp loại “Trung bình”.
Nếu diem_tb < 5.0, học sinh được xếp loại “Yếu”.

5. Tạo đối tượng học sinh:

Tạo ba đối tượng hs1, hs2, hs3 của lớp HocSinh với các
thông tin khác nhau.

6. Tạo danh sách các đối tượng học sinh:

Tạo danh sách danh_sach_hoc_sinh chứa ba đối tượng hs1,


hs2, hs3.

7. Hiển thị thông tin của từng học sinh trong danh sách:

Sử dụng vòng lặp for để duyệt qua từng đối tượng trong
danh sách danh_sach_hoc_sinh.
Gọi phương thức hien_thi_thong_tin và xep_loai để hiển
thị thông tin và xếp loại của từng học sinh.
Tóm tắt
1. Định nghĩa lớp: Sử dụng từ khóa class để định nghĩa một lớp
trong Python.
2. Phương thức khởi tạo __init__: Thiết lập các thuộc tính của
đối tượng khi khởi tạo.
3. Phương thức của lớp: Định nghĩa các phương thức để thao
tác với đối tượng của lớp.
4. Tạo đối tượng: Khởi tạo đối tượng của lớp và gọi các phương
thức của nó.
5. Tạo danh sách đối tượng: Tạo một danh sách chứa nhiều đối
tượng của lớp và thao tác với từng đối tượng trong danh sách.

Chương trình trên minh họa cách tạo đối tượng từ lớp HocSinh và
tạo danh sách các đối tượng từ lớp HocSinh, sau đó hiển thị thông
tin và xếp loại của từng học sinh trong danh sách.
085 - Viết chương trình để truy cập
thuộc tính của đối tượng

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để truy cập và thay đổi
giá trị của các thuộc tính của một đối tượng. Cả các thuộc tính
public (công khai) và private (riêng tư) đều cần được xử lý.

Thuật toán giải quyết


1. Định nghĩa lớp HocSinh với các thuộc tính public và private.
2. Tạo đối tượng từ lớp HocSinh.
3. Truy cập và thay đổi giá trị các thuộc tính public.
4. Truy cập và thay đổi giá trị các thuộc tính private thông qua các
phương thức getter và setter.

Code Python
class HocSinh:
def __init__(self, ten, tuoi, diem_tb, dia_chi):
"""Phương thức khởi tạo để thiết lập các thuộc tính
của học sinh"""
self.ten = ten # Thuộc tính public
self._tuoi = tuoi # Thuộc tính private
self.diem_tb = diem_tb # Thuộc tính public
self.__dia_chi = dia_chi # Thuộc tính private (name
mangling)

def hien_thi_thong_tin(self):
"""Phương thức để hiển thị thông tin của học sinh"""
print(f"Học sinh: {self.ten}")
print(f"Tuổi: {self._tuoi}")
print(f"Điểm trung bình: {self.diem_tb}")
print(f"Địa chỉ: {self.__dia_chi}")

def xep_loai(self):
"""Phương thức để xếp loại học sinh dựa trên điểm
trung bình"""
if self.diem_tb >= 8.5:
return "Giỏi"
elif self.diem_tb >= 6.5:
return "Khá"
elif self.diem_tb >= 5.0:
return "Trung bình"
else:
return "Yếu"

# Getter cho thuộc tính private _tuoi


@property
def tuoi(self):
return self._tuoi

# Setter cho thuộc tính private _tuoi


@tuoi.setter
def tuoi(self, tuoi_moi):
if tuoi_moi > 0:
self._tuoi = tuoi_moi
else:
print("Tuổi không hợp lệ!")

# Getter cho thuộc tính private __dia_chi


def get_dia_chi(self):
return self.__dia_chi

# Setter cho thuộc tính private __dia_chi


def set_dia_chi(self, dia_chi_moi):
self.__dia_chi = dia_chi_moi

# Tạo đối tượng học sinh


hs = HocSinh("Nguyễn Văn A", 16, 8.2, "123 Đường A, Thành phố
B")

# Truy cập và thay đổi giá trị các thuộc tính public
print(f"Trước khi thay đổi: Tên - {hs.ten}, Điểm trung bình -
{hs.diem_tb}")
hs.ten = "Trần Thị B"
hs.diem_tb = 9.0
print(f"Sau khi thay đổi: Tên - {hs.ten}, Điểm trung bình -
{hs.diem_tb}")

# Truy cập và thay đổi giá trị các thuộc tính private qua
getter và setter
print(f"Trước khi thay đổi: Tuổi - {hs.tuoi}, Địa chỉ -
{hs.get_dia_chi()}")
hs.tuoi = 17
hs.set_dia_chi("456 Đường B, Thành phố C")
print(f"Sau khi thay đổi: Tuổi - {hs.tuoi}, Địa chỉ -
{hs.get_dia_chi()}")

# Hiển thị thông tin học sinh


hs.hien_thi_thong_tin()

Giải thích code


1. Định nghĩa lớp HocSinh:

Sử dụng từ khóa class để định nghĩa lớp HocSinh.

2. Phương thức khởi tạo __init__:

Khởi tạo các thuộc tính ten, diem_tb là thuộc tính public.
Khởi tạo các thuộc tính _tuoi và __dia_chi là thuộc tính
private.
__dia_chi sử dụng kỹ thuật name mangling để trở thành
thuộc tính private.

3. Phương thức hien_thi_thong_tin:

Hiển thị thông tin của học sinh bằng cách in ra các thuộc tính
ten, _tuoi, diem_tb, __dia_chi.

4. Phương thức xep_loai:


Xếp loại học sinh dựa trên điểm trung bình diem_tb.

5. Getter và Setter cho thuộc tính private _tuoi:

Dùng @property để định nghĩa getter cho _tuoi.


Dùng @tuoi.setter để định nghĩa setter cho _tuoi với điều
kiện tuổi mới phải lớn hơn 0.

6. Getter và Setter cho thuộc tính private __dia_chi:

Định nghĩa phương thức get_dia_chi để truy cập __dia_chi.


Định nghĩa phương thức set_dia_chi để thay đổi giá trị
__dia_chi.

7. Tạo đối tượng học sinh:

Tạo đối tượng hs của lớp HocSinh.

8. Truy cập và thay đổi giá trị các thuộc tính public:

Truy cập và thay đổi trực tiếp các thuộc tính public ten và
diem_tb.

9. Truy cập và thay đổi giá trị các thuộc tính private:

Truy cập và thay đổi các thuộc tính private _tuoi và


__dia_chi qua các phương thức getter và setter.

10. Hiển thị thông tin học sinh:

Gọi phương thức hien_thi_thong_tin để hiển thị thông tin


học sinh.
Tóm tắt
1. Định nghĩa lớp: Sử dụng từ khóa class để định nghĩa một lớp
trong Python.
2. Phương thức khởi tạo __init__: Thiết lập các thuộc tính của
đối tượng khi khởi tạo.
3. Thuộc tính public và private:
Thuộc tính public có thể truy cập và thay đổi trực tiếp.
Thuộc tính private được truy cập và thay đổi qua getter và
setter.
4. Getter và Setter: Dùng để truy cập và thay đổi các thuộc tính
private của lớp.

Chương trình trên minh họa cách truy cập và thay đổi giá trị của các
thuộc tính public và private của đối tượng từ lớp HocSinh, sử dụng
các phương thức getter và setter để quản lý các thuộc tính private.
086 - Viết chương trình để gọi
phương thức của đối tượng

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để gọi phương thức của
đối tượng. Bạn sẽ gọi cả phương thức public (công khai) và
phương thức private (riêng tư).

Thuật toán giải quyết


1. Định nghĩa lớp HocSinh với các phương thức public và private.
2. Tạo đối tượng từ lớp HocSinh.
3. Gọi phương thức public của đối tượng.
4. Gọi phương thức private của đối tượng thông qua phương thức
public.

Code Python
class HocSinh:
def __init__(self, ten, tuoi, diem_tb, dia_chi):
"""Phương thức khởi tạo để thiết lập các thuộc tính
của học sinh"""
self.ten = ten
self.tuoi = tuoi
self.diem_tb = diem_tb
self.dia_chi = dia_chi

def hien_thi_thong_tin(self):
"""Phương thức public để hiển thị thông tin của học
sinh"""
print(f"Học sinh: {self.ten}")
print(f"Tuổi: {self.tuoi}")
print(f"Điểm trung bình: {self.diem_tb}")
print(f"Địa chỉ: {self.dia_chi}")
self.__xep_loai() # Gọi phương thức private từ
phương thức public

def xep_loai(self):
"""Phương thức public để xếp loại học sinh dựa trên
điểm trung bình"""
if self.diem_tb >= 8.5:
return "Giỏi"
elif self.diem_tb >= 6.5:
return "Khá"
elif self.diem_tb >= 5.0:
return "Trung bình"
else:
return "Yếu"

def __xep_loai(self):
"""Phương thức private để xếp loại học sinh dựa trên
điểm trung bình"""
loai = self.xep_loai()
print(f"Xếp loại: {loai}")

# Tạo đối tượng học sinh


hs = HocSinh("Nguyễn Văn A", 16, 8.2, "123 Đường A, Thành phố
B")

# Gọi phương thức public của đối tượng


hs.hien_thi_thong_tin()

# Gọi phương thức private thông qua phương thức public


# Note: Không thể gọi phương thức private trực tiếp từ bên
ngoài
# hs.__xep_loai() # Sẽ gây lỗi AttributeError

Giải thích code


1. Định nghĩa lớp HocSinh:

Sử dụng từ khóa class để định nghĩa lớp HocSinh.


2. Phương thức khởi tạo __init__:

Phương thức khởi tạo để thiết lập các thuộc tính ten, tuoi,
diem_tb, dia_chi.

3. Phương thức public hien_thi_thong_tin:

Hiển thị thông tin của học sinh.


Gọi phương thức private __xep_loai để xếp loại học sinh.

4. Phương thức public xep_loai:

Xếp loại học sinh dựa trên điểm trung bình diem_tb.

5. Phương thức private __xep_loai:

Xếp loại học sinh dựa trên điểm trung bình và in ra kết quả.
Phương thức này được gọi từ phương thức public
hien_thi_thong_tin.

6. Tạo đối tượng học sinh:

Tạo đối tượng hs của lớp HocSinh.

7. Gọi phương thức public của đối tượng:

Gọi phương thức hien_thi_thong_tin để hiển thị thông tin


của học sinh và xếp loại học sinh thông qua phương thức
private.

8. Gọi phương thức private thông qua phương thức public:

Phương thức private không thể được gọi trực tiếp từ bên
ngoài lớp, chỉ có thể được gọi từ bên trong lớp thông qua
phương thức public.
Tóm tắt
1. Định nghĩa lớp: Sử dụng từ khóa class để định nghĩa một lớp
trong Python.
2. Phương thức khởi tạo __init__: Thiết lập các thuộc tính của
đối tượng khi khởi tạo.
3. Phương thức public: Định nghĩa các phương thức có thể được
gọi từ bên ngoài lớp.
4. Phương thức private: Định nghĩa các phương thức chỉ có thể
được gọi từ bên trong lớp.
5. Gọi phương thức public: Gọi trực tiếp từ đối tượng.
6. Gọi phương thức private: Gọi từ bên trong lớp thông qua
phương thức public.

Chương trình trên minh họa cách gọi các phương thức public và
private của đối tượng từ lớp HocSinh, trong đó phương thức
private được gọi từ bên trong phương thức public.
087 - Viết chương trình để kế thừa từ
một lớp cơ bản

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kế thừa từ một lớp cơ
bản. Chương trình cần tạo một lớp cơ sở và một lớp dẫn xuất (lớp
con) kế thừa từ lớp cơ sở đó.

Thuật toán giải quyết


1. Định nghĩa lớp cơ bản Nguoi.
2. Định nghĩa lớp con HocSinh kế thừa từ lớp Nguoi.
3. Thêm các thuộc tính và phương thức riêng cho lớp HocSinh.
4. Tạo đối tượng từ lớp HocSinh và gọi các phương thức từ cả lớp
cơ sở và lớp con.

Code Python
# Định nghĩa lớp cơ bản Nguoi
class Nguoi:
def __init__(self, ten, tuoi):
self.ten = ten
self.tuoi = tuoi

def hien_thi_thong_tin(self):
print(f"Tên: {self.ten}")
print(f"Tuổi: {self.tuoi}")

# Định nghĩa lớp HocSinh kế thừa từ lớp Nguoi


class HocSinh(Nguoi):
def __init__(self, ten, tuoi, lop, diem_tb):
super().__init__(ten, tuoi)
self.lop = lop
self.diem_tb = diem_tb

def hien_thi_thong_tin(self):
super().hien_thi_thong_tin()
print(f"Lớp: {self.lop}")
print(f"Điểm trung bình: {self.diem_tb}")

def xep_loai(self):
if self.diem_tb >= 8.5:
return "Giỏi"
elif self.diem_tb >= 6.5:
return "Khá"
elif self.diem_tb >= 5.0:
return "Trung bình"
else:
return "Yếu"

# Tạo đối tượng từ lớp HocSinh


hs = HocSinh("Nguyễn Văn A", 16, "10A1", 8.2)

# Gọi các phương thức


hs.hien_thi_thong_tin()
print(f"Xếp loại: {hs.xep_loai()}")

Giải thích code


1. Định nghĩa lớp cơ bản Nguoi:

Sử dụng từ khóa class để định nghĩa lớp Nguoi.


Phương thức khởi tạo __init__ thiết lập các thuộc tính ten
và tuoi.
Phương thức hien_thi_thong_tin hiển thị thông tin tên và
tuổi của người.

2. Định nghĩa lớp con HocSinh kế thừa từ lớp Nguoi:

Sử dụng từ khóa class và () để định nghĩa lớp HocSinh kế


thừa từ Nguoi.
Phương thức khởi tạo __init__ của lớp HocSinh gọi phương
thức __init__ của lớp cha Nguoi bằng từ khóa super().
Thêm các thuộc tính lop và diem_tb cho lớp HocSinh.
Ghi đè phương thức hien_thi_thong_tin của lớp Nguoi để
hiển thị thêm thông tin về lớp và điểm trung bình.
Định nghĩa phương thức xep_loai để xếp loại học sinh dựa
trên điểm trung bình.

3. Tạo đối tượng từ lớp HocSinh:

Tạo đối tượng hs từ lớp HocSinh.

4. Gọi các phương thức:

Gọi phương thức hien_thi_thong_tin để hiển thị thông tin


học sinh.
Gọi phương thức xep_loai để xếp loại học sinh dựa trên
điểm trung bình.

Tóm tắt
1. Định nghĩa lớp cơ bản: Sử dụng từ khóa class để định nghĩa
lớp cơ bản và các thuộc tính, phương thức.
2. Kế thừa lớp: Sử dụng từ khóa class và () để định nghĩa lớp
con kế thừa từ lớp cơ bản.
3. Gọi phương thức của lớp cha: Sử dụng từ khóa super() để
gọi phương thức của lớp cha từ lớp con.
4. Ghi đè phương thức: Định nghĩa lại phương thức của lớp cha
trong lớp con để thay đổi hoặc mở rộng chức năng của nó.

Chương trình trên minh họa cách kế thừa từ một lớp cơ bản và ghi
đè phương thức của lớp cha trong lớp con, đồng thời bổ sung các
thuộc tính và phương thức riêng cho lớp con.
088 - Viết chương trình để ghi đè
phương thức của lớp cha

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để ghi đè phương thức
của lớp cha trong lớp con và sử dụng phương thức của lớp cha
trong lớp con.

Thuật toán giải quyết


1. Định nghĩa lớp cơ bản Nguoi với phương thức
hien_thi_thong_tin.
2. Định nghĩa lớp con HocSinh kế thừa từ lớp Nguoi.
3. Ghi đè phương thức hien_thi_thong_tin trong lớp HocSinh và
sử dụng phương thức của lớp cha thông qua từ khóa super().
4. Tạo đối tượng từ lớp HocSinh và gọi phương thức
hien_thi_thong_tin.

Code Python
# Định nghĩa lớp cơ bản Nguoi
class Nguoi:
def __init__(self, ten, tuoi):
self.ten = ten
self.tuoi = tuoi

def hien_thi_thong_tin(self):
print(f"Tên: {self.ten}")
print(f"Tuổi: {self.tuoi}")

# Định nghĩa lớp HocSinh kế thừa từ lớp Nguoi


class HocSinh(Nguoi):
def __init__(self, ten, tuoi, lop, diem_tb):
super().__init__(ten, tuoi)
self.lop = lop
self.diem_tb = diem_tb

def hien_thi_thong_tin(self):
# Sử dụng phương thức của lớp cha để hiển thị tên và
tuổi
super().hien_thi_thong_tin()
# Thêm thông tin về lớp và điểm trung bình
print(f"Lớp: {self.lop}")
print(f"Điểm trung bình: {self.diem_tb}")

# Tạo đối tượng từ lớp HocSinh


hs = HocSinh("Nguyễn Văn A", 16, "10A1", 8.2)

# Gọi phương thức hien_thi_thong_tin của đối tượng HocSinh


hs.hien_thi_thong_tin()

Giải thích code


1. Định nghĩa lớp cơ bản Nguoi:

Sử dụng từ khóa class để định nghĩa lớp Nguoi.


Phương thức khởi tạo __init__ thiết lập các thuộc tính ten
và tuoi.
Phương thức hien_thi_thong_tin hiển thị thông tin tên và
tuổi của người.

2. Định nghĩa lớp con HocSinh kế thừa từ lớp Nguoi:

Sử dụng từ khóa class và () để định nghĩa lớp HocSinh kế


thừa từ Nguoi.
Phương thức khởi tạo __init__ của lớp HocSinh gọi phương
thức __init__ của lớp cha Nguoi bằng từ khóa super().
Thêm các thuộc tính lop và diem_tb cho lớp HocSinh.

3. Ghi đè phương thức hien_thi_thong_tin:


Trong lớp HocSinh, phương thức hien_thi_thong_tin được
ghi đè để mở rộng chức năng của phương thức trong lớp
cha.
Sử dụng super().hien_thi_thong_tin() để gọi phương
thức hien_thi_thong_tin của lớp cha và hiển thị thông tin
tên và tuổi.
Thêm mã để hiển thị thông tin về lớp và điểm trung bình.

4. Tạo đối tượng từ lớp HocSinh:

Tạo đối tượng hs từ lớp HocSinh.

5. Gọi phương thức hien_thi_thong_tin của đối tượng HocSinh:

Gọi phương thức hien_thi_thong_tin để hiển thị thông tin


học sinh, bao gồm tên, tuổi, lớp và điểm trung bình.

Tóm tắt
1. Định nghĩa lớp cơ bản: Sử dụng từ khóa class để định nghĩa
lớp cơ bản và các thuộc tính, phương thức.
2. Kế thừa lớp: Sử dụng từ khóa class và () để định nghĩa lớp
con kế thừa từ lớp cơ bản.
3. Gọi phương thức của lớp cha: Sử dụng từ khóa super() để
gọi phương thức của lớp cha từ lớp con.
4. Ghi đè phương thức: Định nghĩa lại phương thức của lớp cha
trong lớp con để thay đổi hoặc mở rộng chức năng của nó.

Chương trình trên minh họa cách ghi đè phương thức của lớp cha
trong lớp con và sử dụng phương thức của lớp cha trong lớp con
bằng cách sử dụng từ khóa super().
089 - Viết chương trình để sử dụng
trừu tượng trong Python

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng trừu
tượng. Trong lập trình hướng đối tượng, trừu tượng là một cơ chế
cho phép chúng ta tạo ra các lớp và phương thức mà không cần
cung cấp cụ thể hành vi hoặc giá trị.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra âm thanh của các loài động vật
khác nhau.
Các bước thực hiện:
1. Tạo một lớp trừu tượng Animal với một phương thức trừu
tượng sound.
2. Tạo các lớp con Dog và Cat kế thừa từ Animal và triển khai
phương thức sound.
3. Tạo các đối tượng từ các lớp Dog và Cat và in ra âm thanh
của chúng.

Code Python
from abc import ABC, abstractmethod

# Lớp cơ sở Animal với phương thức trừu tượng sound


class Animal(ABC):
@abstractmethod
def sound(self):
pass
# Lớp Dog kế thừa từ lớp Animal, ghi đè phương thức sound
class Dog(Animal):
def sound(self):
return "Woof!"

# Lớp Cat kế thừa từ lớp Animal, ghi đè phương thức sound


class Cat(Animal):
def sound(self):
return "Meow!"

# Tạo đối tượng từ lớp Dog và Cat


dog = Dog()
cat = Cat()

# Gọi phương thức sound của đối tượng Dog và Cat


print(dog.sound())
print(cat.sound())

Giải thích code


1. Import module abc: Để sử dụng lớp trừu tượng ABC và
decorator abstractmethod.
2. Định nghĩa lớp trừu tượng Animal: Lớp này kế thừa từ ABC và
có một phương thức trừu tượng sound.
3. Định nghĩa các lớp con Dog và Cat: Các lớp này kế thừa từ
Animal và triển khai phương thức sound.
4. Tạo các đối tượng từ các lớp Dog và Cat: Sử dụng các lớp đã
định nghĩa để tạo các đối tượng.
5. In ra âm thanh của Dog và Cat: Sử dụng phương thức sound
của các đối tượng để in ra âm thanh.

Tóm tắt
Sử dụng lớp trừu tượng và phương thức trừu tượng trong
Python.
Kế thừa trong lập trình hướng đối tượng Python.
Sử dụng decorator @abstractmethod.

Chương trình này mô phỏng việc sử dụng trừu tượng trong Python
thông qua việc tạo một lớp trừu tượng Animal và các lớp con Dog và
Cat triển khai phương thức trừu tượng sound.
090 - Viết chương trình để sử dụng đa
hình trong Python

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng đa hình.
Trong lập trình hướng đối tượng, đa hình là một cơ chế cho phép
chúng ta sử dụng một phương thức ở nhiều hình thức khác nhau.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra âm thanh của các loài động vật
khác nhau.
Các bước thực hiện:
1. Tạo một lớp Animal với một phương thức sound.
2. Tạo các lớp con Dog và Cat kế thừa từ Animal và ghi đè
phương thức sound.
3. Tạo các đối tượng từ các lớp Dog và Cat và in ra âm thanh
của chúng.

Code Python
class Animal:
def sound(self):
return "Animal makes a sound"

class Dog(Animal):
def sound(self):
return "Woof!"

class Cat(Animal):
def sound(self):
return "Meow!"

animals = [Dog(), Cat()]

for animal in animals:


print(animal.sound())

Giải thích code


1. Định nghĩa lớp Animal: Lớp này có một phương thức sound.
2. Định nghĩa các lớp con Dog và Cat: Các lớp này kế thừa từ
Animal và ghi đè phương thức sound.
3. Tạo danh sách các đối tượng Animal: Sử dụng các lớp đã định
nghĩa để tạo danh sách các đối tượng.
4. In ra âm thanh của mỗi Animal trong danh sách: Sử dụng
phương thức sound của mỗi đối tượng để in ra âm thanh.

Bổ sung
Các cách giải khác: Trong trường hợp này, việc sử dụng đa
hình là một cách tiếp cận phổ biến và hiệu quả. Tuy nhiên, tùy
thuộc vào yêu cầu cụ thể của chương trình, có thể có các cách
tiếp cận khác như sử dụng lớp cơ sở thông thường hoặc sử
dụng các hàm.

Tóm tắt
Các điểm lý thuyết Python trong chương trình:
Sử dụng đa hình trong Python.
Kế thừa trong lập trình hướng đối tượng Python.
Ghi đè phương thức trong Python.
Một câu tóm tắt chung về chương trình: Chương trình này mô
phỏng việc sử dụng đa hình trong Python thông qua việc tạo một
lớp Animal và các lớp con Dog và Cat ghi đè phương thức sound.
Chương 10 : Ngoại lệ
91. Viết chương trình để bắt lỗi chia cho 0.
92. Viết chương trình để bắt lỗi khi truy cập chỉ mục không tồn tại
trong danh sách.
93. Viết chương trình để bắt lỗi khi truy cập key không tồn tại trong
dictionary.
94. Viết chương trình để bắt lỗi khi chuyển đổi kiểu dữ liệu không
hợp lệ.
95. Viết chương trình để bắt lỗi khi đọc file không tồn tại.
96. Viết chương trình để tự định nghĩa ngoại lệ.
97. Viết chương trình để sử dụng khối lệnh try-except-finally.
98. Viết chương trình để bắt nhiều lỗi cùng lúc.
99. Viết chương trình để bắt lỗi và tiếp tục thực hiện các lệnh khác.
100. Viết chương trình để bắt lỗi và ném lỗi cho hàm khác để ghi log
lỗi vào file.
091 - Viết chương trình để bắt lỗi chia
cho 0

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để bắt lỗi chia cho
0. Trong Python, khi chia một số cho 0, chương trình sẽ báo lỗi
ZeroDivisionError.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi hoặc kết quả của
phép chia.
Các bước thực hiện:
1. Thực hiện phép chia trong một khối try.
2. Bắt lỗi ZeroDivisionError trong khối except.

Code Python
try:
result = 10 / 0
except ZeroDivisionError:
result = "Error: Division by zero is not allowed!"

print(result)

Giải thích code


1. Thực hiện phép chia trong khối try: Đây là nơi chúng ta thực
hiện phép chia có thể gây ra lỗi.
2. Bắt lỗi ZeroDivisionError trong khối except: Nếu lỗi
ZeroDivisionError xảy ra, chúng ta sẽ bắt lỗi và gán giá trị cho
result là một thông báo lỗi.
3. In ra result: In ra kết quả của phép chia hoặc thông báo lỗi.

Bổ sung
Trong Python, cấu trúc để xử lý ngoại lệ là try/except, không phải
try/catch (như các ngôn ngữ khác). Đây là một ví dụ về cách sử
dụng nó:
try:
# Code có thể gây ra ngoại lệ
except ExceptionType:
# Code xử lý ngoại lệ

Trong đó, ExceptionType là loại ngoại lệ mà bạn muốn bắt và xử lý.


Nếu bạn muốn bắt tất cả các loại ngoại lệ, bạn có thể sử dụng
except Exception.

Tóm tắt
Sử dụng khối try/except để bắt lỗi trong Python.
Hiểu về lỗi ZeroDivisionError trong Python.

Chương trình này mô phỏng việc bắt lỗi chia cho 0 trong Python
thông qua việc sử dụng khối try/except để bắt lỗi
ZeroDivisionError.
092 - Viết chương trình để bắt lỗi khi
truy cập chỉ mục không tồn tại trong
danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để bắt lỗi khi truy
cập vào một chỉ mục không tồn tại trong danh sách. Trong Python,
khi truy cập vào một chỉ mục không tồn tại trong danh sách, chương
trình sẽ báo lỗi IndexError.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi hoặc giá trị tại chỉ
mục được truy cập.
Các bước thực hiện:
1. Thực hiện truy cập chỉ mục trong một khối try.
2. Bắt lỗi IndexError trong khối except.

Code Python
try:
my_list = [1, 2, 3]
value = my_list[5]
except IndexError:
value = "Error: Index out of range!"

print(value)
Giải thích code
1. Thực hiện truy cập chỉ mục trong khối try: Đây là nơi chúng
ta thực hiện truy cập chỉ mục có thể gây ra lỗi.
2. Bắt lỗi IndexError trong khối except: Nếu lỗi IndexError xảy
ra, chúng ta sẽ bắt lỗi và gán giá trị cho value là một thông báo
lỗi.
3. In ra value: In ra giá trị tại chỉ mục được truy cập hoặc thông
báo lỗi.

Tóm tắt
Sử dụng khối try/except để bắt lỗi trong Python.
Hiểu về lỗi IndexError trong Python.

Chương trình này mô phỏng việc bắt lỗi khi truy cập vào một chỉ
mục không tồn tại trong danh sách trong Python thông qua việc sử
dụng khối try/except để bắt lỗi IndexError.
093 - Viết chương trình để bắt lỗi khi
truy cập key không tồn tại trong
dictionary

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để bắt lỗi khi truy
cập vào một key không tồn tại trong dictionary. Trong Python, khi
truy cập vào một key không tồn tại trong dictionary, chương trình sẽ
báo lỗi KeyError.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi hoặc giá trị tại key
được truy cập.
Các bước thực hiện:
1. Thực hiện truy cập key trong một khối try.
2. Bắt lỗi KeyError trong khối except.

Code Python
try:
my_dict = {'name': 'John', 'age': 30}
value = my_dict['address']
except KeyError:
value = "Error: Key not found in dictionary!"

print(value)
Giải thích code
1. Thực hiện truy cập key trong khối try: Đây là nơi chúng ta
thực hiện truy cập key có thể gây ra lỗi.
2. Bắt lỗi KeyError trong khối except: Nếu lỗi KeyError xảy ra,
chúng ta sẽ bắt lỗi và gán giá trị cho value là một thông báo lỗi.
3. In ra value: In ra giá trị tại key được truy cập hoặc thông báo lỗi.

Tóm tắt
Sử dụng khối try/except để bắt lỗi trong Python.
Hiểu về lỗi KeyError trong Python.

Chương trình này mô phỏng việc bắt lỗi khi truy cập vào một key
không tồn tại trong dictionary trong Python thông qua việc sử dụng
khối try/except để bắt lỗi KeyError.
094 - Viết chương trình để bắt lỗi khi
chuyển đổi kiểu dữ liệu không hợp lệ

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để bắt lỗi khi thực
hiện chuyển đổi kiểu dữ liệu không hợp lệ. Trong Python, khi thực
hiện chuyển đổi kiểu dữ liệu không hợp lệ, chương trình sẽ báo lỗi
ValueError.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi hoặc giá trị sau khi
chuyển đổi kiểu dữ liệu.
Các bước thực hiện:
1. Thực hiện chuyển đổi kiểu dữ liệu trong một khối try.
2. Bắt lỗi ValueError trong khối except.

Code Python
try:
value = int('abc')
except ValueError:
value = "Error: Invalid type conversion!"

print(value)

Giải thích code


1. Thực hiện chuyển đổi kiểu dữ liệu trong khối try: Đây là nơi
chúng ta thực hiện chuyển đổi kiểu dữ liệu có thể gây ra lỗi.
2. Bắt lỗi ValueError trong khối except: Nếu lỗi ValueError xảy
ra, chúng ta sẽ bắt lỗi và gán giá trị cho value là một thông báo
lỗi.
3. In ra value: In ra giá trị sau khi chuyển đổi kiểu dữ liệu hoặc
thông báo lỗi.

Tóm tắt
Sử dụng khối try/except để bắt lỗi trong Python.
Hiểu về lỗi ValueError trong Python.

Chương trình này mô phỏng việc bắt lỗi khi thực hiện chuyển đổi
kiểu dữ liệu không hợp lệ trong Python thông qua việc sử dụng khối
try/except để bắt lỗi ValueError.
095 - Viết chương trình để bắt lỗi khi
đọc file không tồn tại

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để bắt lỗi khi thực
hiện việc đọc một file không tồn tại. Trong Python, khi thực hiện việc
đọc một file không tồn tại, chương trình sẽ báo lỗi
FileNotFoundError.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi hoặc nội dung của
file.
Các bước thực hiện:
1. Thực hiện việc đọc file trong một khối try.
2. Bắt lỗi FileNotFoundError trong khối except.

Code Python
def read_file(file_path):
try:
with open(file_path, 'r') as file:
content = file.read()
except FileNotFoundError:
content = "Error: File not found!"

return content

print(read_file('non_existent_file.txt'))
Giải thích code
1. Thực hiện việc đọc file trong khối try: Đây là nơi chúng ta
thực hiện việc đọc file có thể gây ra lỗi.
2. Bắt lỗi FileNotFoundError trong khối except: Nếu lỗi
FileNotFoundError xảy ra, chúng ta sẽ bắt lỗi và gán giá trị cho
content là một thông báo lỗi.
3. Trả về content: Trả về nội dung của file hoặc thông báo lỗi.
4. In ra kết quả: In ra nội dung của file hoặc thông báo lỗi khi gọi
hàm read_file.

Tóm tắt
Sử dụng khối try/except để bắt lỗi trong Python.
Hiểu về lỗi FileNotFoundError trong Python.
Sử dụng hàm open để đọc file trong Python.

Chương trình này mô phỏng việc bắt lỗi khi thực hiện việc đọc một
file không tồn tại trong Python thông qua việc sử dụng khối
try/except để bắt lỗi FileNotFoundError.
096 - Viết chương trình để tự định
nghĩa ngoại lệ

Viết chương trình để tự định nghĩa ngoại lệ

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để tự định nghĩa
một ngoại lệ. Trong Python, bạn có thể tạo một lớp mới để định
nghĩa một ngoại lệ tùy chỉnh.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi tùy chỉnh.
Các bước thực hiện:
1. Định nghĩa một lớp ngoại lệ tùy chỉnh.
2. Thực hiện một hành động có thể gây ra ngoại lệ trong một
khối try.
3. Bắt ngoại lệ tùy chỉnh trong khối except.

Code Python
class CustomException(Exception):
pass

def raise_custom_exception():
try:
raise CustomException("This is a custom exception!")
except CustomException as e:
print(e)

raise_custom_exception()
Giải thích code
1. Định nghĩa một lớp ngoại lệ tùy chỉnh:

Tạo một lớp mới CustomException kế thừa từ lớp Exception


để định nghĩa một ngoại lệ tùy chỉnh.
Lớp này được sử dụng để đại diện cho một ngoại lệ tùy
chỉnh trong Python. Khi một ngoại lệ tùy chỉnh được ném ra,
chương trình sẽ dừng lại và xử lý ngoại lệ này theo cách mà
người dùng mong muốn.
Trong trường hợp này, từ khóa pass được sử dụng để không
thực hiện bất kỳ hành động nào trong lớp ngoại lệ này. Nó
chỉ đơn giản là để đảm bảo rằng lớp ngoại lệ không có bất
kỳ phương thức hoặc thuộc tính nào khác ngoài việc kế thừa
từ lớp Exception.

2. Thực hiện một hành động có thể gây ra ngoại lệ trong một
khối try: Đây là nơi chúng ta thực hiện một hành động có thể
gây ra ngoại lệ tùy chỉnh.

3. Bắt ngoại lệ tùy chỉnh trong khối except: Nếu ngoại lệ tùy
chỉnh xảy ra, chúng ta sẽ bắt lỗi và in ra thông báo lỗi.

4. Gọi hàm raise_custom_exception: Gọi hàm để thực hiện việc


ném và bắt ngoại lệ tùy chỉnh.

Tóm tắt
Sử dụng khối try/except để bắt lỗi trong Python.
Hiểu cách tự định nghĩa ngoại lệ trong Python.
Sử dụng từ khóa raise để ném một ngoại lệ.

Chương trình này mô phỏng việc tự định nghĩa, ném và bắt một
ngoại lệ tùy chỉnh trong Python.
097 - Viết chương trình để sử dụng
khối lệnh try-except-finally

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để sử dụng khối
lệnh try-except-finally. Trong Python, khối try-except-finally
được sử dụng để bắt và xử lý các ngoại lệ, cũng như đảm bảo thực
hiện một số hành động, bất kể có ngoại lệ xảy ra hay không.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi (nếu có) và một
thông báo từ khối finally.
Các bước thực hiện:
1. Thực hiện một hành động có thể gây ra ngoại lệ trong khối
try.
2. Bắt và xử lý ngoại lệ trong khối except.
3. Thực hiện một hành động trong khối finally.

Code Python
def try_except_finally():
try:
print("Trying to divide by zero...")
result = 10 / 0
except ZeroDivisionError as e:
print("Caught an exception:", e)
finally:
print("This is the finally block.")

try_except_finally()
Giải thích code
1. Thực hiện một hành động có thể gây ra ngoại lệ trong khối
try: Đây là nơi chúng ta thực hiện một hành động có thể gây ra
ngoại lệ (chia cho 0).
2. Bắt và xử lý ngoại lệ trong khối except: Nếu ngoại lệ
ZeroDivisionError xảy ra, chúng ta sẽ bắt lỗi và in ra thông báo
lỗi.
3. Thực hiện một hành động trong khối finally: Đây là nơi
chúng ta thực hiện một hành động, bất kể có ngoại lệ xảy ra hay
không.
4. Gọi hàm try_except_finally: Gọi hàm để thực hiện việc sử
dụng khối lệnh try-except-finally.

Tóm tắt
Sử dụng khối try/except/finally để bắt, xử lý ngoại lệ và thực
hiện một số hành động, bất kể có ngoại lệ xảy ra hay không.
Hiểu về ngoại lệ ZeroDivisionError trong Python.

Chương trình này mô phỏng việc sử dụng khối lệnh try-except-


finally trong Python để bắt, xử lý ngoại lệ và thực hiện một số
hành động, bất kể có ngoại lệ xảy ra hay không.
098 - Viết chương trình để bắt nhiều
lỗi cùng lúc

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để bắt nhiều lỗi
cùng lúc. Trong Python, bạn có thể sử dụng nhiều khối except để
bắt và xử lý nhiều loại ngoại lệ khác nhau.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi tương ứng với ngoại
lệ được bắt.
Các bước thực hiện:
1. Thực hiện một hành động có thể gây ra ngoại lệ trong khối
try.
2. Bắt và xử lý ngoại lệ trong các khối except.

Code Python
def catch_multiple_exceptions(x, y):
try:
result = x / y
print(result)
except ZeroDivisionError as e:
print("Caught an exception:", e)
except TypeError as e:
print("Caught an exception:", e)

catch_multiple_exceptions(10, 0)
catch_multiple_exceptions(10, "zero")
Giải thích code
1. Thực hiện một hành động có thể gây ra ngoại lệ trong khối
try: Đây là nơi chúng ta thực hiện một hành động có thể gây ra
ngoại lệ (chia cho 0 hoặc chia cho một chuỗi).
2. Bắt và xử lý ngoại lệ trong các khối except: Nếu ngoại lệ
ZeroDivisionError hoặc TypeError xảy ra, chúng ta sẽ bắt lỗi và
in ra thông báo lỗi tương ứng.
3. Gọi hàm catch_multiple_exceptions: Gọi hàm để thực hiện
việc bắt nhiều lỗi cùng lúc.

Tóm tắt
Sử dụng nhiều khối except để bắt và xử lý nhiều loại ngoại lệ
khác nhau.
Hiểu về ngoại lệ ZeroDivisionError và TypeError trong Python.

Chương trình này mô phỏng việc sử dụng nhiều khối except để bắt
và xử lý nhiều loại ngoại lệ khác nhau trong Python.
099 - Viết chương trình để bắt lỗi và
tiếp tục thực hiện các lệnh khác

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để bắt lỗi và sau
đó tiếp tục thực hiện các lệnh khác. Trong Python, sau khi bắt và xử
lý một ngoại lệ, chương trình sẽ tiếp tục thực hiện các lệnh tiếp theo
nằm ngoài khối try/except.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ in ra thông báo lỗi (nếu có) và một
thông báo từ lệnh sau khối try/except.
Các bước thực hiện:
1. Thực hiện một hành động có thể gây ra ngoại lệ trong khối
try.
2. Bắt và xử lý ngoại lệ trong khối except.
3. Thực hiện một hành động sau khối try/except.

Code Python
def catch_error_and_continue():
try:
print("Trying to divide by zero...")
result = 10 / 0
except ZeroDivisionError as e:
print("Caught an exception:", e)

print("This is a statement after the try/except block.")

catch_error_and_continue()
Giải thích code
1. Thực hiện một hành động có thể gây ra ngoại lệ trong khối
try: Đây là nơi chúng ta thực hiện một hành động có thể gây ra
ngoại lệ (chia cho 0).
2. Bắt và xử lý ngoại lệ trong khối except: Nếu ngoại lệ
ZeroDivisionError xảy ra, chúng ta sẽ bắt lỗi và in ra thông báo
lỗi.
3. Thực hiện một hành động sau khối try/except: Đây là nơi
chúng ta thực hiện một hành động sau khi khối try/except đã
được thực hiện.
4. Gọi hàm catch_error_and_continue: Gọi hàm để thực hiện việc
bắt lỗi và tiếp tục thực hiện các lệnh khác.

Tóm tắt
Sử dụng khối try/except để bắt và xử lý ngoại lệ.
Hiểu về ngoại lệ ZeroDivisionError trong Python.
Hiểu rằng sau khi bắt và xử lý một ngoại lệ, chương trình sẽ tiếp
tục thực hiện các lệnh tiếp theo nằm ngoài khối try/except.

Chương trình này mô phỏng việc sử dụng khối try/except để bắt và


xử lý ngoại lệ, sau đó tiếp tục thực hiện các lệnh khác trong Python.
100 - Viết chương trình để bắt lỗi và
ném lỗi cho hàm khác để ghi log lỗi
vào file

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để bắt nhiều lỗi và
sau đó ném lỗi cho một hàm khác để ghi log lỗi vào file. Trong
Python, bạn có thể sử dụng từ khóa raise để ném một ngoại lệ, và
sau đó bắt ngoại lệ đó ở một nơi khác để xử lý.

Thuật toán giải quyết


Đầu vào: Không có đầu vào cụ thể cho chương trình.
Đầu ra: Chương trình sẽ ghi log lỗi vào file nếu có ngoại lệ xảy
ra.
Các bước thực hiện:
1. Thực hiện một hành động có thể gây ra ngoại lệ và ném
ngoại lệ nếu cần.
2. Bắt ngoại lệ và ghi log lỗi vào file.

Code Python
def throw_error():
try:
result = 10 / 0
except ZeroDivisionError as e:
raise e
except TypeError as e:
raise e

def log_error():
try:
throw_error()
except Exception as e:
with open('error.txt', 'a') as f:
f.write(str(e) + '\n')

log_error()

Giải thích code


1. Thực hiện một hành động có thể gây ra ngoại lệ và ném
ngoại lệ nếu cần: Hàm throw_error thực hiện một hành động
có thể gây ra ngoại lệ (chia cho 0), và ném ngoại lệ
ZeroDivisionError hoặc TypeError nếu nó xảy ra.
2. Bắt ngoại lệ và ghi log lỗi vào file: Hàm log_error gọi hàm
throw_error, bắt ngoại lệ nếu nó xảy ra, và sau đó ghi log lỗi
vào file error.txt.
3. Gọi hàm log_error: Gọi hàm để thực hiện việc bắt lỗi và ghi log
lỗi vào file.

Tóm tắt
Sử dụng từ khóa raise để ném một ngoại lệ trong Python.
Sử dụng khối try/except để bắt và xử lý ngoại lệ.
Hiểu về ngoại lệ ZeroDivisionError và TypeError trong Python.
Sử dụng file I/O để ghi log lỗi vào file.

Chương trình này mô phỏng việc sử dụng từ khóa raise để ném


một ngoại lệ, và sau đó bắt ngoại lệ đó ở một nơi khác để ghi log lỗi
vào file trong Python.
Chương 11 : Xử lý văn bản
101. Viết chương trình để đếm số từ trong một chuỗi.
102. Viết chương trình để đếm số ký tự trong một chuỗi.
103. Viết chương trình để đếm số câu trong một đoạn văn.
104. Viết chương trình để tìm tất cả các từ dài nhất trong một chuỗi.
105. Viết chương trình để tìm từ xuất hiện nhiều nhất trong một chuỗi.
106. Viết chương trình để tách các từ từ một chuỗi thành danh sách.
107. Viết chương trình để nối các từ trong danh sách thành một
chuỗi.
108. Viết chương trình để thay thế một từ trong chuỗi bằng từ khác.
109. Viết chương trình để loại bỏ các ký tự đặc biệt khỏi chuỗi.
110. Viết chương trình để kiểm tra một chuỗi có phải là palindrome
không.
101 - Viết chương trình để đếm số từ
trong một chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số từ trong một
chuỗi. Một từ được định nghĩa là một chuỗi ký tự không phải là
khoảng trắng, phân tách bởi các khoảng trắng.

Thuật toán giải quyết


1. Nhập chuỗi từ người dùng hoặc định nghĩa một chuỗi có sẵn.
2. Tách chuỗi thành danh sách các từ sử dụng phương thức
split().
3. Đếm số lượng từ trong danh sách.
4. In ra kết quả.

Code Python
def dem_so_tu(chuoi):
"""
Hàm này nhận vào một chuỗi và trả về số từ trong chuỗi
đó.
"""
# Tách chuỗi thành danh sách các từ
danh_sach_tu = chuoi.split()

# Đếm số từ trong danh sách


so_tu = len(danh_sach_tu)

return so_tu

# Nhập chuỗi từ người dùng


chuoi = input("Nhập một chuỗi: ")
# Gọi hàm và in kết quả
so_tu = dem_so_tu(chuoi)
print(f"Số từ trong chuỗi là: {so_tu}")

Giải thích code


1. Định nghĩa hàm dem_so_tu:

Hàm này nhận vào một chuỗi và trả về số từ trong chuỗi đó.
Sử dụng phương thức split() để tách chuỗi thành danh
sách các từ. split() mặc định tách chuỗi dựa trên khoảng
trắng.
Sử dụng len() để đếm số lượng phần tử trong danh sách,
tức là số từ trong chuỗi.

2. Nhập chuỗi từ người dùng:

Sử dụng input() để nhận chuỗi từ người dùng.

3. Gọi hàm và in kết quả:

Gọi hàm dem_so_tu với chuỗi đã nhập và lưu kết quả vào
biến so_tu.
In ra số từ trong chuỗi.

Tóm tắt
1. Nhập chuỗi: Sử dụng input() để nhận chuỗi từ người dùng.
2. Tách chuỗi thành danh sách từ: Sử dụng phương thức
split() để tách chuỗi thành danh sách các từ dựa trên khoảng
trắng.
3. Đếm số từ: Sử dụng len() để đếm số lượng phần tử trong danh
sách từ.
4. In kết quả: In ra số từ trong chuỗi.
Chương trình trên minh họa cách đếm số từ trong một chuỗi bằng
cách tách chuỗi thành danh sách các từ và đếm số lượng phần tử
trong danh sách đó.
102 - Viết chương trình để đếm số ký
tự trong một chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số ký tự trong
một chuỗi. Bạn có thể sử dụng nhiều cách khác nhau để đạt được
mục tiêu này.

Thuật toán giải quyết


1. Cách 1: Sử dụng hàm len():

Sử dụng hàm len() để đếm số ký tự trong chuỗi.

2. Cách 2: Duyệt qua từng ký tự và đếm:

Sử dụng vòng lặp để duyệt qua từng ký tự trong chuỗi và


tăng biến đếm lên.

Code Python

Cách 1: Sử dụng hàm len()


def dem_so_ky_tu_1(chuoi):
"""
Hàm này sử dụng hàm len() để đếm số ký tự trong chuỗi.
"""
return len(chuoi)

# Nhập chuỗi từ người dùng


chuoi = input("Nhập một chuỗi: ")
# Gọi hàm và in kết quả
so_ky_tu = dem_so_ky_tu_1(chuoi)
print(f"Số ký tự trong chuỗi (cách 1) là: {so_ky_tu}")

Cách 2: Duyệt qua từng ký tự và đếm


def dem_so_ky_tu_2(chuoi):
"""
Hàm này sử dụng vòng lặp để đếm số ký tự trong chuỗi.
"""
dem = 0
for ky_tu in chuoi:
dem += 1
return dem

# Gọi hàm và in kết quả


so_ky_tu = dem_so_ky_tu_2(chuoi)
print(f"Số ký tự trong chuỗi (cách 2) là: {so_ky_tu}")

Giải thích code


1. Cách 1: Sử dụng hàm len():

Hàm len() nhận vào một chuỗi và trả về số ký tự trong chuỗi


đó.
Gọi hàm dem_so_ky_tu_1 với chuỗi đã nhập và lưu kết quả
vào biến so_ky_tu.
In ra số ký tự trong chuỗi.

2. Cách 2: Duyệt qua từng ký tự và đếm:

Hàm dem_so_ky_tu_2 duyệt qua từng ký tự trong chuỗi sử


dụng vòng lặp for và tăng biến đếm dem lên mỗi lần gặp một
ký tự.
Gọi hàm dem_so_ky_tu_2 với chuỗi đã nhập và lưu kết quả
vào biến so_ky_tu.
In ra số ký tự trong chuỗi.
Tóm tắt
1. Sử dụng hàm len(): Đếm số ký tự trong chuỗi một cách đơn
giản và hiệu quả.
2. Duyệt qua từng ký tự và đếm: Sử dụng vòng lặp để đếm từng
ký tự trong chuỗi.

Cả hai cách đều chính xác và có thể sử dụng tùy vào tình huống cụ
thể. Sử dụng len() là cách nhanh chóng và dễ hiểu nhất, trong khi
việc duyệt qua từng ký tự có thể hữu ích trong một số trường hợp cụ
thể yêu cầu xử lý từng ký tự riêng lẻ.
103 - Viết chương trình để đếm số câu
trong một đoạn văn

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để đếm số câu trong một
đoạn văn. Một câu thường kết thúc bằng dấu chấm (.), dấu chấm
hỏi (?), hoặc dấu chấm than (!).

Thuật toán giải quyết


1. Nhập đoạn văn từ người dùng hoặc định nghĩa một đoạn văn có
sẵn.
2. Sử dụng các ký tự dấu câu để tách đoạn văn thành các câu.
3. Đếm số lượng các câu đã tách ra.
4. In ra kết quả.

Code Python

Cách 1: Sử dụng split() với nhiều dấu câu


import re

def dem_so_cau_1(doan_van):
"""
Hàm này sử dụng regex để tách đoạn văn thành các câu và
đếm số câu.
"""
# Sử dụng regex để tách đoạn văn thành các câu
cau = re.split(r'[.?!]', doan_van)
# Loại bỏ các phần tử rỗng
cau = [c for c in cau if c.strip()]
return len(cau)
# Nhập đoạn văn từ người dùng
doan_van = input("Nhập một đoạn văn: ")

# Gọi hàm và in kết quả


so_cau = dem_so_cau_1(doan_van)
print(f"Số câu trong đoạn văn (cách 1) là: {so_cau}")

Cách 2: Duyệt từng ký tự và đếm dấu câu


def dem_so_cau_2(doan_van):
"""
Hàm này duyệt qua từng ký tự trong đoạn văn và đếm số dấu
câu để xác định số câu.
"""
so_cau = 0
dau_cau = {'.', '?', '!'}

for ky_tu in doan_van:


if ky_tu in dau_cau:
so_cau += 1

return so_cau

# Gọi hàm và in kết quả


so_cau = dem_so_cau_2(doan_van)
print(f"Số câu trong đoạn văn (cách 2) là: {so_cau}")

Giải thích code


1. Cách 1: Sử dụng split() với nhiều dấu câu:

Sử dụng hàm re.split(r'[.?!]', doan_van) để tách đoạn


văn thành các câu dựa trên các dấu chấm (.), chấm hỏi (?),
và chấm than (!).
Sử dụng strip() để loại bỏ các khoảng trắng và kiểm tra
các phần tử không rỗng trong danh sách kết quả.
Đếm số phần tử trong danh sách không rỗng và trả về kết
quả.

2. Cách 2: Duyệt từng ký tự và đếm dấu câu:

Duyệt qua từng ký tự trong đoạn văn.


Kiểm tra xem ký tự có phải là một trong các dấu câu (., ?, !)
hay không.
Nếu có, tăng biến đếm so_cau lên một.
Trả về số lượng dấu câu đã đếm được.

Tóm tắt
1. Sử dụng split() với nhiều dấu câu: Tách đoạn văn thành
danh sách các câu và đếm số phần tử trong danh sách.
2. Duyệt từng ký tự và đếm dấu câu: Duyệt qua từng ký tự trong
đoạn văn và đếm số lần xuất hiện của các dấu câu.

Cả hai cách đều chính xác và có thể sử dụng tùy vào tình huống cụ
thể. Sử dụng split() là cách nhanh chóng và dễ hiểu, trong khi việc
duyệt qua từng ký tự có thể hữu ích trong một số trường hợp cụ thể
yêu cầu xử lý từng ký tự riêng lẻ.
104 - Viết chương trình để tìm tất cả
các từ dài nhất trong một chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm tất cả các từ dài
nhất trong một chuỗi. Nội dung chuỗi được lấy từ một file văn bản
(.txt).

Thuật toán giải quyết


1. Đọc nội dung từ file văn bản.
2. Tách chuỗi thành danh sách các từ.
3. Tìm độ dài của từ dài nhất.
4. Tìm tất cả các từ có độ dài bằng độ dài của từ dài nhất.
5. In ra kết quả.

Code Python

Cách 1: Sử dụng vòng lặp để tìm từ dài nhất


def doc_file(file_name):
"""
Hàm để đọc nội dung từ một file văn bản.
"""
with open(file_name, 'r', encoding='utf-8') as file:
noi_dung = file.read()
return noi_dung

def tim_tu_dai_nhat(file_name):
"""
Hàm để tìm tất cả các từ dài nhất trong một file văn bản.
"""
noi_dung = doc_file(file_name)

# Tách chuỗi thành danh sách các từ


danh_sach_tu = noi_dung.split()

# Tìm độ dài của từ dài nhất


do_dai_max = 0
for tu in danh_sach_tu:
if len(tu) > do_dai_max:
do_dai_max = len(tu)

# Tìm tất cả các từ có độ dài bằng độ dài của từ dài nhất


tu_dai_nhat = [tu for tu in danh_sach_tu if len(tu) ==
do_dai_max]

return tu_dai_nhat

# Đường dẫn tới file văn bản


file_name = 'example.txt'

# Gọi hàm và in kết quả


tu_dai_nhat = tim_tu_dai_nhat(file_name)
print(f"Từ dài nhất trong file là: {tu_dai_nhat}")

Cách 2: Sử dụng hàm max() với key


def doc_file(file_name):
"""
Hàm để đọc nội dung từ một file văn bản.
"""
with open(file_name, 'r', encoding='utf-8') as file:
noi_dung = file.read()
return noi_dung

def tim_tu_dai_nhat(file_name):
"""
Hàm để tìm tất cả các từ dài nhất trong một file văn bản.
"""
noi_dung = doc_file(file_name)
# Tách chuỗi thành danh sách các từ
danh_sach_tu = noi_dung.split()

# Tìm độ dài của từ dài nhất bằng hàm max với key là độ
dài của từ
do_dai_max = len(max(danh_sach_tu, key=len))

# Tìm tất cả các từ có độ dài bằng độ dài của từ dài nhất


tu_dai_nhat = [tu for tu in danh_sach_tu if len(tu) ==
do_dai_max]

return tu_dai_nhat

# Đường dẫn tới file văn bản


file_name = 'example.txt'

# Gọi hàm và in kết quả


tu_dai_nhat = tim_tu_dai_nhat(file_name)
print(f"Từ dài nhất trong file là: {tu_dai_nhat}")

Giải thích code


1. Đọc nội dung từ file:

Hàm doc_file mở và đọc nội dung từ file văn bản, sau đó trả
về chuỗi nội dung của file.

2. Tìm từ dài nhất (Cách 1):

Hàm tim_tu_dai_nhat sử dụng vòng lặp để duyệt qua tất cả


các từ trong danh sách từ và tìm độ dài của từ dài nhất.
Sau đó, hàm duyệt lại danh sách từ để tìm tất cả các từ có
độ dài bằng độ dài của từ dài nhất và lưu vào danh sách
tu_dai_nhat.

3. Tìm từ dài nhất (Cách 2):


Hàm tim_tu_dai_nhat sử dụng hàm max với key là độ dài
của từ để tìm độ dài của từ dài nhất.
Sau đó, hàm duyệt lại danh sách từ để tìm tất cả các từ có
độ dài bằng độ dài của từ dài nhất và lưu vào danh sách
tu_dai_nhat.

Tóm tắt
1. Đọc nội dung từ file: Sử dụng hàm open để đọc nội dung từ file
văn bản và lưu vào một chuỗi.
2. Tách chuỗi thành danh sách từ: Sử dụng phương thức split
để tách chuỗi thành danh sách các từ.
3. Tìm từ dài nhất (Cách 1): Sử dụng vòng lặp để tìm từ dài nhất
và duyệt lại danh sách để tìm tất cả các từ có độ dài bằng độ dài
của từ dài nhất.
4. Tìm từ dài nhất (Cách 2): Sử dụng hàm max với key là độ dài
của từ để tìm từ dài nhất và duyệt lại danh sách để tìm tất cả các
từ có độ dài bằng độ dài của từ dài nhất.
105 - Viết chương trình để tìm từ xuất
hiện nhiều nhất trong một chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm từ xuất hiện nhiều
nhất trong một chuỗi. Nội dung chuỗi được lấy từ một file văn bản
(.txt).

Thuật toán giải quyết


1. Đọc nội dung từ file văn bản.
2. Tách chuỗi thành danh sách các từ.
3. Sử dụng từ điển để đếm số lần xuất hiện của từng từ.
4. Tìm từ xuất hiện nhiều nhất.
5. In ra kết quả.

Code Python

Cách 1: Sử dụng từ điển để đếm số lần xuất hiện


của từng từ
def doc_file(file_name):
"""
Hàm để đọc nội dung từ một file văn bản.
"""
with open(file_name, 'r', encoding='utf-8') as file:
noi_dung = file.read()
return noi_dung

def tim_tu_xuat_hien_nhieu_nhat(file_name):
"""
Hàm để tìm từ xuất hiện nhiều nhất trong một file văn
bản.
"""
noi_dung = doc_file(file_name)

# Tách chuỗi thành danh sách các từ


danh_sach_tu = noi_dung.split()

# Sử dụng từ điển để đếm số lần xuất hiện của từng từ


tu_dem = {}
for tu in danh_sach_tu:
tu = tu.lower().strip('.,!?:;()[]') # Chuyển về chữ
thường và loại bỏ dấu câu
if tu in tu_dem:
tu_dem[tu] += 1
else:
tu_dem[tu] = 1

# Tìm từ xuất hiện nhiều nhất


tu_nhieu_nhat = max(tu_dem, key=tu_dem.get)

return tu_nhieu_nhat, tu_dem[tu_nhieu_nhat]

# Đường dẫn tới file văn bản


file_name = 'example.txt'

# Gọi hàm và in kết quả


tu_nhieu_nhat, so_lan_xuat_hien =
tim_tu_xuat_hien_nhieu_nhat(file_name)
print(f"Từ xuất hiện nhiều nhất là: '{tu_nhieu_nhat}' với
{so_lan_xuat_hien} lần xuất hiện")

Cách 2: Sử dụng Counter từ thư viện collections


from collections import Counter

def tim_tu_xuat_hien_nhieu_nhat(file_name):
"""
Hàm để tìm từ xuất hiện nhiều nhất trong một file văn
bản.
"""
noi_dung = doc_file(file_name)

# Tách chuỗi thành danh sách các từ


danh_sach_tu = noi_dung.split()

# Chuyển các từ về chữ thường và loại bỏ dấu câu


danh_sach_tu = [tu.lower().strip('.,!?:;()[]') for tu in
danh_sach_tu]

# Sử dụng Counter để đếm số lần xuất hiện của từng từ


tu_dem = Counter(danh_sach_tu)

# Tìm từ xuất hiện nhiều nhất


tu_nhieu_nhat, so_lan_xuat_hien = tu_dem.most_common(1)
[0]

return tu_nhieu_nhat, so_lan_xuat_hien

# Đường dẫn tới file văn bản


file_name = 'example.txt'

# Gọi hàm và in kết quả


tu_nhieu_nhat, so_lan_xuat_hien =
tim_tu_xuat_hien_nhieu_nhat(file_name)
print(f"Từ xuất hiện nhiều nhất là: '{tu_nhieu_nhat}' với
{so_lan_xuat_hien} lần xuất hiện")

Giải thích code


1. Đọc nội dung từ file:

Hàm doc_file mở và đọc nội dung từ file văn bản, sau đó trả
về chuỗi nội dung của file.

2. Tìm từ xuất hiện nhiều nhất (Cách 1):

Hàm tim_tu_xuat_hien_nhieu_nhat sử dụng vòng lặp để


duyệt qua danh sách từ và sử dụng từ điển tu_dem để đếm
số lần xuất hiện của từng từ.
Chuyển từ về chữ thường và loại bỏ dấu câu trước khi thêm
vào từ điển.
Sử dụng hàm max với key là số lần xuất hiện để tìm từ xuất
hiện nhiều nhất.

3. Tìm từ xuất hiện nhiều nhất (Cách 2):

Hàm tim_tu_xuat_hien_nhieu_nhat sử dụng Counter từ thư


viện collections để đếm số lần xuất hiện của từng từ trong
danh sách từ.
Sử dụng phương thức most_common của Counter để tìm từ
xuất hiện nhiều nhất và số lần xuất hiện của nó.

Tóm tắt
Chương trình tìm từ xuất hiện nhiều nhất trong một chuỗi được lấy
từ file văn bản bằng cách sử dụng từ điển hoặc thư viện
collections.Counter. Cả hai cách đều hiệu quả trong việc đếm và
tìm từ xuất hiện nhiều nhất.
106 - Viết chương trình để tách các từ
từ một chuỗi thành danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tách các từ từ một
chuỗi thành danh sách. Nội dung chuỗi được lấy từ một file văn bản
(.txt).

Thuật toán giải quyết


1. Đọc nội dung từ file văn bản.
2. Tách chuỗi thành danh sách các từ bằng cách sử dụng phương
thức split.
3. In ra danh sách các từ.

Code Python

Cách 1: Sử dụng phương thức split


def doc_file(file_name):
"""
Hàm để đọc nội dung từ một file văn bản.
"""
with open(file_name, 'r', encoding='utf-8') as file:
noi_dung = file.read()
return noi_dung

def tach_tu(file_name):
"""
Hàm để tách các từ từ một chuỗi thành danh sách.
"""
noi_dung = doc_file(file_name)
# Tách chuỗi thành danh sách các từ
danh_sach_tu = noi_dung.split()

return danh_sach_tu

# Đường dẫn tới file văn bản


file_name = 'example.txt'

# Gọi hàm và in kết quả


danh_sach_tu = tach_tu(file_name)
print(danh_sach_tu)

Cách 2: Sử dụng thư viện re để xử lý phức tạp


hơn
import re

def doc_file(file_name):
"""
Hàm để đọc nội dung từ một file văn bản.
"""
with open(file_name, 'r', encoding='utf-8') as file:
noi_dung = file.read()
return noi_dung

def tach_tu(file_name):
"""
Hàm để tách các từ từ một chuỗi thành danh sách.
"""
noi_dung = doc_file(file_name)

# Sử dụng regular expression để tách từ


danh_sach_tu = re.findall(r'\b\w+\b', noi_dung)

return danh_sach_tu

# Đường dẫn tới file văn bản


file_name = 'example.txt'
# Gọi hàm và in kết quả
danh_sach_tu = tach_tu(file_name)
print(danh_sach_tu)

Tóm tắt
Sử dụng hàm open để mở và đọc nội dung từ file văn bản.
Sử dụng phương thức split để tách chuỗi thành danh sách các
từ.
Sử dụng thư viện re với biểu thức chính quy để tách từ một
cách linh hoạt hơn.
In ra danh sách các từ.

Chương trình đọc nội dung từ file văn bản và tách chuỗi thành danh
sách các từ, sử dụng phương thức split hoặc biểu thức chính quy.
107 - Viết chương trình để nối các từ
trong danh sách thành một chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để nối các từ trong một
danh sách thành một chuỗi.

Thuật toán giải quyết


1. Khởi tạo một danh sách các từ.
2. Sử dụng phương thức join để nối các từ trong danh sách thành
một chuỗi.
3. In ra chuỗi kết quả.

Code Python

Cách 1: Sử dụng phương thức join


def noi_tu_thanh_chuoi(danh_sach_tu):
"""
Hàm để nối các từ trong danh sách thành một chuỗi.
"""
chuoi_ket_qua = ' '.join(danh_sach_tu)
return chuoi_ket_qua

# Khởi tạo danh sách các từ


danh_sach_tu = ["Đây", "là", "một", "chuỗi", "các", "từ"]

# Gọi hàm và in kết quả


chuoi_ket_qua = noi_tu_thanh_chuoi(danh_sach_tu)
print(chuoi_ket_qua)
Cách 2: Sử dụng vòng lặp for để nối các từ
def noi_tu_thanh_chuoi(danh_sach_tu):
"""
Hàm để nối các từ trong danh sách thành một chuỗi.
"""
chuoi_ket_qua = ""
for tu in danh_sach_tu:
chuoi_ket_qua += tu + " "
chuoi_ket_qua = chuoi_ket_qua.strip() # Loại bỏ khoảng
trắng dư thừa ở cuối chuỗi
return chuoi_ket_qua

# Khởi tạo danh sách các từ


danh_sach_tu = ["Đây", "là", "một", "chuỗi", "các", "từ"]

# Gọi hàm và in kết quả


chuoi_ket_qua = noi_tu_thanh_chuoi(danh_sach_tu)
print(chuoi_ket_qua)

Tóm tắt
Khởi tạo một danh sách các từ.
Sử dụng phương thức join để nối các từ trong danh sách thành
một chuỗi.
Sử dụng vòng lặp for để nối các từ trong danh sách thành một
chuỗi.
In ra chuỗi kết quả.

Chương trình nối các từ trong danh sách thành một chuỗi, sử dụng
phương thức join hoặc vòng lặp for.
108 - Viết chương trình để thay thế
một từ trong chuỗi bằng từ khác

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để thay thế một từ trong
chuỗi bằng từ khác.

Thuật toán giải quyết


1. Nhận đầu vào là chuỗi ban đầu, từ cần thay thế và từ thay thế.
2. Sử dụng phương thức replace để thay thế từ trong chuỗi.
3. In ra chuỗi kết quả.

Code Python

Cách 1: Sử dụng phương thức replace


def thay_the_tu(chuoi, tu_cu, tu_moi):
"""
Hàm để thay thế một từ trong chuỗi bằng từ khác.
"""
chuoi_ket_qua = chuoi.replace(tu_cu, tu_moi)
return chuoi_ket_qua

# Chuỗi ban đầu


chuoi_ban_dau = "Đây là một ví dụ về chuỗi."

# Từ cần thay thế và từ thay thế


tu_cu = "ví dụ"
tu_moi = "demo"

# Gọi hàm và in kết quả


chuoi_ket_qua = thay_the_tu(chuoi_ban_dau, tu_cu, tu_moi)
print(chuoi_ket_qua)

Cách 2: Sử dụng biểu thức chính quy re.sub


import re

def thay_the_tu(chuoi, tu_cu, tu_moi):


"""
Hàm để thay thế một từ trong chuỗi bằng từ khác sử dụng
biểu thức chính quy.
"""
chuoi_ket_qua =
re.sub(r'\b{}\b'.format(re.escape(tu_cu)), tu_moi, chuoi)
return chuoi_ket_qua

# Chuỗi ban đầu


chuoi_ban_dau = "Đây là một ví dụ về chuỗi. Đây là một ví dụ
khác."

# Từ cần thay thế và từ thay thế


tu_cu = "ví dụ"
tu_moi = "demo"

# Gọi hàm và in kết quả


chuoi_ket_qua = thay_the_tu(chuoi_ban_dau, tu_cu, tu_moi)
print(chuoi_ket_qua)

Giải thích code


1. Sử dụng phương thức replace:

Hàm thay_the_tu sử dụng phương thức replace để thay thế


tất cả các lần xuất hiện của từ cũ bằng từ mới trong chuỗi.
Ví dụ, chuỗi “Đây là một ví dụ về chuỗi.” với từ cần thay thế
là “ví dụ” và từ thay thế là “demo” sẽ trở thành “Đây là một
demo về chuỗi.”
2. Sử dụng biểu thức chính quy re.sub:

Hàm thay_the_tu sử dụng re.sub để thay thế từ cũ bằng từ


mới. Biểu thức \b được sử dụng để chỉ biên giới từ, đảm
bảo chỉ thay thế từ đầy đủ mà không thay thế các phần của
từ khác.
Ví dụ, chuỗi “Đây là một ví dụ về chuỗi. Đây là một ví dụ
khác.” với từ cần thay thế là “ví dụ” và từ thay thế là “demo”
sẽ trở thành “Đây là một demo về chuỗi. Đây là một demo
khác.”

Tóm tắt
Sử dụng phương thức replace để thay thế một từ trong chuỗi
bằng từ khác.
Sử dụng biểu thức chính quy re.sub để thay thế từ trong chuỗi,
đảm bảo thay thế từ đầy đủ.

Chương trình thay thế một từ trong chuỗi bằng từ khác, sử dụng
phương thức replace hoặc biểu thức chính quy re.sub.
109 - Viết chương trình để loại bỏ các
ký tự đặc biệt khỏi chuỗi

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để loại bỏ các ký tự đặc
biệt khỏi chuỗi, chỉ giữ lại các ký tự chữ cái và số.

Thuật toán giải quyết


1. Nhận đầu vào là một chuỗi chứa các ký tự đặc biệt.
2. Sử dụng biểu thức chính quy re để loại bỏ các ký tự không phải
chữ cái và số.
3. In ra chuỗi kết quả.

Code Python

Sử dụng biểu thức chính quy re.sub


import re

def loai_bo_ky_tu_dac_biet(chuoi):
"""
Hàm để loại bỏ các ký tự đặc biệt khỏi chuỗi, chỉ giữ lại
chữ cái và số.
"""
chuoi_ket_qua = re.sub(r'[^A-Za-z0-9]', '', chuoi)
return chuoi_ket_qua

# Chuỗi ban đầu chứa các ký tự đặc biệt


chuoi_ban_dau = "Hello, World! Đây là một chuỗi #123 với ký
tự đặc biệt @2024."

# Gọi hàm và in kết quả


chuoi_ket_qua = loai_bo_ky_tu_dac_biet(chuoi_ban_dau)
print(chuoi_ket_qua)

Giải thích code


import re: Import thư viện re để sử dụng các hàm biểu thức
chính quy.
loai_bo_ky_tu_dac_biet(chuoi): Hàm này nhận vào một chuỗi
và loại bỏ các ký tự đặc biệt.
re.sub(r'[^A-Za-z0-9]', '', chuoi): Hàm re.sub sử dụng
biểu thức chính quy để thay thế tất cả các ký tự không phải
chữ cái và số bằng chuỗi rỗng. Biểu thức [^A-Za-z0-9] có
nghĩa là bất kỳ ký tự nào không phải là chữ cái (viết hoa
hoặc viết thường) hoặc số.

Tóm tắt
Import thư viện re để sử dụng biểu thức chính quy.
Sử dụng re.sub với biểu thức chính quy [^A-Za-z0-9] để loại bỏ
các ký tự không phải chữ cái và số.

Chương trình loại bỏ các ký tự đặc biệt khỏi chuỗi, chỉ giữ lại các ký
tự chữ cái và số, sử dụng biểu thức chính quy re.sub.
110 - Viết chương trình để kiểm tra
một chuỗi có phải là palindrome
không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra một chuỗi có
phải là palindrome không. Palindrome là một chuỗi có thứ tự các ký
tự giống nhau khi đọc từ trái sang phải và từ phải sang trái.

Thuật toán giải quyết


1. Nhận đầu vào là một chuỗi.
2. Loại bỏ khoảng trắng và chuyển đổi tất cả các ký tự thành chữ
thường để so sánh chính xác.
3. So sánh chuỗi với chuỗi đảo ngược của nó.
4. Trả về kết quả kiểm tra.

Code Python

Cách 1: Sử dụng slicing


def kiem_tra_palindrome(chuoi):
"""
Hàm để kiểm tra một chuỗi có phải là palindrome không.
"""
chuoi = chuoi.replace(" ", "").lower()
return chuoi == chuoi[::-1]

# Chuỗi cần kiểm tra


chuoi1 = "A man a plan a canal Panama"
chuoi2 = "Hello World"
# Gọi hàm và in kết quả
print(kiem_tra_palindrome(chuoi1)) # True
print(kiem_tra_palindrome(chuoi2)) # False

Cách 2: Sử dụng vòng lặp


def kiem_tra_palindrome(chuoi):
"""
Hàm để kiểm tra một chuỗi có phải là palindrome không.
"""
chuoi = chuoi.replace(" ", "").lower()
n = len(chuoi)
for i in range(n // 2):
if chuoi[i] != chuoi[n - i - 1]:
return False
return True

# Chuỗi cần kiểm tra


chuoi1 = "A man a plan a canal Panama"
chuoi2 = "Hello World"

# Gọi hàm và in kết quả


print(kiem_tra_palindrome(chuoi1)) # True
print(kiem_tra_palindrome(chuoi2)) # False

Giải thích code


1. Cách 1: Sử dụng slicing

chuoi.replace(" ", "").lower(): Loại bỏ khoảng trắng và


chuyển đổi tất cả các ký tự thành chữ thường.
chuoi == chuoi[::-1]: So sánh chuỗi với chuỗi đảo ngược
của nó bằng cách sử dụng slicing [::-1].

2. Cách 2: Sử dụng vòng lặp


chuoi.replace(" ", "").lower(): Loại bỏ khoảng trắng và
chuyển đổi tất cả các ký tự thành chữ thường.
for i in range(n // 2): Duyệt qua nửa đầu của chuỗi.
if chuoi[i] != chuoi[n - i - 1]: So sánh ký tự tại vị trí i
với ký tự tại vị trí đối diện n - i - 1.
return False: Nếu có bất kỳ ký tự nào không khớp, trả về
False.
return True: Nếu tất cả các ký tự khớp, trả về True.

Tóm tắt
Loại bỏ khoảng trắng và chuyển đổi chuỗi thành chữ thường để
đảm bảo so sánh chính xác.
So sánh chuỗi với chuỗi đảo ngược của nó bằng slicing hoặc sử
dụng vòng lặp để kiểm tra từng ký tự đối xứng.

Chương trình kiểm tra một chuỗi có phải là palindrome không bằng
cách so sánh chuỗi với chuỗi đảo ngược của nó hoặc sử dụng vòng
lặp để kiểm tra từng ký tự đối xứng.
Chương 12 : Xử lý ngày và thời
gian
111. Viết chương trình để lấy ngày và giờ hiện tại.
112. Viết chương trình để lấy ngày hiện tại.
113. Viết chương trình để lấy thời gian hiện tại.
114. Viết chương trình để chuyển đổi định dạng ngày tháng.
115. Viết chương trình để tính thời gian chênh lệch giữa hai ngày.
116. Viết chương trình để tính thời gian chênh lệch giữa hai thời gian.
117. Viết chương trình để tính số ngày từ ngày hiện tại đến một ngày
nhất định.
118. Viết chương trình để tính số giây từ thời gian hiện tại đến một
thời gian nhất định.
119. Viết chương trình để in lịch của một tháng nhất định.
120. Viết chương trình để in lịch của một năm nhất định.
111 - Viết chương trình để lấy ngày và
giờ hiện tại

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy ngày và giờ hiện
tại.

Thuật toán giải quyết


1. Sử dụng thư viện datetime trong Python để lấy ngày và giờ hiện
tại.
2. Sử dụng phương thức datetime.now() để lấy thời gian hiện tại.
3. Định dạng và in ra ngày và giờ hiện tại.

Code Python
from datetime import datetime

def lay_ngay_gio_hien_tai():
"""
Hàm để lấy ngày và giờ hiện tại.
"""
# Lấy thời gian hiện tại
hien_tai = datetime.now()

# Định dạng ngày và giờ hiện tại


ngay_gio_hien_tai = hien_tai.strftime("%Y-%m-%d
%H:%M:%S")
return ngay_gio_hien_tai

# Gọi hàm và in kết quả


print("Ngày và giờ hiện tại là:", lay_ngay_gio_hien_tai())
Giải thích code
from datetime import datetime: Import lớp datetime từ thư
viện datetime.
datetime.now(): Lấy thời gian hiện tại.
strftime("%Y-%m-%d %H:%M:%S"): Định dạng thời gian hiện tại
theo định dạng Năm-Tháng-Ngày Giờ:Phút:Giây.
lay_ngay_gio_hien_tai(): Hàm này trả về ngày và giờ hiện tại
đã được định dạng.

Tóm tắt
Import thư viện datetime.
Sử dụng datetime.now() để lấy thời gian hiện tại.
Định dạng thời gian hiện tại và in ra kết quả.

Chương trình sử dụng thư viện datetime để lấy và định dạng ngày
và giờ hiện tại.
112 - Viết chương trình để lấy ngày
hiện tại

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy ngày, tháng, năm,
giờ, phút, giây hiện tại và xuất ra mỗi giá trị trên một dòng riêng biệt.

Thuật toán giải quyết


1. Sử dụng thư viện datetime trong Python để lấy ngày và giờ hiện
tại.
2. Sử dụng phương thức datetime.now() để lấy thời gian hiện tại.
3. Truy xuất các thành phần ngày, tháng, năm, giờ, phút, giây từ
đối tượng datetime.
4. In từng thành phần ra từng dòng.

Code Python
from datetime import datetime

def lay_ngay_thang_nam_gio_phut_giay_hien_tai():
"""
Hàm để lấy ngày, tháng, năm, giờ, phút, giây hiện tại và
xuất ra từng dòng.
"""
# Lấy thời gian hiện tại
hien_tai = datetime.now()

# Truy xuất từng thành phần ngày, tháng, năm, giờ, phút,
giây
nam = hien_tai.year
thang = hien_tai.month
ngay = hien_tai.day
gio = hien_tai.hour
phut = hien_tai.minute
giay = hien_tai.second

# In từng thành phần ra từng dòng


print("Năm:", nam)
print("Tháng:", thang)
print("Ngày:", ngay)
print("Giờ:", gio)
print("Phút:", phut)
print("Giây:", giay)

# Gọi hàm và in kết quả


lay_ngay_thang_nam_gio_phut_giay_hien_tai()

Giải thích code


from datetime import datetime: Import lớp datetime từ thư
viện datetime.
datetime.now(): Lấy thời gian hiện tại.
hien_tai.year, hien_tai.month, hien_tai.day, hien_tai.hour,
hien_tai.minute, hien_tai.second: Truy xuất các thành phần
ngày, tháng, năm, giờ, phút, giây từ đối tượng datetime.
print(): In từng thành phần ra từng dòng.

Tóm tắt
Import thư viện datetime.
Sử dụng datetime.now() để lấy thời gian hiện tại.
Truy xuất và in từng thành phần ngày, tháng, năm, giờ, phút,
giây ra từng dòng.

Chương trình lấy ngày, tháng, năm, giờ, phút, giây hiện tại và xuất ra
từng giá trị trên từng dòng riêng biệt.
113 - Viết chương trình để lấy thời
gian hiện tại

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để lấy thời gian hiện tại
và hiển thị nó theo hai kiểu: 24 giờ và 12 giờ (AM/PM).

Thuật toán giải quyết


1. Sử dụng thư viện datetime trong Python để lấy thời gian hiện
tại.
2. Định dạng thời gian hiện tại theo định dạng 24 giờ.
3. Định dạng thời gian hiện tại theo định dạng 12 giờ (AM/PM).

Code Python
from datetime import datetime

def lay_thoi_gian_hien_tai():
"""
Hàm để lấy thời gian hiện tại theo định dạng 24 giờ và 12
giờ (AM/PM).
"""
# Lấy thời gian hiện tại
hien_tai = datetime.now()

# Định dạng thời gian theo kiểu 24 giờ


thoi_gian_24h = hien_tai.strftime("%H:%M:%S")

# Định dạng thời gian theo kiểu 12 giờ (AM/PM)


thoi_gian_12h = hien_tai.strftime("%I:%M:%S %p")

return thoi_gian_24h, thoi_gian_12h


# Gọi hàm và in kết quả
thoi_gian_24h, thoi_gian_12h = lay_thoi_gian_hien_tai()
print("Thời gian hiện tại theo kiểu 24 giờ:", thoi_gian_24h)
print("Thời gian hiện tại theo kiểu 12 giờ (AM/PM):",
thoi_gian_12h)

Giải thích code


from datetime import datetime: Import lớp datetime từ thư
viện datetime.
datetime.now(): Lấy thời gian hiện tại.
hien_tai.strftime("%H:%M:%S"): Định dạng thời gian hiện tại
theo kiểu 24 giờ.
hien_tai.strftime("%I:%M:%S %p"): Định dạng thời gian hiện tại
theo kiểu 12 giờ (AM/PM).
lay_thoi_gian_hien_tai(): Hàm này trả về hai định dạng thời
gian hiện tại.
print(): In ra kết quả thời gian hiện tại theo cả hai định dạng.

Tóm tắt
Import thư viện datetime.
Sử dụng datetime.now() để lấy thời gian hiện tại.
Định dạng thời gian hiện tại theo kiểu 24 giờ và 12 giờ (AM/PM).
In ra kết quả theo cả hai định dạng.

Chương trình lấy thời gian hiện tại và hiển thị nó theo hai kiểu: 24
giờ và 12 giờ (AM/PM).
114 - Viết chương trình để chuyển đổi
định dạng ngày tháng

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để chuyển đổi định dạng
ngày tháng từ định dạng này sang định dạng khác.

Thuật toán giải quyết


1. Nhận đầu vào là một chuỗi ngày tháng theo định dạng ban đầu.
2. Sử dụng thư viện datetime để phân tích chuỗi ngày tháng theo
định dạng ban đầu.
3. Chuyển đổi ngày tháng thành định dạng mới bằng cách sử dụng
phương thức strftime.

Code Python
from datetime import datetime

def chuyen_doi_dinh_dang_ngay_thang(ngay_thang, dinh_dang_cu,


dinh_dang_moi):
"""
Hàm để chuyển đổi định dạng ngày tháng.
"""
# Chuyển đổi chuỗi ngày tháng thành đối tượng datetime
ngay_thang_obj = datetime.strptime(ngay_thang,
dinh_dang_cu)

# Chuyển đổi đối tượng datetime thành chuỗi theo định


dạng mới
ngay_thang_moi = ngay_thang_obj.strftime(dinh_dang_moi)

return ngay_thang_moi
# Định dạng cũ và mới
ngay_thang_cu = "24-05-2024"
dinh_dang_cu = "%d-%m-%Y"
dinh_dang_moi = "%Y/%m/%d"

# Gọi hàm và in kết quả


ngay_thang_moi =
chuyen_doi_dinh_dang_ngay_thang(ngay_thang_cu, dinh_dang_cu,
dinh_dang_moi)
print("Ngày tháng mới theo định dạng:", ngay_thang_moi)

Giải thích code


from datetime import datetime: Import lớp datetime từ thư
viện datetime.
datetime.strptime(ngay_thang, dinh_dang_cu): Chuyển đổi
chuỗi ngày tháng thành đối tượng datetime theo định dạng ban
đầu.
ngay_thang_obj.strftime(dinh_dang_moi): Chuyển đổi đối
tượng datetime thành chuỗi ngày tháng theo định dạng mới.
chuyen_doi_dinh_dang_ngay_thang(ngay_thang, dinh_dang_cu,
dinh_dang_moi): Hàm này nhận đầu vào là chuỗi ngày tháng và
hai định dạng (cũ và mới), sau đó trả về chuỗi ngày tháng theo
định dạng mới.

Tóm tắt
Import thư viện datetime.
Sử dụng datetime.strptime() để chuyển đổi chuỗi ngày tháng
thành đối tượng datetime theo định dạng ban đầu.
Sử dụng strftime() để chuyển đổi đối tượng datetime thành
chuỗi ngày tháng theo định dạng mới.
In ra kết quả ngày tháng theo định dạng mới.
Chương trình chuyển đổi định dạng ngày tháng từ định dạng này
sang định dạng khác bằng cách sử dụng thư viện datetime trong
Python.
115 - Viết chương trình để tính thời
gian chênh lệch giữa hai ngày

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tính thời gian chênh
lệch giữa hai ngày.

Thuật toán giải quyết


1. Nhận đầu vào là hai chuỗi ngày tháng theo định dạng cố định.
2. Sử dụng thư viện datetime để chuyển đổi chuỗi ngày tháng
thành đối tượng datetime.
3. Tính toán chênh lệch giữa hai ngày bằng cách trừ hai đối tượng
datetime.
4. Xuất kết quả là chênh lệch thời gian giữa hai ngày.

Code Python
from datetime import datetime

def tinh_thoi_gian_chenh_lech(ngay1, ngay2, dinh_dang):


"""
Hàm để tính thời gian chênh lệch giữa hai ngày.
"""
# Chuyển đổi chuỗi ngày tháng thành đối tượng datetime
ngay1_obj = datetime.strptime(ngay1, dinh_dang)
ngay2_obj = datetime.strptime(ngay2, dinh_dang)

# Tính toán chênh lệch thời gian


chenh_lech = ngay2_obj - ngay1_obj

return chenh_lech
# Ngày tháng đầu vào
ngay1 = "01-01-2020"
ngay2 = "24-05-2024"
dinh_dang = "%d-%m-%Y"

# Gọi hàm và in kết quả


chenh_lech = tinh_thoi_gian_chenh_lech(ngay1, ngay2,
dinh_dang)
print("Chênh lệch thời gian giữa hai ngày là:", chenh_lech)

Giải thích code


from datetime import datetime: Import lớp datetime từ thư
viện datetime.
datetime.strptime(ngay1, dinh_dang),
datetime.strptime(ngay2, dinh_dang): Chuyển đổi chuỗi ngày
tháng thành đối tượng datetime theo định dạng được chỉ định.
ngay2_obj - ngay1_obj: Tính toán chênh lệch thời gian giữa hai
đối tượng datetime.
tinh_thoi_gian_chenh_lech(ngay1, ngay2, dinh_dang): Hàm
này nhận đầu vào là hai chuỗi ngày tháng và định dạng, sau đó
trả về chênh lệch thời gian giữa hai ngày.

Tóm tắt
Import thư viện datetime.
Sử dụng datetime.strptime() để chuyển đổi chuỗi ngày tháng
thành đối tượng datetime.
Tính toán chênh lệch giữa hai ngày bằng cách trừ hai đối tượng
datetime.
In ra chênh lệch thời gian giữa hai ngày.

Chương trình tính toán chênh lệch thời gian giữa hai ngày bằng
cách sử dụng thư viện datetime trong Python.
116 - Viết chương trình để tính thời
gian chênh lệch giữa hai thời gian

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tính thời gian chênh
lệch giữa hai thời gian.

Thuật toán giải quyết


1. Nhận đầu vào là hai chuỗi thời gian theo định dạng cố định.
2. Sử dụng thư viện datetime để chuyển đổi chuỗi thời gian thành
đối tượng datetime.
3. Tính toán chênh lệch giữa hai thời gian bằng cách trừ hai đối
tượng datetime.
4. Xuất kết quả là chênh lệch thời gian giữa hai thời gian.

Code Python
from datetime import datetime

def tinh_thoi_gian_chenh_lech(thoi_gian1, thoi_gian2,


dinh_dang):
"""
Hàm để tính thời gian chênh lệch giữa hai thời gian.
"""
# Chuyển đổi chuỗi thời gian thành đối tượng datetime
thoi_gian1_obj = datetime.strptime(thoi_gian1, dinh_dang)
thoi_gian2_obj = datetime.strptime(thoi_gian2, dinh_dang)

# Tính toán chênh lệch thời gian


chenh_lech = thoi_gian2_obj - thoi_gian1_obj

return chenh_lech
# Thời gian đầu vào
thoi_gian1 = "14:30:00"
thoi_gian2 = "18:45:00"
dinh_dang = "%H:%M:%S"

# Gọi hàm và in kết quả


chenh_lech = tinh_thoi_gian_chenh_lech(thoi_gian1,
thoi_gian2, dinh_dang)
print("Chênh lệch thời gian giữa hai thời gian là:",
chenh_lech)

Giải thích code


from datetime import datetime: Import lớp datetime từ thư
viện datetime.
datetime.strptime(thoi_gian1, dinh_dang),
datetime.strptime(thoi_gian2, dinh_dang): Chuyển đổi chuỗi
thời gian thành đối tượng datetime theo định dạng được chỉ
định.
thoi_gian2_obj - thoi_gian1_obj: Tính toán chênh lệch thời
gian giữa hai đối tượng datetime.
tinh_thoi_gian_chenh_lech(thoi_gian1, thoi_gian2,
dinh_dang): Hàm này nhận đầu vào là hai chuỗi thời gian và
định dạng, sau đó trả về chênh lệch thời gian giữa hai thời gian.

Tóm tắt
Import thư viện datetime.
Sử dụng datetime.strptime() để chuyển đổi chuỗi thời gian
thành đối tượng datetime.
Tính toán chênh lệch giữa hai thời gian bằng cách trừ hai đối
tượng datetime.
In ra chênh lệch thời gian giữa hai thời gian.
Chương trình tính toán chênh lệch thời gian giữa hai thời gian bằng
cách sử dụng thư viện datetime trong Python.
117 - Viết chương trình để tính số
ngày từ ngày hiện tại đến một ngày
nhất định

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tính số ngày từ ngày
hiện tại đến một ngày nhất định trong tương lai.

Thuật toán giải quyết


1. Sử dụng thư viện datetime để lấy ngày hiện tại.
2. Nhận đầu vào là một chuỗi ngày tháng của ngày đích theo định
dạng cố định.
3. Chuyển đổi chuỗi ngày tháng của ngày đích thành đối tượng
datetime.
4. Tính toán chênh lệch giữa ngày hiện tại và ngày đích bằng cách
trừ hai đối tượng datetime.
5. Xuất kết quả là số ngày chênh lệch.

Code Python
from datetime import datetime

def tinh_so_ngay_den_ngay_dich(ngay_dich, dinh_dang):


"""
Hàm để tính số ngày từ ngày hiện tại đến một ngày nhất
định.
"""
# Lấy ngày hiện tại
ngay_hien_tai = datetime.now()

# Chuyển đổi chuỗi ngày tháng của ngày đích thành đối
tượng datetime
ngay_dich_obj = datetime.strptime(ngay_dich, dinh_dang)

# Tính toán chênh lệch ngày


chenh_lech = ngay_dich_obj - ngay_hien_tai

return chenh_lech.days

# Ngày đích đầu vào


ngay_dich = "31-12-2024"
dinh_dang = "%d-%m-%Y"

# Gọi hàm và in kết quả


so_ngay = tinh_so_ngay_den_ngay_dich(ngay_dich, dinh_dang)
print("Số ngày từ ngày hiện tại đến ngày đích là:", so_ngay)

Giải thích code


from datetime import datetime: Import lớp datetime từ thư
viện datetime.
datetime.now(): Lấy ngày hiện tại.
datetime.strptime(ngay_dich, dinh_dang): Chuyển đổi chuỗi
ngày tháng của ngày đích thành đối tượng datetime theo định
dạng được chỉ định.
ngay_dich_obj - ngay_hien_tai: Tính toán chênh lệch ngày
giữa hai đối tượng datetime.
chenh_lech.days: Lấy số ngày từ đối tượng timedelta (kết quả
của phép trừ hai đối tượng datetime).
tinh_so_ngay_den_ngay_dich(ngay_dich, dinh_dang): Hàm này
nhận đầu vào là một chuỗi ngày tháng của ngày đích và định
dạng, sau đó trả về số ngày chênh lệch từ ngày hiện tại đến
ngày đích.

Tóm tắt
Import thư viện datetime.
Lấy ngày hiện tại bằng datetime.now().
Sử dụng datetime.strptime() để chuyển đổi chuỗi ngày tháng
của ngày đích thành đối tượng datetime.
Tính toán chênh lệch ngày bằng cách trừ hai đối tượng
datetime.
Lấy số ngày chênh lệch từ đối tượng timedelta và in ra kết quả.

Chương trình tính số ngày từ ngày hiện tại đến một ngày nhất định
trong tương lai bằng cách sử dụng thư viện datetime trong Python.
118 - Viết chương trình để tính số giây
từ thời gian hiện tại đến một thời gian
nhất định

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tính số giây từ thời
gian hiện tại đến một thời gian nhất định trong tương lai.

Thuật toán giải quyết


1. Sử dụng thư viện datetime để lấy thời gian hiện tại.
2. Nhận đầu vào là một chuỗi thời gian của thời gian đích theo định
dạng cố định.
3. Chuyển đổi chuỗi thời gian của thời gian đích thành đối tượng
datetime.
4. Tính toán chênh lệch giữa thời gian hiện tại và thời gian đích
bằng cách trừ hai đối tượng datetime.
5. Xuất kết quả là số giây chênh lệch.

Code Python
from datetime import datetime

def tinh_so_giay_den_thoi_gian_dich(thoi_gian_dich,
dinh_dang):
"""
Hàm để tính số giây từ thời gian hiện tại đến một thời
gian nhất định.
"""
# Lấy thời gian hiện tại
thoi_gian_hien_tai = datetime.now()
# Chuyển đổi chuỗi thời gian của thời gian đích thành đối
tượng datetime
thoi_gian_dich_obj = datetime.strptime(thoi_gian_dich,
dinh_dang)

# Tính toán chênh lệch thời gian


chenh_lech = thoi_gian_dich_obj - thoi_gian_hien_tai

return chenh_lech.total_seconds()

# Thời gian đích đầu vào


thoi_gian_dich = "31-12-2024 23:59:59"
dinh_dang = "%d-%m-%Y %H:%M:%S"

# Gọi hàm và in kết quả


so_giay = tinh_so_giay_den_thoi_gian_dich(thoi_gian_dich,
dinh_dang)
print("Số giây từ thời gian hiện tại đến thời gian đích là:",
so_giay)

Giải thích code


from datetime import datetime: Import lớp datetime từ thư
viện datetime.
datetime.now(): Lấy thời gian hiện tại.
datetime.strptime(thoi_gian_dich, dinh_dang): Chuyển đổi
chuỗi thời gian của thời gian đích thành đối tượng datetime theo
định dạng được chỉ định.
thoi_gian_dich_obj - thoi_gian_hien_tai: Tính toán chênh
lệch thời gian giữa hai đối tượng datetime.
chenh_lech.total_seconds(): Lấy số giây từ đối tượng
timedelta (kết quả của phép trừ hai đối tượng datetime).
tinh_so_giay_den_thoi_gian_dich(thoi_gian_dich,
dinh_dang): Hàm này nhận đầu vào là một chuỗi thời gian của
thời gian đích và định dạng, sau đó trả về số giây chênh lệch từ
thời gian hiện tại đến thời gian đích.
Tóm tắt
Import thư viện datetime.
Lấy thời gian hiện tại bằng datetime.now().
Sử dụng datetime.strptime() để chuyển đổi chuỗi thời gian
của thời gian đích thành đối tượng datetime.
Tính toán chênh lệch thời gian bằng cách trừ hai đối tượng
datetime.
Lấy số giây chênh lệch từ đối tượng timedelta và in ra kết quả.

Chương trình tính số giây từ thời gian hiện tại đến một thời gian
nhất định trong tương lai bằng cách sử dụng thư viện datetime trong
Python.
119 - Viết chương trình để in lịch của
một tháng nhất định

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để in lịch của một tháng
nhất định.

Thuật toán giải quyết


1. Sử dụng thư viện calendar trong Python.
2. Nhận đầu vào là năm và tháng.
3. Sử dụng phương thức month() của đối tượng TextCalendar để
in lịch của tháng.

Code Python
import calendar

def in_lich_thang(nam, thang):


"""
Hàm để in lịch của một tháng nhất định.
"""
# Tạo đối tượng TextCalendar
cal = calendar.TextCalendar(calendar.SUNDAY)

# In lịch của tháng


# Lấy chuỗi lịch của tháng
# - nam: năm
# - thang: tháng
# - return:
# - chuỗi lịch của tháng
# - mỗi hàng của lịch là một tuần, bắt đầu từ thứ hai
# - mỗi tuần bắt đầu từ chủ nhật
# - mỗi ngày được in ra với độ rộng 3 ký tự
# - mỗi hàng có độ rộng 20 ký tự
# - mỗi hàng được kết thúc bởi ký tự xuống dòng
# - mỗi tháng bắt đầu bởi một hàng trống
# - mỗi tháng kết thúc bởi hai hàng trống
# Lưu ý: Đối số thứ hai của hàm formatmonth() là thứ bắt
đầu của tuần
lich_thang = cal.formatmonth(nam, thang)

# In lịch
print(lich_thang)

# Năm và tháng đầu vào


nam = 2024
thang = 5

# Gọi hàm và in kết quả


in_lich_thang(nam, thang)

Giải thích code


import calendar: Import thư viện calendar.
calendar.TextCalendar(calendar.SUNDAY): Tạo đối tượng
TextCalendar với tuần bắt đầu từ Chủ nhật.
cal.formatmonth(nam, thang): Lấy lịch của tháng theo năm và
tháng được cung cấp dưới dạng chuỗi.
print(lich_thang): In lịch của tháng ra màn hình.
in_lich_thang(nam, thang): Hàm này nhận đầu vào là năm và
tháng, sau đó in lịch của tháng tương ứng.

Tóm tắt
Import thư viện calendar.
Tạo đối tượng TextCalendar với tuần bắt đầu từ Chủ nhật.
Sử dụng phương thức formatmonth() của đối tượng
TextCalendar để lấy lịch của tháng dưới dạng chuỗi.
In lịch của tháng ra màn hình.

Chương trình này in lịch của một tháng nhất định bằng cách sử
dụng thư viện calendar trong Python.
120 - Viết chương trình để in lịch của
một năm nhất định

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để in lịch của một năm
nhất định.

Thuật toán giải quyết


1. Sử dụng thư viện calendar trong Python.
2. Nhận đầu vào là năm.
3. Sử dụng phương thức prcal() của đối tượng TextCalendar để
in lịch của năm.

Code Python
import calendar

def in_lich_nam(nam):
"""
Hàm để in lịch của một năm nhất định.
"""
# Tạo đối tượng TextCalendar
cal = calendar.TextCalendar(calendar.SUNDAY)

# In lịch của năm


lich_nam = cal.formatyear(nam)
print(lich_nam)

# Năm đầu vào


nam = 2024
# Gọi hàm và in kết quả
in_lich_nam(nam)

Giải thích code


import calendar: Import thư viện calendar.
calendar.TextCalendar(calendar.SUNDAY): Tạo đối tượng
TextCalendar với tuần bắt đầu từ Chủ nhật.
cal.formatyear(nam): Lấy lịch của năm dưới dạng chuỗi.
print(lich_nam): In lịch của năm ra màn hình.
in_lich_nam(nam): Hàm này nhận đầu vào là năm, sau đó in lịch
của năm tương ứng.

Tóm tắt
Import thư viện calendar.
Tạo đối tượng TextCalendar với tuần bắt đầu từ Chủ nhật.
Sử dụng phương thức formatyear() của đối tượng
TextCalendar để lấy lịch của năm dưới dạng chuỗi.
In lịch của năm ra màn hình.

Chương trình này in lịch của một năm nhất định bằng cách sử dụng
thư viện calendar trong Python.
Chương 13 : Lập trình hàm
121. Viết chương trình để sử dụng hàm map để nhân đôi các phần tử
trong danh sách.
122. Viết chương trình để sử dụng hàm filter để lọc các số chẵn trong
danh sách.
123. Viết chương trình để sử dụng hàm reduce để tính tổng các phần
tử trong danh sách.
124. Viết chương trình để sử dụng hàm lambda để tính lũy thừa của
một số.
125. Viết chương trình để sử dụng hàm lambda để kiểm tra số chẵn
lẻ.
126. Viết chương trình để sử dụng hàm map với lambda để nhân đôi
các phần tử trong danh sách.
127. Viết chương trình để sử dụng hàm filter với lambda để lọc các số
lớn hơn 10 trong danh sách.
128. Viết chương trình để sử dụng hàm reduce với lambda để tính
tích các phần tử trong danh sách.
129. Viết chương trình để sử dụng hàm lambda để sắp xếp danh
sách từ điển theo giá trị.
130. Viết chương trình để sử dụng hàm lambda để tìm số lớn nhất
trong danh sách.
121 - Viết chương trình để sử dụng
hàm map để nhân đôi các phần tử
trong danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
map() để nhân đôi các phần tử trong một danh sách.

Thuật toán giải quyết


1. Nhận đầu vào là một danh sách các số.
2. Định nghĩa một hàm nhân đôi một số.
3. Sử dụng hàm map() để áp dụng hàm nhân đôi lên mỗi phần tử
của danh sách.
4. Xuất kết quả là danh sách mới với các phần tử đã được nhân
đôi.

Code Python
def double(n):
"""
Hàm để nhân đôi một số.
"""
return n * 2

# Danh sách đầu vào


numbers = [1, 2, 3, 4, 5]

# Sử dụng hàm map để nhân đôi các phần tử trong danh sách
doubled_numbers = list(map(double, numbers))
print("Danh sách sau khi nhân đôi các phần tử:",
doubled_numbers)

Giải thích code


double(n): Hàm này nhận vào một số n và trả về số đó nhân 2.
list(map(double, numbers)): Hàm map() nhận vào hàm double
và danh sách numbers, sau đó áp dụng hàm double lên mỗi phần
tử của numbers. Kết quả trả về của map() là một đối tượng map,
nên chúng ta cần chuyển nó thành danh sách bằng hàm list().

Bổ sung
Các cách giải khác:

1. Sử dụng list comprehension:


doubled_numbers = [n * 2 for n in numbers]

2. Sử dụng vòng lặp for:


doubled_numbers = []
for n in numbers:
doubled_numbers.append(n * 2)

Tóm tắt
Sử dụng hàm map() trong Python để áp dụng một hàm cho mỗi
phần tử của một iterable (như danh sách).
Sử dụng hàm list() để chuyển đổi một iterable thành một danh
sách.

Chương trình này minh họa cách sử dụng hàm map() trong Python
để thực hiện các phép toán trên mỗi phần tử của một danh sách.
122 - Viết chương trình để sử dụng
hàm filter để lọc các số chẵn trong
danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
filter() để lọc ra các số chẵn từ một danh sách.

Thuật toán giải quyết


1. Nhận đầu vào là một danh sách các số.
2. Định nghĩa một hàm kiểm tra một số có phải là số chẵn hay
không.
3. Sử dụng hàm filter() để áp dụng hàm kiểm tra lên mỗi phần
tử của danh sách.
4. Xuất kết quả là danh sách mới chỉ chứa các số chẵn.

Code Python
def is_even(n):
"""
Hàm để kiểm tra một số có phải là số chẵn hay không.
"""
return n % 2 == 0

# Danh sách đầu vào


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Sử dụng hàm filter để lọc các số chẵn trong danh sách


even_numbers = list(filter(is_even, numbers))

print("Danh sách các số chẵn:", even_numbers)


Giải thích code
is_even(n): Hàm này nhận vào một số n và kiểm tra xem số đó
có phải là số chẵn hay không bằng cách sử dụng phép chia lấy
dư cho 2.
list(filter(is_even, numbers)): Hàm filter() nhận vào hàm
is_even và danh sách numbers, sau đó áp dụng hàm is_even lên
mỗi phần tử của numbers. Kết quả trả về của filter() là một đối
tượng filter, nên chúng ta cần chuyển nó thành danh sách bằng
hàm list().

Bổ sung
Các cách giải khác:

1. Sử dụng list comprehension:


even_numbers = [n for n in numbers if n % 2 == 0]

2. Sử dụng vòng lặp for:


even_numbers = []
for n in numbers:
if n % 2 == 0:
even_numbers.append(n)

Tóm tắt
Sử dụng hàm filter() trong Python để lọc các phần tử trong
một iterable (như danh sách) dựa trên một hàm kiểm tra.
Sử dụng hàm list() để chuyển đổi một iterable thành một danh
sách.

Chương trình này minh họa cách sử dụng hàm filter() trong
Python để lọc ra các số chẵn từ một danh sách.
124 - Viết chương trình để sử dụng
hàm reduce để tính tổng các phần tử
trong danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
reduce() để tính tổng các phần tử trong một danh sách.

Thuật toán giải quyết


1. Nhận đầu vào là một danh sách các số.
2. Định nghĩa một hàm để tính tổng hai số.
3. Sử dụng hàm reduce() để áp dụng hàm tính tổng lên mỗi phần
tử của danh sách.
4. Xuất kết quả là tổng của các phần tử trong danh sách.

Code Python
from functools import reduce

def add(x, y):


"""
Hàm để tính tổng hai số.
"""
return x + y

# Danh sách đầu vào


numbers = [1, 2, 3, 4, 5]

# Sử dụng hàm reduce để tính tổng các phần tử trong danh sách
total = reduce(add, numbers)
print("Tổng các phần tử trong danh sách:", total)

Giải thích code


add(x, y): Hàm này nhận vào hai số x và y và trả về tổng của
chúng.
reduce(add, numbers): Hàm reduce() nhận vào hàm add và
danh sách numbers, sau đó áp dụng hàm add lên mỗi phần tử
của numbers để tính tổng.

Bổ sung
Các cách giải khác:

1. Sử dụng hàm
sum()`: `total = sum(numbers)

2. Sử dụng vòng lặp for:


total = 0
for n in numbers:
total += n

Tóm tắt
Sử dụng hàm reduce() từ module functools trong Python để áp
dụng một hàm lên mỗi phần tử của một iterable (như danh sách)
theo cách giảm dần.

Chương trình này minh họa cách sử dụng hàm reduce() trong
Python để tính tổng các phần tử trong một danh sách.
124 - Viết chương trình để sử dụng
hàm lambda để tính lũy thừa của một
số

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
lambda để tính lũy thừa của một số.

Thuật toán giải quyết


1. Nhận đầu vào là một số và một số mũ.
2. Định nghĩa một hàm lambda để tính lũy thừa của một số.
3. Áp dụng hàm lambda lên số và số mũ.
4. Xuất kết quả là lũy thừa của số.

Code Python
# Định nghĩa hàm lambda để tính lũy thừa của một số
power = lambda x, y: x ** y

# Số và số mũ
number = 2
exponent = 3

# Tính lũy thừa của số


result = power(number, exponent)

print(f"{number} lũy thừa {exponent} là: {result}")


Giải thích code
power = lambda x, y: x ** y: Định nghĩa một hàm lambda
power nhận vào hai số x và y, và trả về lũy thừa của x với y (tức
là x mũ y).
power(number, exponent): Áp dụng hàm lambda power lên
number và exponent để tính lũy thừa của number.

Tóm tắt
Sử dụng hàm lambda trong Python để định nghĩa một hàm ẩn
danh ngắn gọn.
Hàm lambda có thể nhận bất kỳ số lượng đối số nào và trả về
một giá trị.

Chương trình này minh họa cách sử dụng hàm lambda trong Python
để tính lũy thừa của một số.
125 - Viết chương trình để sử dụng
hàm lambda để kiểm tra số chẵn lẻ

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
lambda để kiểm tra một số là chẵn hay lẻ.

Hàm Lambda
Hàm lambda trong Python là một hàm ẩn danh nhỏ, không tên,
được định nghĩa bằng từ khóa lambda. Hàm lambda có thể nhận bất
kỳ số lượng đối số nào nhưng chỉ có thể có một biểu thức. Giá trị
của biểu thức này sẽ được trả về.

Trong đoạn mã bạn đã cung cấp, hàm lambda is_even nhận vào
một đối số x và trả về “Chẵn” nếu x chia hết cho 2 (tức là x là số
chẵn), và trả về “Lẻ” nếu không (tức là x là số lẻ).

Hàm lambda thường được sử dụng trong các trường hợp cần một
hàm nhỏ và ngắn gọn, không cần tái sử dụng, như làm đối số cho
các hàm như map(), filter(), reduce(), hoặc làm hàm callback
trong các hàm hoặc phương thức nhận hàm callback.

Thuật toán giải quyết


1. Nhận đầu vào là một số.
2. Định nghĩa một hàm lambda để kiểm tra một số là chẵn hay lẻ.
3. Áp dụng hàm lambda lên số.
4. Xuất kết quả là “Chẵn” nếu số là chẵn, và “Lẻ” nếu số là lẻ.
Code Python
# Định nghĩa hàm lambda để kiểm tra một số là chẵn hay lẻ
is_even = lambda x: "Chẵn" if x % 2 == 0 else "Lẻ"

# Số cần kiểm tra


number = 3

# Kiểm tra số là chẵn hay lẻ


result = is_even(number)

print(f"Số {number} là: {result}")

Giải thích code


is_even = lambda x: "Chẵn" if x % 2 == 0 else "Lẻ": Định
nghĩa một hàm lambda is_even nhận vào một số x, và trả về
“Chẵn” nếu x chia hết cho 2 (tức là x là số chẵn), và trả về “Lẻ”
nếu không (tức là x là số lẻ).
is_even(number): Áp dụng hàm lambda is_even lên number để
kiểm tra number là chẵn hay lẻ.

Tóm tắt
Sử dụng hàm lambda trong Python để định nghĩa một hàm ẩn
danh ngắn gọn.
Hàm lambda có thể nhận bất kỳ số lượng đối số nào và trả về
một giá trị.

Chương trình này minh họa cách sử dụng hàm lambda trong Python
để kiểm tra một số là chẵn hay lẻ.
126 - Viết chương trình để sử dụng
hàm map với lambda để nhân đôi các
phần tử trong danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
map() và hàm lambda để nhân đôi các phần tử trong một danh sách.

Thuật toán

Đầu vào
Một danh sách các số.

Đầu ra
Một danh sách mới với các phần tử đã được nhân đôi.

Các bước thực hiện


1. Định nghĩa một hàm lambda để nhân đôi một số.
2. Sử dụng hàm map() để áp dụng hàm lambda lên từng phần tử
của danh sách.
3. Chuyển đổi kết quả trả về từ map() thành danh sách.
4. Xuất danh sách kết quả.
Code Python
# Định nghĩa hàm lambda để nhân đôi một số
double = lambda x: x * 2

# Danh sách cần nhân đôi các phần tử


numbers = [1, 2, 3, 4, 5]

# Nhân đôi các phần tử trong danh sách


result = list(map(double, numbers))

print(f"Danh sách sau khi nhân đôi các phần tử: {result}")

Giải thích code


double = lambda x: x * 2: Định nghĩa một hàm lambda double
nhận vào một số x, và trả về x nhân 2.
list(map(double, numbers)): Sử dụng hàm map() để áp dụng
hàm lambda double lên từng phần tử của numbers. Hàm map()
trả về một đối tượng map, nên cần chuyển đổi nó thành danh
sách bằng hàm list().

Bổ sung
Cách giải khác: Sử dụng list comprehension
result = [x * 2 for x in numbers]

Tóm tắt
Sử dụng hàm lambda trong Python để định nghĩa một hàm ẩn
danh ngắn gọn.
Sử dụng hàm map() để áp dụng một hàm lên từng phần tử của
một danh sách.
Chuyển đổi đối tượng map thành danh sách bằng hàm list().
Chương trình này minh họa cách sử dụng hàm map() và hàm lambda
trong Python để nhân đôi các phần tử trong một danh sách.
127 - Viết chương trình để sử dụng
hàm filter với lambda để lọc các số
lớn hơn 10 trong danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
filter() và hàm lambda để lọc ra các số lớn hơn 10 từ một danh
sách.

Thuật toán

Đầu vào
Một danh sách các số.

Đầu ra
Một danh sách mới chỉ chứa các số lớn hơn 10.

Các bước thực hiện


1. Định nghĩa một hàm lambda để kiểm tra một số có lớn hơn 10
hay không.
2. Sử dụng hàm filter() để áp dụng hàm lambda lên từng phần
tử của danh sách.
3. Chuyển đổi kết quả trả về từ filter() thành danh sách.
4. Xuất danh sách kết quả.
Code Python
# Định nghĩa hàm lambda để kiểm tra một số có lớn hơn 10 hay
không
greater_than_10 = lambda x: x > 10

# Danh sách cần lọc các số lớn hơn 10


numbers = [5, 10, 15, 20, 25]

# Lọc các số lớn hơn 10 trong danh sách


result = list(filter(greater_than_10, numbers))

print(f"Danh sách sau khi lọc các số lớn hơn 10: {result}")

Giải thích code


greater_than_10 = lambda x: x > 10:
Định nghĩa một hàm lambda greater_than_10 nhận vào một
số x, và kiểm tra x có lớn hơn 10 hay không.
list(filter(greater_than_10, numbers)):
Sử dụng hàm filter() để áp dụng hàm lambda
greater_than_10 lên từng phần tử của numbers.
Hàm filter() trả về một đối tượng filter, nên cần chuyển
đổi nó thành danh sách bằng hàm list().

Bổ sung
Cách giải khác: Sử dụng list comprehension
result = [x for x in numbers if x > 10]

Tóm tắt
Sử dụng hàm lambda trong Python để định nghĩa một hàm ẩn
danh ngắn gọn.
Sử dụng hàm filter() để lọc các phần tử trong một danh sách
theo một điều kiện nào đó.
Chuyển đổi đối tượng filter thành danh sách bằng hàm
list().

Chương trình này minh họa cách sử dụng hàm filter() và hàm
lambda trong Python để lọc ra các số lớn hơn 10 từ một danh sách.
128 - Viết chương trình để sử dụng
hàm reduce với lambda để tính tích
các phần tử trong danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
reduce() và hàm lambda để tính tích của tất cả các phần tử trong
một danh sách.

Thuật toán

Đầu vào
Một danh sách các số.

Đầu ra
Tích của tất cả các phần tử trong danh sách.

Các bước thực hiện


1. Import hàm reduce() từ module functools.
2. Định nghĩa một hàm lambda để nhân hai số lại với nhau.
3. Sử dụng hàm reduce() để áp dụng hàm lambda lên từng cặp
phần tử của danh sách.
4. Xuất kết quả.
Code Python
from functools import reduce

# Định nghĩa hàm lambda để nhân hai số lại với nhau


multiply = lambda x, y: x * y

# Danh sách cần tính tích các phần tử


numbers = [1, 2, 3, 4, 5]

# Tính tích các phần tử trong danh sách


result = reduce(multiply, numbers)

print(f"Tích của các phần tử trong danh sách: {result}")

Giải thích code


from functools import reduce:
Import hàm reduce() từ module functools.
multiply = lambda x, y: x * y:
Định nghĩa một hàm lambda multiply nhận vào hai số x và
y, và trả về tích của x và y.
reduce(multiply, numbers):
Sử dụng hàm reduce() để áp dụng hàm lambda multiply
lên từng cặp phần tử của numbers.

Bổ sung
Sử dụng vòng lặp:
result = 1
for num in numbers:
result *= num
Tóm tắt
Sử dụng hàm lambda trong Python để định nghĩa một hàm ẩn
danh ngắn gọn.
Sử dụng hàm reduce() từ module functools để tính toán trên
từng cặp phần tử của một danh sách.

Chương trình này minh họa cách sử dụng hàm reduce() và hàm
lambda trong Python để tính tích của tất cả các phần tử trong một
danh sách.
129 - Viết chương trình để sử dụng
hàm lambda để sắp xếp danh sách từ
điển theo giá trị

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
lambda để sắp xếp một danh sách từ điển theo giá trị.

Thuật toán

Đầu vào
Một danh sách các từ điển.

Đầu ra
Danh sách đã được sắp xếp theo giá trị.

Các bước thực hiện


1. Định nghĩa một hàm lambda để lấy giá trị từ một từ điển.
2. Sử dụng hàm sorted() để sắp xếp danh sách từ điển theo giá
trị.
3. Xuất danh sách đã được sắp xếp.

Code Python
# Danh sách từ điển cần sắp xếp
dict_list = [{'name': 'John', 'age': 20}, {'name': 'Jane',
'age': 22}, {'name': 'Doe', 'age': 19}]

# Sắp xếp danh sách từ điển theo giá trị của 'age'
sorted_list = sorted(dict_list, key=lambda x: x['age'])

print(f"Danh sách sau khi sắp xếp: {sorted_list}")

Giải thích code


sorted(dict_list, key=lambda x: x['age']): Sử dụng hàm
sorted() để sắp xếp dict_list. Tham số key của hàm sorted()
được đặt là một hàm lambda nhận vào một từ điển x và trả về
giá trị của 'age' trong x.

Bổ sung
Cách giải khác: Sử dụng hàm sort() của danh sách:
dict_list.sort(key=lambda x: x['age'])

Tóm tắt
Sử dụng hàm lambda trong Python để định nghĩa một hàm ẩn
danh ngắn gọn.
Sử dụng hàm sorted() để sắp xếp một danh sách theo một tiêu
chí nào đó.

Chương trình này minh họa cách sử dụng hàm lambda trong Python
để sắp xếp một danh sách từ điển theo giá trị.
130 - Viết chương trình để sử dụng
hàm lambda để tìm số lớn nhất trong
danh sách

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python sử dụng hàm
lambda để tìm số lớn nhất trong một danh sách.

Thuật toán

Đầu vào
Một danh sách các số.

Đầu ra
Số lớn nhất trong danh sách.

Các bước thực hiện


1. Sử dụng hàm max() để tìm số lớn nhất trong danh sách.
2. Xuất số lớn nhất.

Code Python
# Danh sách cần tìm số lớn nhất
numbers = [1, 2, 3, 4, 5]

# Tìm số lớn nhất trong danh sách


max_number = max(numbers, key=lambda x: x)

print(f"Số lớn nhất trong danh sách: {max_number}")

Giải thích code


max(numbers, key=lambda x: x): Sử dụng hàm max() để tìm số
lớn nhất trong numbers. Tham số key của hàm max() được đặt là
một hàm lambda nhận vào một số x và trả về x.

Bổ sung
Cách giải khác: Sử dụng vòng lặp:
max_number = numbers[0]
for num in numbers:
if num > max_number:
max_number = num

Tóm tắt
Sử dụng hàm lambda trong Python để định nghĩa một hàm ẩn
danh ngắn gọn.
Sử dụng hàm max() để tìm số lớn nhất trong một danh sách.

Chương trình này minh họa cách sử dụng hàm lambda trong Python
để tìm số lớn nhất trong một danh sách.
Chương 14 : Bài toán thuật
toán
131. Viết chương trình để tính dãy Fibonacci.
132. Viết chương trình để in ra 10 số hạnh phúc đầu tiên.
133. Viết chương trình để tìm bội số chung nhỏ nhất của hai số.
134. Viết chương trình để kiểm tra một số có phải là số nguyên tố
không.
135. Viết chương trình để tìm tất cả các số nguyên tố từ 1 đến 100.
136. Viết chương trình để tính tổng các số từ 1 đến n.
137. Viết chương trình để tính sin & cos bằng các triển khai chuỗi
Taylor.
138. Viết chương trình để tính Lôgarit tự nhiên ln.
139. Viết chương trình để in ra n số hoàn hảo đầu tiên.
140. Viết chương trình để in ra các số Armstrong từ 1 đến 1000.
131 - Viết chương trình để tính dãy
Fibonacci

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tính dãy Fibonacci
bằng hai phương pháp: sử dụng vòng lặp for và sử dụng đệ quy.

Thuật toán giải quyết


1. Phương pháp sử dụng vòng lặp for:

Tạo hai biến để lưu hai số đầu tiên của dãy Fibonacci.
Sử dụng vòng lặp để tính các số Fibonacci tiếp theo.
Lưu các số Fibonacci vào danh sách và trả về danh sách đó.

2. Phương pháp sử dụng đệ quy:

Định nghĩa một hàm đệ quy để tính số Fibonacci tại vị trí n.


Gọi hàm đệ quy này để tính và in các số Fibonacci.

Code Python

Phương pháp sử dụng vòng lặp for


def fibonacci_for(n):
"""
Hàm để tính dãy Fibonacci sử dụng vòng lặp for.
"""
if n <= 0:
return []
elif n == 1:
return [0]
elif n == 2:
return [0, 1]

fibo_seq = [0, 1]
for i in range(2, n):
next_fibo = fibo_seq[-1] + fibo_seq[-2]
fibo_seq.append(next_fibo)

return fibo_seq

# Số lượng phần tử Fibonacci cần tính


n = 10

# Gọi hàm và in kết quả


fibo_seq = fibonacci_for(n)
print("Dãy Fibonacci sử dụng vòng lặp for:", fibo_seq)

Phương pháp sử dụng đệ quy


def fibonacci_recursive(n):
"""
Hàm đệ quy để tính số Fibonacci tại vị trí n.
"""
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci_recursive(n-1) +
fibonacci_recursive(n-2)

def fibonacci_sequence_recursive(n):
"""
Hàm để tạo dãy Fibonacci sử dụng đệ quy.
"""
return [fibonacci_recursive(i) for i in range(n)]

# Số lượng phần tử Fibonacci cần tính


n = 10
# Gọi hàm và in kết quả
fibo_seq = fibonacci_sequence_recursive(n)
print("Dãy Fibonacci sử dụng đệ quy:", fibo_seq)

Giải thích code

Phương pháp sử dụng vòng lặp for


def fibonacci_for(n): Định nghĩa hàm tính dãy Fibonacci sử
dụng vòng lặp for.
if n <= 0: Kiểm tra nếu n <= 0, trả về danh sách rỗng.
elif n == 1: Nếu n == 1, trả về danh sách chứa số 0.
elif n == 2: Nếu n == 2, trả về danh sách chứa hai số đầu tiên
của dãy Fibonacci.
fibo_seq = [0, 1]: Khởi tạo danh sách chứa hai số đầu tiên
của dãy Fibonacci.
for i in range(2, n): Sử dụng vòng lặp để tính các số
Fibonacci tiếp theo.
next_fibo = fibo_seq[-1] + fibo_seq[-2]: Tính số Fibonacci
tiếp theo bằng cách cộng hai số cuối cùng trong danh sách.
fibo_seq.append(next_fibo): Thêm số Fibonacci tiếp theo vào
danh sách.

Phương pháp sử dụng đệ quy


def fibonacci_recursive(n): Định nghĩa hàm đệ quy để tính số
Fibonacci tại vị trí n.
if n <= 0: Kiểm tra nếu n <= 0, trả về 0.
elif n == 1: Nếu n == 1, trả về 1.
else: Tính số Fibonacci tại vị trí n bằng cách cộng số Fibonacci
tại vị trí n-1 và n-2.
def fibonacci_sequence_recursive(n): Định nghĩa hàm để tạo
dãy Fibonacci sử dụng đệ quy.
return [fibonacci_recursive(i) for i in range(n)]: Tạo
danh sách chứa các số Fibonacci bằng cách gọi hàm đệ quy.

Tóm tắt
Sử dụng vòng lặp for để tính dãy Fibonacci bằng cách khởi tạo
hai số đầu tiên và sử dụng vòng lặp để tính các số tiếp theo.
Sử dụng đệ quy để tính dãy Fibonacci bằng cách định nghĩa
hàm đệ quy để tính số Fibonacci tại vị trí n.
In kết quả dãy Fibonacci cho cả hai phương pháp.
132 - Viết chương trình để in ra 10 số
hạnh phúc đầu tiên

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để in ra 10 số hạnh phúc
đầu tiên.

Thuật toán giải quyết


1. Định nghĩa số hạnh phúc:

Một số hạnh phúc là một số tự nhiên mà khi thay thế nó


bằng tổng bình phương các chữ số của nó và lặp lại quá
trình này, bạn sẽ nhận được số 1.
Nếu không, bạn sẽ rơi vào một vòng lặp vô hạn.

2. Thuật toán:

Viết hàm để kiểm tra xem một số có phải là số hạnh phúc


hay không.
Sử dụng vòng lặp để tìm và in ra 10 số hạnh phúc đầu tiên.

Code Python
def is_happy_number(n):
"""
Hàm kiểm tra một số có phải là số hạnh phúc hay không.
"""
seen = set()
while n != 1 and n not in seen:
seen.add(n)
n = sum(int(char) ** 2 for char in str(n))
return n == 1
def first_n_happy_numbers(n):
"""
Hàm trả về danh sách n số hạnh phúc đầu tiên.
"""
happy_numbers = []
num = 1
while len(happy_numbers) < n:
if is_happy_number(num):
happy_numbers.append(num)
num += 1
return happy_numbers

# Số lượng số hạnh phúc cần tìm


n = 10

# Gọi hàm và in kết quả


happy_numbers = first_n_happy_numbers(n)
print("10 số hạnh phúc đầu tiên:", happy_numbers)

Giải thích code


def is_happy_number(n): Định nghĩa hàm kiểm tra một số có
phải là số hạnh phúc hay không.

seen = set(): Khởi tạo một tập hợp để lưu các số đã gặp.
while n != 1 and n not in seen: Lặp lại quá trình thay thế
cho đến khi nhận được số 1 hoặc gặp lại một số đã gặp.
seen.add(n): Thêm số hiện tại vào tập hợp.
n = sum(int(char) ** 2 for char in str(n)): Tính tổng
bình phương các chữ số của số hiện tại.
return n == 1: Trả về True nếu số hiện tại là 1, ngược lại là
False.

def first_n_happy_numbers(n): Định nghĩa hàm trả về danh


sách n số hạnh phúc đầu tiên.
happy_numbers = []: Khởi tạo danh sách để lưu các số hạnh
phúc.
num = 1:Bắt đầu kiểm tra từ số 1.
while len(happy_numbers) < n: Lặp lại quá trình kiểm tra
cho đến khi tìm đủ n số hạnh phúc.
if is_happy_number(num): Kiểm tra nếu số hiện tại là số
hạnh phúc.
happy_numbers.append(num): Thêm số hạnh phúc vào danh
sách.
num += 1: Tăng số hiện tại lên 1 để kiểm tra số tiếp theo.

Tóm tắt
Hàm và hàm tạo trong Python: Sử dụng hàm để tổ chức mã và
tái sử dụng mã.
Tập hợp (set): Sử dụng tập hợp để lưu các số đã gặp nhằm
tránh vòng lặp vô hạn.
Vòng lặp while và for: Sử dụng vòng lặp để kiểm tra các số và
tính tổng bình phương các chữ số.
Danh sách (list): Sử dụng danh sách để lưu các số hạnh phúc
tìm được.

Chương trình này tính và in ra 10 số hạnh phúc đầu tiên bằng cách
kiểm tra từng số một xem nó có phải là số hạnh phúc hay không và
lưu các số hạnh phúc tìm được vào một danh sách.
133 - Viết chương trình để tìm bội số
chung nhỏ nhất (BSCNN) của hai số

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để tìm bội số chung nhỏ
nhất (BSCNN) của hai số.

Thuật toán giải quyết


1. Định nghĩa BSCNN:

Bội số chung nhỏ nhất của hai số a và b là số nhỏ nhất chia


hết cho cả a và b.

2. Thuật toán:

Sử dụng công thức: BSCNN(a, b) = (a * b) / Ước số chung


lớn nhất (ƯSCNN) của a và b.
Sử dụng hàm gcd từ thư viện math để tính Ước số chung lớn
nhất (ƯSCNN).

Code Python
import math

def lcm(a, b):


"""
Hàm để tìm bội số chung nhỏ nhất (BSCNN) của hai số.
"""
return abs(a * b) // math.gcd(a, b)

# Hai số đầu vào


a = 15
b = 20

# Gọi hàm và in kết quả


bscnn = lcm(a, b)
print(f"Bội số chung nhỏ nhất của {a} và {b} là: {bscnn}")

Giải thích code


import math: Import thư viện math để sử dụng hàm gcd.
def lcm(a, b): Định nghĩa hàm lcm để tìm BSCNN của hai số a
và b.
return abs(a * b) // math.gcd(a, b): Tính và trả về
BSCNN bằng công thức (a * b) // gcd(a, b).
a = 15, b = 20: Khai báo hai số đầu vào.
bscnn = lcm(a, b): Gọi hàm lcm với a và b để tính BSCNN.
print(f"Bội số chung nhỏ nhất của {a} và {b} là:
{bscnn}"): In kết quả.

Tóm tắt
Import thư viện: Import thư viện math để sử dụng hàm gcd.
Định nghĩa hàm: Định nghĩa hàm lcm để tính BSCNN của hai
số.
Sử dụng hàm gcd: Tính Ước số chung lớn nhất (ƯSCNN) của
hai số bằng hàm gcd.
Công thức BSCNN: Tính BSCNN bằng công thức (a * b) //
gcd(a, b).
In kết quả: In BSCNN của hai số đã cho.

Chương trình này tính bội số chung nhỏ nhất (BSCNN) của hai số
bằng cách sử dụng hàm gcd từ thư viện math để tính Ước số chung
lớn nhất (ƯSCNN), sau đó áp dụng công thức (a * b) // gcd(a,
b) để tính BSCNN.
134 - Viết chương trình để kiểm tra
một số có phải là số nguyên tố không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình để kiểm tra xem một số
có phải là số nguyên tố hay không, sử dụng phương pháp đệ quy.

Thuật toán giải quyết


1. Định nghĩa số nguyên tố:

Một số nguyên tố là một số tự nhiên lớn hơn 1 và chỉ chia


hết cho 1 và chính nó.

2. Phương pháp đệ quy:

Kiểm tra xem số đó có chia hết cho bất kỳ số nào từ 2 đến


căn bậc hai của số đó hay không.

Code Python
def is_prime_recursive(n, divisor=None):
"""
Hàm đệ quy để kiểm tra số nguyên tố.
"""
if divisor is None:
divisor = n - 1

if n < 2:
return False
if divisor == 1:
return True
if n % divisor == 0:
return False

return is_prime_recursive(n, divisor - 1)

# Kiểm tra hàm với một số đầu vào


number = 29

if is_prime_recursive(number):
print(f"{number} là số nguyên tố.")
else:
print(f"{number} không phải là số nguyên tố.")

Giải thích code


def is_prime_recursive(n, divisor=None): Định nghĩa hàm
is_prime_recursive để kiểm tra số nguyên tố.

if divisor is None: Nếu divisor không được cung cấp,


gán giá trị divisor bằng n - 1.
if n < 2: Nếu n nhỏ hơn 2, trả về False (không phải số
nguyên tố).
if divisor == 1: Nếu divisor bằng 1, trả về True (là số
nguyên tố).
if n % divisor == 0: Nếu n chia hết cho divisor, trả về
False (không phải số nguyên tố).
return is_prime_recursive(n, divisor - 1): Gọi đệ quy
hàm is_prime_recursive với divisor giảm đi 1.

number = 29: Khai báo một số để kiểm tra.

if is_prime_recursive(number): Kiểm tra nếu số đó là số


nguyên tố.

print(f"{number} là số nguyên tố."): In ra nếu số đó là số


nguyên tố.
print(f"{number} không phải là số nguyên tố."): In ra
nếu số đó không phải là số nguyên tố.
Tóm tắt
Hàm đệ quy: Sử dụng đệ quy để kiểm tra số nguyên tố.
Kiểm tra điều kiện: Sử dụng các điều kiện để xác định xem số
đó có phải là số nguyên tố không.
Đệ quy giảm: Gọi hàm đệ quy với divisor giảm dần để kiểm tra
chia hết.

Chương trình này sử dụng phương pháp đệ quy để kiểm tra xem
một số có phải là số nguyên tố hay không bằng cách kiểm tra xem
số đó có chia hết cho bất kỳ số nào từ 2 đến n-1 hay không.
135 - chương trình để tìm tất cả các
số nguyên tố từ 1 đến 100

Giải thích đề bài


Đề bài yêu cầu viết một chương trình bằng Python để tìm tất cả các
số nguyên tố trong khoảng từ 1 đến 100. Số nguyên tố là số chỉ chia
hết cho 1 và chính nó.

Thuật toán
Đầu vào: Không có đầu vào cụ thể do đề bài yêu cầu tìm số
nguyên tố trong khoảng cố định từ 1 đến 100.

Đầu ra: Danh sách các số nguyên tố từ 1 đến 100.

Các bước thực hiện:

1. Tạo một hàm kiểm tra số nguyên tố.


2. Sử dụng vòng lặp để kiểm tra tất cả các số từ 1 đến 100.
3. Nếu số đó là số nguyên tố, thêm nó vào danh sách kết quả.
4. In ra danh sách các số nguyên tố tìm được.

Code Python
def is_prime(n):
# Kiểm tra nếu n nhỏ hơn 2, thì không phải là số nguyên
tố
if n < 2:
return False
# Kiểm tra các ước từ 2 đến căn bậc hai của n
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True

# Danh sách để lưu trữ các số nguyên tố


prime_numbers = []

# Kiểm tra các số từ 1 đến 100


for num in range(1, 101):
if is_prime(num):
prime_numbers.append(num)

# In danh sách các số nguyên tố từ 1 đến 100


print(prime_numbers)

Giải thích code


Hàm is_prime(n):
Kiểm tra nếu n nhỏ hơn 2 thì trả về False vì số nhỏ hơn 2
không phải là số nguyên tố.
Sử dụng vòng lặp để kiểm tra các ước từ 2 đến căn bậc hai
của n.
Nếu n chia hết cho bất kỳ số nào trong khoảng kiểm tra, trả
về False.
Nếu không tìm thấy ước nào, trả về True vì n là số nguyên
tố.
Phần chính của chương trình:
Tạo một danh sách rỗng prime_numbers để lưu trữ các số
nguyên tố tìm được.
Sử dụng vòng lặp for để kiểm tra tất cả các số từ 1 đến 100.
Nếu số đó là số nguyên tố (sử dụng hàm is_prime), thêm số
đó vào danh sách prime_numbers.
In danh sách các số nguyên tố.

Tóm tắt
Hàm is_prime(n) để kiểm tra số nguyên tố.
Vòng lặp for để kiểm tra các số từ 1 đến 100.
Thêm số nguyên tố vào danh sách và in kết quả.

Chương trình này tìm tất cả các số nguyên tố từ 1 đến 100 và in ra


danh sách các số đó.
136 - Viết chương trình để tính tổng
các số từ 1 đến n

Giải thích đề bài


Đề bài yêu cầu viết một chương trình bằng Python để tính tổng các
số từ 1 đến n, trong đó n là một số nguyên dương được nhập vào
bởi người dùng.

Thuật toán
Đầu vào: Một số nguyên dương n do người dùng nhập vào.

Đầu ra: Tổng của các số từ 1 đến n.

Các bước thực hiện:

1. Nhập giá trị n từ người dùng.


2. Kiểm tra xem n có phải là một số nguyên dương không.
3. Tính tổng các số từ 1 đến n.
4. In ra tổng đã tính.

Code Python
def calculate_sum(n):
# Tính tổng các số từ 1 đến n
return sum(range(1, n + 1))

# Nhập giá trị n từ người dùng


n = int(input("Nhập một số nguyên dương n: "))

# Kiểm tra nếu n là số nguyên dương


if n > 0:
# Tính tổng và in kết quả
total_sum = calculate_sum(n)
print(f"Tổng các số từ 1 đến {n} là: {total_sum}")
else:
print("Vui lòng nhập một số nguyên dương.")

Giải thích code


Hàm calculate_sum(n):
Sử dụng hàm sum và range để tính tổng các số từ 1 đến n.
Phần chính của chương trình:
Sử dụng hàm input để nhập giá trị n từ người dùng và
chuyển đổi giá trị này thành kiểu số nguyên với int.
Kiểm tra nếu n là một số nguyên dương.
Nếu đúng, tính tổng các số từ 1 đến n bằng cách gọi
hàm calculate_sum(n) và in ra kết quả.
Nếu sai, in ra thông báo yêu cầu người dùng nhập một
số nguyên dương.

Tóm tắt
Sử dụng hàm input để nhập giá trị từ người dùng.
Sử dụng hàm int để chuyển đổi giá trị nhập vào thành số
nguyên.
Sử dụng hàm sum và range để tính tổng các số từ 1 đến n.
Sử dụng câu điều kiện if để kiểm tra giá trị nhập vào.

Chương trình này tính tổng các số từ 1 đến n dựa trên giá trị n do
người dùng nhập vào và in ra kết quả.
137 - Viết chương trình để tính sin(x)
& cos(x) bằng các triển khai chuỗi
Taylor

Giải thích đề bài


Đề bài yêu cầu viết một chương trình bằng Python để tính giá trị của
hàm sin(x) và cos(x) bằng cách triển khai chuỗi Taylor. Chuỗi Taylor
là một cách để biểu diễn các hàm số dưới dạng tổng của các đa
thức vô hạn.

Thuật toán
Đầu vào: Giá trị của x (góc tính theo radian) và số lượng phần
tử của chuỗi Taylor.

Đầu ra: Giá trị của sin(x) và cos(x) được tính toán bằng chuỗi
Taylor.

Các bước thực hiện:

1. Nhập giá trị x từ người dùng.


2. Nhập số lượng phần tử của chuỗi Taylor từ người dùng.
3. Triển khai chuỗi Taylor để tính sin(x).
4. Triển khai chuỗi Taylor để tính cos(x).
5. In ra kết quả của sin(x) và cos(x).

Code Python
import math

def taylor_sin(x, terms):


sin_x = 0
for n in range(terms):
sign = (-1)**n
sin_x += sign * (x**(2*n + 1)) / math.factorial(2*n +
1)
return sin_x

def taylor_cos(x, terms):


cos_x = 0
for n in range(terms):
sign = (-1)**n
cos_x += sign * (x**(2*n)) / math.factorial(2*n)
return cos_x

# Nhập giá trị x từ người dùng (góc tính theo radian)


x = float(input("Nhập giá trị của x (radian): "))

# Nhập số lượng phần tử của chuỗi Taylor


terms = int(input("Nhập số lượng phần tử của chuỗi Taylor:
"))

# Tính giá trị sin(x) và cos(x) bằng chuỗi Taylor


sin_x = taylor_sin(x, terms)
cos_x = taylor_cos(x, terms)

# In kết quả
print(f"Giá trị sin({x}) bằng chuỗi Taylor với {terms} phần
tử là: {sin_x}")
print(f"Giá trị cos({x}) bằng chuỗi Taylor với {terms} phần
tử là: {cos_x}")

Giải thích code


Hàm taylor_sin(x, terms):

Khởi tạo sin_x bằng 0.


Sử dụng vòng lặp để tính tổng các phần tử của chuỗi Taylor
cho sin(x).
Với mỗi phần tử, tính dấu sign (luân phiên giữa 1 và -1).
Thêm phần tử vào tổng sin_x.
Trả về giá trị của sin_x.

Hàm taylor_cos(x, terms):

Tương tự như hàm taylor_sin(x, terms), nhưng công thức


tính chuỗi Taylor cho cos(x).

Phần chính của chương trình:

Nhập giá trị x từ người dùng.


Nhập số lượng phần tử của chuỗi Taylor.
Tính giá trị sin(x) và cos(x) bằng cách gọi các hàm
taylor_sin và taylor_cos.
In ra kết quả.

Tóm tắt
Sử dụng vòng lặp for để tính tổng các phần tử của chuỗi Taylor.
Sử dụng hàm math.factorial để tính giai thừa.
Sử dụng toán tử ** để tính lũy thừa.
Nhập giá trị từ người dùng bằng hàm input và chuyển đổi kiểu
dữ liệu.

Chương trình này tính giá trị của sin(x) và cos(x) bằng cách triển
khai chuỗi Taylor với số lượng phần tử được người dùng nhập vào.
138 - Viết chương trình để tính Lôgarit
tự nhiên ln(x)

Giải thích đề bài


Đề bài yêu cầu viết một chương trình bằng Python để tính giá trị của
lôgarit tự nhiên ln(x) bằng cách triển khai chuỗi Taylor. Chúng ta sẽ
sử dụng chuỗi Taylor cho ln(x) để thực hiện việc này.

Thuật toán
Đầu vào: Giá trị của x (phải là một số dương khác 1).
Đầu ra: Giá trị của ln(x) được tính toán bằng chuỗi Taylor.

Các bước thực hiện:


1. Nhập giá trị x từ người dùng.
2. Kiểm tra điều kiện x > 0 và x ≠ 1.
3. Triển khai chuỗi Taylor để tính ln(x):
Nếu x > 0 và x ≠ 1, sử dụng chuỗi Taylor để tính toán ln(x).
4. In ra kết quả của ln(x).

Chuỗi Taylor cho ln(x):


Chuỗi Taylor cho ln(x) hội tụ chậm khi x gần 1, nhưng nó có thể
được viết lại bằng cách sử dụng các biến đổi và công thức khác
nhau cho các khoảng khác nhau. Một cách đơn giản là sử dụng
chuỗi Taylor cho ln(1 + y) khi y = x - 1 và |y| < 1:

ln(1 + y) = y - y^2/2 + y^3/3 - y^4/4 + ...


Code Python
def taylor_ln(x, terms):
if x <= 0:
raise ValueError("Giá trị của x phải lớn hơn 0")
if x == 1:
return 0

# Sử dụng ln(x) = 2 * sum((y^n / n) for n in range(1,


terms + 1))
# với y = (x - 1) / (x + 1)
y = (x - 1) / (x + 1)
ln_x = 0
for n in range(1, terms + 1):
ln_x += (y**(2*n - 1)) / (2*n - 1)
return 2 * ln_x

# Nhập giá trị x từ người dùng


x = float(input("Nhập giá trị của x (x > 0 và x ≠ 1): "))

# Nhập số lượng phần tử của chuỗi Taylor


terms = int(input("Nhập số lượng phần tử của chuỗi Taylor:
"))

# Tính giá trị ln(x) bằng chuỗi Taylor


try:
ln_x = taylor_ln(x, terms)
print(f"Giá trị ln({x}) bằng chuỗi Taylor với {terms}
phần tử là: {ln_x}")
except ValueError as e:
print(e)

Giải thích code


Hàm taylor_ln(x, terms):

Kiểm tra nếu x <= 0 hoặc x = 1 thì báo lỗi vì ln(x) không
xác định.
Sử dụng biến đổi để tính ln(x) khi y = (x-1)/(x+1).
Sử dụng vòng lặp để tính tổng các phần tử của chuỗi Taylor
cho ln(1 + y).
Nhân kết quả với 2 để có giá trị cuối cùng của ln(x).

Phần chính của chương trình:

Nhập giá trị x từ người dùng và kiểm tra giá trị này.
Nhập số lượng phần tử của chuỗi Taylor.
Tính giá trị ln(x) bằng cách gọi hàm taylor_ln.
In ra kết quả hoặc thông báo lỗi nếu x không hợp lệ.

Tóm tắt
Sử dụng vòng lặp for để tính tổng các phần tử của chuỗi Taylor.
Sử dụng phép biến đổi để đảm bảo chuỗi Taylor hội tụ nhanh
hơn.
Nhập giá trị từ người dùng bằng hàm input và chuyển đổi kiểu
dữ liệu.
Sử dụng khối try-except để xử lý lỗi đầu vào không hợp lệ.

Chương trình này tính giá trị của ln(x) bằng cách triển khai chuỗi
Taylor với số lượng phần tử được người dùng nhập vào và kiểm tra
điều kiện hợp lệ của x.
139 - Viết chương trình để in ra n số
hoàn hảo đầu tiên

Giải thích đề bài


Đề bài yêu cầu viết một chương trình bằng Python để in ra n số
hoàn hảo đầu tiên. Số hoàn hảo là một số nguyên dương mà tổng
các ước số dương (không bao gồm chính nó) bằng chính nó. Ví dụ,
6 là một số hoàn hảo vì các ước số dương của nó là 1, 2, 3 và 1 + 2
+ 3 = 6.

Thuật toán
Đầu vào: Một số nguyên dương n do người dùng nhập vào.
Đầu ra: Danh sách n số hoàn hảo đầu tiên.

Các bước thực hiện:


1. Nhập giá trị n từ người dùng.
2. Khởi tạo danh sách rỗng để lưu các số hoàn hảo.
3. Khởi tạo biến đếm để kiểm tra các số nguyên dương liên
tiếp.
4. Sử dụng vòng lặp để tìm các số hoàn hảo:
Với mỗi số nguyên dương, tính tổng các ước số dương của
nó.
Nếu tổng này bằng chính số đó, thêm số đó vào danh sách.
5. Tiếp tục vòng lặp cho đến khi tìm đủ n số hoàn hảo.
6. In ra danh sách n số hoàn hảo đầu tiên.
Code Python
def is_perfect_number(num):
# Tính tổng các ước số dương của num (không bao gồm chính
nó)
sum_of_divisors = sum([i for i in range(1, num) if num %
i == 0])
return sum_of_divisors == num

def find_perfect_numbers(n):
perfect_numbers = []
number = 1
while len(perfect_numbers) < n:
if is_perfect_number(number):
perfect_numbers.append(number)
number += 1
return perfect_numbers

# Nhập giá trị n từ người dùng


n = int(input("Nhập số lượng số hoàn hảo cần tìm: "))

# Tìm và in ra n số hoàn hảo đầu tiên


perfect_numbers = find_perfect_numbers(n)
print(f"{n} số hoàn hảo đầu tiên là: {perfect_numbers}")

Giải thích code


Hàm is_perfect_number(num):

Tính tổng các ước số dương của num (không bao gồm chính
nó) bằng cách sử dụng danh sách nén và hàm sum.
Trả về True nếu tổng này bằng num, ngược lại trả về False.

Hàm find_perfect_numbers(n):

Khởi tạo danh sách perfect_numbers để lưu các số hoàn


hảo tìm được.
Sử dụng biến number để kiểm tra các số nguyên dương liên
tiếp.
Sử dụng vòng lặp while để tiếp tục tìm kiếm cho đến khi
danh sách perfect_numbers có độ dài bằng n.
Kiểm tra mỗi số number xem có phải là số hoàn hảo không
bằng cách gọi hàm is_perfect_number.
Nếu là số hoàn hảo, thêm vào danh sách perfect_numbers.
Tăng giá trị của number để kiểm tra số tiếp theo.

Phần chính của chương trình:

Nhập giá trị n từ người dùng.


Gọi hàm find_perfect_numbers(n) để tìm n số hoàn hảo
đầu tiên.
In ra danh sách các số hoàn hảo.

Tóm tắt
Sử dụng hàm input để nhập giá trị từ người dùng và chuyển đổi
kiểu dữ liệu.
Sử dụng danh sách nén để tính tổng các ước số dương của một
số.
Sử dụng vòng lặp while để tiếp tục tìm kiếm cho đến khi đủ n số
hoàn hảo.
Sử dụng hàm sum để tính tổng các phần tử trong danh sách.

Chương trình này tìm và in ra n số hoàn hảo đầu tiên dựa trên giá trị
n do người dùng nhập vào.
140 - Viết chương trình để in ra các số
Armstrong từ 1 đến 1000

Giải thích đề bài


Đề bài yêu cầu viết một chương trình bằng Python để in ra các số
Armstrong từ 1 đến 1000. Số Armstrong (hay còn gọi là số
Narcissistic) là một số mà tổng các lũy thừa bậc n của các chữ số
của nó bằng chính nó, trong đó n là số chữ số của số đó. Ví dụ, 153
là một số Armstrong vì 1^3 + 5^3 + 3^3 = 153.

Thuật toán
Đầu vào: Không có đầu vào cụ thể vì chương trình sẽ tìm các
số Armstrong trong khoảng từ 1 đến 1000.
Đầu ra: Danh sách các số Armstrong từ 1 đến 1000.

Các bước thực hiện:


1. Khởi tạo danh sách rỗng để lưu các số Armstrong.
2. Sử dụng vòng lặp để kiểm tra các số từ 1 đến 1000.
Tính số lượng chữ số của số hiện tại.
Tính tổng các lũy thừa bậc n của các chữ số của số hiện tại.
Nếu tổng này bằng chính số đó, thêm số đó vào danh sách.
3. In ra danh sách các số Armstrong.

Code Python
def is_armstrong_number(num):
# Chuyển số thành chuỗi để dễ dàng truy cập từng chữ số
num_str = str(num)
# Tính số lượng chữ số
num_digits = len(num_str)
# Tính tổng các lũy thừa bậc num_digits của các chữ số
sum_of_powers = sum(int(digit)**num_digits for digit in
num_str)
# Kiểm tra nếu tổng này bằng chính số đó
return sum_of_powers == num

# Danh sách để lưu trữ các số Armstrong


armstrong_numbers = []

# Kiểm tra các số từ 1 đến 1000


for num in range(1, 1001):
if is_armstrong_number(num):
armstrong_numbers.append(num)

# In danh sách các số Armstrong từ 1 đến 1000


print(f"Các số Armstrong từ 1 đến 1000 là:
{armstrong_numbers}")

Giải thích code


Hàm is_armstrong_number(num):

Chuyển số num thành chuỗi để dễ dàng truy cập từng chữ số.
Tính số lượng chữ số của số num bằng cách lấy độ dài của
chuỗi.
Tính tổng các lũy thừa bậc num_digits của các chữ số bằng
cách sử dụng vòng lặp và hàm sum.
Trả về True nếu tổng này bằng chính số đó, ngược lại trả về
False.

Phần chính của chương trình:

Khởi tạo danh sách armstrong_numbers để lưu các số


Armstrong tìm được.
Sử dụng vòng lặp for để kiểm tra các số từ 1 đến 1000.
Kiểm tra mỗi số num xem có phải là số Armstrong không bằng
cách gọi hàm is_armstrong_number.
Nếu là số Armstrong, thêm vào danh sách
armstrong_numbers.
In ra danh sách các số Armstrong.

Tóm tắt
Sử dụng hàm str để chuyển số thành chuỗi.
Sử dụng hàm len để tính số lượng chữ số.
Sử dụng vòng lặp for và hàm sum để tính tổng các lũy thừa của
các chữ số.
Sử dụng vòng lặp for để kiểm tra các số từ 1 đến 1000 và thêm
các số Armstrong vào danh sách.

Chương trình này tìm và in ra các số Armstrong trong khoảng từ 1


đến 1000.
Chương 15 : Bài toán số học
141. Viết chương trình để tính tổng, hiệu, tích và thương của hai phân
số.
142. Viết chương trình để tìm nghiệm của phương trình bậc 2 .
143. Viết chương trình để tìm nghiệm của hệ phương trình bậc nhất 2
ẩn số x & y.
144. Viết chương trình để tìm các bộ ba Pythagorean nhỏ hơn 100 là
3 số nguyên liên tiếp hoặc 3 số chẵn liên tiếp.
145. Viết chương trình để tính lũy thừa của một số.
146. Viết chương trình để tính Tính căn bậc hai của một số nguyên
dương x bằng thuật toán Babylonian.
147. Viết chương trình để kiểm tra một số có phải là số hoàn hảo
không.
148. Viết chương trình liệt kê, đếm và tính tổng các ước số của số
nguyên dương n.
149. Viết chương trình để nhập vào một số nguyên dương n, phân
tích n thành các thừa số nguyên tố.
150. Viết chương trình để tìm khoảng cách của 2 điểm A & B trong hệ
tọa độ Oxy.
141 - Viết chương trình để tính tổng,
hiệu, tích và thương của hai phân số

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để tính tổng, hiệu,
tích và thương của hai phân số.

Thuật toán

Đầu vào
Hai phân số.

Đầu ra
Tổng, hiệu, tích và thương của hai phân số.

Các bước thực hiện


1. Định nghĩa một lớp Fraction với hai thuộc tính numerator (tử số)
và denominator (mẫu số).
2. Định nghĩa các phương thức add, subtract, multiply và divide
để tính tổng, hiệu, tích và thương của hai phân số.
3. Xuất kết quả.

Code Python
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a

class MyFraction:
def __init__(self, numerator, denominator):
self.numerator = numerator
self.denominator = denominator

def add(self, other):


numerator = self.numerator * other.denominator +
self.denominator * other.numerator
denominator = self.denominator * other.denominator
return f"{numerator // gcd(numerator,
denominator)}/{denominator // gcd(numerator, denominator)}"

def subtract(self, other):


numerator = self.numerator * other.denominator -
self.denominator * other.numerator
denominator = self.denominator * other.denominator
return f"{numerator // gcd(numerator,
denominator)}/{denominator // gcd(numerator, denominator)}"

def multiply(self, other):


numerator = self.numerator * other.numerator
denominator = self.denominator * other.denominator
return f"{numerator // gcd(numerator,
denominator)}/{denominator // gcd(numerator, denominator)}"

def divide(self, other):


numerator = self.numerator * other.denominator
denominator = self.denominator * other.numerator
return f"{numerator // gcd(numerator,
denominator)}/{denominator // gcd(numerator, denominator)}"

# Test
frac1 = MyFraction(1, 2)
frac2 = MyFraction(2, 3)

print(f"Tổng: {frac1.add(frac2)}")
print(f"Hiệu: {frac1.subtract(frac2)}")
print(f"Tích: {frac1.multiply(frac2)}")
print(f"Thương: {frac1.divide(frac2)}")

Giải thích code


def gcd(a, b): Định nghĩa hàm gcd để tìm ước chung lớn nhất
của hai số.
class MyFraction: Định nghĩa một lớp MyFraction với hai thuộc
tính numerator (tử số) và denominator (mẫu số).
def add(self, other): Định nghĩa phương thức add để tính
tổng của hai phân số.
def subtract(self, other): Định nghĩa phương thức subtract
để tính hiệu của hai phân số.
def multiply(self, other): Định nghĩa phương thức multiply
để tính tích của hai phân số.
def divide(self, other): Định nghĩa phương thức divide để
tính thương của hai phân số.

Tóm tắt
Sử dụng hàm gcd để tìm ước chung lớn nhất của hai số.
Định nghĩa một lớp MyFraction để thực hiện các phép toán với
phân số.

Chương trình này minh họa cách viết một chương trình Python để
tính tổng, hiệu, tích và thương của hai phân số mà không sử dụng
lớp Fraction.
142 - Viết chương trình để tìm nghiệm
của phương trình bậc 2 (ax^2 + bx + c
= 0)

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để tìm nghiệm
của phương trình bậc 2 (ax^2 + bx + c = 0).

Thuật toán

Đầu vào
Hệ số a, b, c của phương trình bậc 2.

Đầu ra
Nghiệm của phương trình bậc 2.

Các bước thực hiện


1. Tính delta (Δ) = b^2 - 4ac.
2. Nếu delta < 0, phương trình vô nghiệm.
3. Nếu delta = 0, phương trình có nghiệm kép x = -b / (2a).
4. Nếu delta > 0, phương trình có hai nghiệm phân biệt x1 = (-b -
sqrt(delta)) / (2a) và x2 = (-b + sqrt(delta)) / (2a).
5. Xuất kết quả.
Code Python
import math

def solve_quadratic(a, b, c):


delta = b**2 - 4*a*c
if delta < 0:
return "Phương trình vô nghiệm"
elif delta == 0:
x = -b / (2*a)
return f"Phương trình có nghiệm kép: x = {x}"
else:
x1 = (-b - math.sqrt(delta)) / (2*a)
x2 = (-b + math.sqrt(delta)) / (2*a)
return f"Phương trình có hai nghiệm phân biệt: x1 =
{x1}, x2 = {x2}"

# Nhap a, b, c
a = float(input("Nhập a: "))
b = float(input("Nhập b: "))
c = float(input("Nhập c: "))

print(solve_quadratic(a, b, c))

Giải thích code


import math: Import module math để sử dụng hàm sqrt (căn bậc
hai).
def solve_quadratic(a, b, c): Định nghĩa hàm
solve_quadratic để tìm nghiệm của phương trình bậc 2.

Tóm tắt
Sử dụng công thức giải phương trình bậc 2 để tìm nghiệm.
Chương trình này minh họa cách viết một chương trình Python để
tìm nghiệm của phương trình bậc 2.
143 - Viết chương trình để tìm nghiệm
của hệ phương trình bậc nhất 2 ẩn số
x&y

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để tìm nghiệm
của hệ phương trình bậc nhất 2 ẩn số x và y.

Thuật toán

Đầu vào
Hệ số a1, b1, c1, a2, b2, c2 của hệ phương trình bậc nhất 2 ẩn
số.

Đầu ra
Nghiệm của hệ phương trình bậc nhất 2 ẩn số.

Các bước thực hiện


1. Tính D = a1b2 - a2b1.
2. Nếu D = 0, hệ phương trình có vô số nghiệm hoặc vô nghiệm.
3. Nếu D ≠ 0, hệ phương trình có nghiệm duy nhất (x, y) = ((c1b2 -
c2b1) / D, (a1c2 - a2c1) / D).
4. Xuất kết quả.
Code Python
def solve_linear_system(a1, b1, c1, a2, b2, c2):
D = a1*b2 - a2*b1
if D == 0:
return "Hệ phương trình có vô số nghiệm hoặc vô
nghiệm"
else:
x = (c1*b2 - c2*b1) / D
y = (a1*c2 - a2*c1) / D
return f"Hệ phương trình có nghiệm duy nhất: (x, y) =
({x}, {y})"

# Nhap a1, b1, c1, a2, b2, c2


a1 = float(input("Nhập a1: "))
b1 = float(input("Nhập b1: "))
c1 = float(input("Nhập c1: "))
a2 = float(input("Nhập a2: "))
b2 = float(input("Nhập b2: "))
c2 = float(input("Nhập c2: "))

print(solve_linear_system(a1, b1, c1, a2, b2, c2))

Giải thích code


def solve_linear_system(a1, b1, c1, a2, b2, c2): Định
nghĩa hàm solve_linear_system để tìm nghiệm của hệ phương
trình bậc nhất 2 ẩn số.

Tóm tắt
Sử dụng công thức giải hệ phương trình bậc nhất 2 ẩn số để tìm
nghiệm.

Chương trình này minh họa cách viết một chương trình Python để
tìm nghiệm của hệ phương trình bậc nhất 2 ẩn số.
144 - Viết chương trình để tìm các bộ
ba Pythagorean nhỏ hơn 100 là 3 số
nguyên liên tiếp hoặc 3 số chẵn liên
tiếp

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để tìm các bộ ba
Pythagorean nhỏ hơn 100 là 3 số nguyên liên tiếp hoặc 3 số chẵn
liên tiếp. Bộ ba Pythagorean là một tập hợp ba số nguyên dương a,
b và c, sao cho a^2 + b^2 = c^2.

Thuật toán

Đầu vào
Không có đầu vào.

Đầu ra
Danh sách các bộ ba Pythagorean nhỏ hơn 100 là 3 số nguyên
liên tiếp hoặc 3 số chẵn liên tiếp.

Các bước thực hiện


1. Duyệt qua tất cả các bộ ba số nguyên liên tiếp hoặc số chẵn liên
tiếp nhỏ hơn 100.
2. Kiểm tra xem bộ ba số có phải là bộ ba Pythagorean không.
3. Nếu có, thêm bộ ba số vào danh sách kết quả.
4. Xuất danh sách kết quả.
Code Python
def find_pythagorean_triplets():
triplets = []
for a in range(1, 98):
b, c = a + 1, a + 2 # 3 số liên tiếp
if a*a + b*b == c*c:
triplets.append((a, b, c))
b, c = a + 2, a + 4 # 3 số chẵn liên tiếp
if a*a + b*b == c*c:
triplets.append((a, b, c))
return triplets

print(find_pythagorean_triplets())

Giải thích code


Chương trình bắt đầu bằng việc khởi tạo một danh sách rỗng
triplets để lưu trữ các bộ ba Pythagorean. Chương trình sau đó
duyệt qua tất cả các số nguyên từ 1 đến 97. Đối với mỗi số nguyên
a, chương trình tạo ra hai bộ ba số: một bộ ba gồm ba số liên tiếp và
một bộ ba gồm ba số chẵn liên tiếp. Chương trình sau đó kiểm tra
xem mỗi bộ ba số có tạo thành một bộ ba Pythagorean không. Nếu
có, chương trình thêm bộ ba số đó vào danh sách triplets. Cuối
cùng, chương trình trả về danh sách triplets.

Bổ sung
Có thể có nhiều cách khác để giải quyết vấn đề này, nhưng cách
tiếp cận trên là một trong những cách đơn giản và hiệu quả nhất.

Tóm tắt
Chương trình sử dụng vòng lặp for để duyệt qua tất cả các số
nguyên từ 1 đến 97.
Chương trình sử dụng phép toán == để kiểm tra xem ba số có
tạo thành một bộ ba Pythagorean không.
Chương trình sử dụng phương thức append để thêm một phần
tử vào cuối danh sách.

Chương trình Python trên tìm các bộ ba Pythagorean nhỏ hơn 100
là 3 số nguyên liên tiếp hoặc 3 số chẵn liên tiếp.
145 - Viết chương trình để tính lũy
thừa của một số

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để tính lũy thừa
của một số.

Thuật toán

Đầu vào
Số cơ sở base và số mũ exponent.

Đầu ra
Kết quả của base mũ exponent.

Các bước thực hiện


1. Sử dụng toán tử ** hoặc hàm pow để tính lũy thừa của một số.
2. Xuất kết quả.

Code Python
def power(base, exponent):
return base ** exponent

# Test
print(power(2, 3))
Cách giải khác
Ngoài ra, bạn cũng có thể sử dụng hàm pow của Python để tính lũy
thừa của một số.
def power(base, exponent):
return pow(base, exponent)

# Test
print(power(2, 3))

Giải thích code


def power(base, exponent): Định nghĩa hàm power để tính lũy
thừa của một số.

Tóm tắt
Sử dụng toán tử ** hoặc hàm pow để tính lũy thừa của một số.

Chương trình này minh họa cách viết một chương trình Python để
tính lũy thừa của một số.
146 - Viết chương trình để tính Tính
căn bậc hai của một số nguyên
dương x bằng thuật toán Babylonian

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để tính căn bậc
hai của một số nguyên dương x bằng thuật toán Babylonian. Sau
đó, so sánh kết quả của chương trình với hàm căn bậc hai trong thư
viện math.

Thuật toán

Đầu vào
Số nguyên dương x.

Đầu ra
Căn bậc hai của x tính bằng thuật toán Babylonian và hàm sqrt
trong thư viện math.

Các bước thực hiện


1. Khởi tạo giá trị ban đầu của guess là x.
2. Trong khi guess chưa đủ gần với căn bậc hai của x, cập nhật
guess bằng cách lấy trung bình cộng của guess và x / guess.
3. Xuất kết quả.
Code Python
import math

def babylonian_sqrt(x):
guess = x
while abs(guess * guess - x) > 1e-10:
guess = (guess + x / guess) / 2
return guess

# Test
x = 16
print("Babylonian method:", babylonian_sqrt(x))
print("math.sqrt:", math.sqrt(x))

Giải thích code


import math: Import module math để sử dụng hàm sqrt (căn bậc
hai).
def babylonian_sqrt(x): Định nghĩa hàm babylonian_sqrt để
tính căn bậc hai của một số nguyên dương x bằng thuật toán
Babylonian.

Tóm tắt
Sử dụng thuật toán Babylonian để tính căn bậc hai của một số
nguyên dương.

Chương trình này minh họa cách viết một chương trình Python để
tính căn bậc hai của một số nguyên dương x bằng thuật toán
Babylonian và so sánh kết quả với hàm sqrt trong thư viện math.
147 - Viết chương trình để kiểm tra
một số có phải là số hoàn hảo không

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để kiểm tra một
số có phải là số hoàn hảo không. Số hoàn hảo là số mà tổng các
ước số (không kể chính nó) bằng chính nó. Trong câu trả lời này,
chúng ta sẽ sử dụng thuật toán đệ quy.

Thuật toán

Đầu vào
Số nguyên n.

Đầu ra
True nếu n là số hoàn hảo, False nếu không.

Các bước thực hiện


1. Tính tổng các ước số của n bằng cách sử dụng hàm đệ quy.
2. Kiểm tra xem tổng có bằng n không.
3. Xuất kết quả.

Code Python
def sum_of_divisors(n, i=1, sum=0):
if i == n:
return sum
else:
if n % i == 0:
sum += i
return sum_of_divisors(n, i + 1, sum)

def is_perfect(n):
return sum_of_divisors(n) == n

# Test
print(is_perfect(6)) # True
print(is_perfect(28)) # True
print(is_perfect(12)) # False

Giải thích code


def sum_of_divisors(n, i=1, sum=0):
Định nghĩa hàm đệ quy sum_of_divisors để tính tổng các
ước số của n.
Hàm này bắt đầu từ i=1 và cộng dồn các ước số vào sum.
Nếu i bằng n, hàm trả về sum. Ngược lại, nếu n chia hết cho
i, sum được cộng thêm i, và hàm gọi lại chính nó với i tăng
thêm 1 và sum mới.
def is_perfect(n):
Định nghĩa hàm is_perfect để kiểm tra một số có phải là số
hoàn hảo không.
Hàm này trả về True nếu tổng các ước số của n bằng n,
False nếu không.

Tóm tắt
Sử dụng hàm đệ quy để tính tổng các ước số của n.
Kiểm tra xem tổng có bằng n không.

Chương trình này minh họa cách viết một chương trình Python để
kiểm tra một số có phải là số hoàn hảo không bằng cách sử dụng
thuật toán đệ quy.
148 - Viết chương trình liệt kê, đếm và
tính tổng các ước số của số nguyên
dương n

Yêu cầu
Viết một chương trình Python để liệt kê, đếm và tính tổng các ước
số của một số nguyên dương n. Số n được nhập từ bàn phím.

Bước giải quyết vấn đề


1. Nhập số nguyên dương n từ bàn phím.
2. Duyệt qua tất cả các số từ 1 đến n.
3. Kiểm tra xem số đó có phải là ước số của n không.
4. Nếu có, thêm số đó vào danh sách ước số, tăng số lượng ước
số lên 1 và cộng số đó vào tổng các ước số.
5. Xuất danh sách ước số, số lượng ước số và tổng các ước số.

Code Python
def find_divisors(n):
divisors = [i for i in range(1, n+1) if n % i == 0]
return divisors, len(divisors), sum(divisors)

n = int(input("Enter a positive integer: "))


divisors, count, total = find_divisors(n)
print(f"Divisors of {n}: {divisors}")
print(f"Number of divisors: {count}")
print(f"Sum of divisors: {total}")
Giải thích code
Chương trình bắt đầu bằng việc nhận số nguyên dương n từ
người dùng.
Sau đó, chương trình tạo một danh sách bao gồm tất cả các ước
số của n. Điều này được thực hiện bằng cách duyệt qua tất cả
các số từ 1 đến n và kiểm tra xem n có chia hết cho số đó
không. Nếu có, số đó được thêm vào danh sách ước số.
Chương trình sau đó trả về danh sách ước số, số lượng ước số
(được tính bằng cách lấy độ dài của danh sách) và tổng các ước
số (được tính bằng cách cộng tất cả các phần tử trong danh
sách).
Cuối cùng, chương trình in ra danh sách ước số, số lượng ước
số và tổng các ước số.

Tóm tắt
Chương trình sử dụng list comprehension để tạo danh sách các
ước số.
Chương trình sử dụng phép toán % để kiểm tra xem một số có
phải là ước số của n không.
Chương trình sử dụng hàm len để đếm số lượng ước số và hàm
sum để tính tổng các ước số.
Chương trình Python trên liệt kê, đếm và tính tổng các ước số
của một số nguyên dương n.

Chương trình Python trên liệt kê, đếm và tính tổng các ước số của
một số nguyên dương n.
149 - Viết chương trình để nhập vào
một số nguyên dương n, phân tích n
thành các thừa số nguyên tố

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để nhập vào một
số nguyên dương n, sau đó phân tích n thành các thừa số nguyên
tố.

Thuật toán

Đầu vào
Số nguyên dương n.

Đầu ra
Danh sách các thừa số nguyên tố của n.

Các bước thực hiện


1. Nhập số nguyên dương n từ bàn phím.
2. Duyệt qua tất cả các số nguyên tố từ 2 trở đi.
3. Kiểm tra xem số nguyên tố đó có phải là thừa số nguyên tố của
n không.
4. Nếu có, thêm số đó vào danh sách thừa số nguyên tố và chia n
cho số đó.
5. Lặp lại bước 3 và 4 cho đến khi n không còn chia hết cho số
nguyên tố đó.
6. Xuất danh sách thừa số nguyên tố.

Code Python
def prime_factors(n):
i = 2
factors = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors.append(i)
if n > 1:
factors.append(n)
return factors

n = int(input("Enter a positive integer: "))


factors = prime_factors(n)
print(f"Prime factors of {n}: {factors}")

Giải thích code


Chương trình bắt đầu bằng việc nhận số nguyên dương n từ
người dùng.
Sau đó, chương trình duyệt qua tất cả các số từ 2 trở đi.
Nếu n chia hết cho số đó, số đó được thêm vào danh sách thừa
số nguyên tố và n được chia cho số đó.
Quá trình này lặp lại cho đến khi n không còn chia hết cho số đó,
sau đó chương trình tiếp tục với số tiếp theo.
Cuối cùng, nếu n lớn hơn 1, n được thêm vào danh sách thừa
số nguyên tố (vì n là một số nguyên tố).
Chương trình sau đó in ra danh sách thừa số nguyên tố.
Bổ sung
Có thể có nhiều cách khác để giải quyết vấn đề này, nhưng cách
tiếp cận trên là một trong những cách đơn giản và hiệu quả nhất.

Tóm tắt
Chương trình sử dụng vòng lặp while để duyệt qua tất cả các số
từ 2 trở đi.
Chương trình sử dụng phép toán % để kiểm tra xem một số có
phải là thừa số nguyên tố của n không.
Chương trình sử dụng phép toán // để chia n cho số nguyên tố.

Chương trình Python trên nhập vào một số nguyên dương n và


phân tích n thành các thừa số nguyên tố.
150 - Viết chương trình để tìm khoảng
cách của 2 điểm A & B trong hệ tọa độ
Oxy

Giải thích đề bài


Bài tập yêu cầu bạn viết một chương trình Python để tìm khoảng
cách giữa hai điểm A và B trong hệ tọa độ Oxy.

Thuật toán

Đầu vào
Tọa độ của hai điểm A và B.

Đầu ra
Khoảng cách giữa hai điểm A và B.

Các bước thực hiện


1. Nhập tọa độ của hai điểm A và B.
2. Tính khoảng cách giữa hai điểm A và B sử dụng công thức
khoảng cách Euclidean.
3. Xuất khoảng cách.

Code Python
import math
def calculate_distance(point1, point2):
return math.sqrt((point1[0] - point2[0])**2 + (point1[1]
- point2[1])**2)

pointA = (float(input("Enter x coordinate for point A: ")),


float(input("Enter y coordinate for point A: ")))
pointB = (float(input("Enter x coordinate for point B: ")),
float(input("Enter y coordinate for point B: ")))

distance = calculate_distance(pointA, pointB)


print(f"The distance between point A and point B is:
{distance}")

Giải thích code


Chương trình bắt đầu bằng việc nhận tọa độ của hai điểm A và B
từ người dùng.
Sau đó, chương trình tính khoảng cách giữa hai điểm A và B sử
dụng công thức khoảng cách Euclidean: sqrt((x2 - x1)^2 + (y2 -
y1)^2).
Cuối cùng, chương trình in ra khoảng cách giữa hai điểm.

Bổ sung
Có thể có nhiều cách khác để giải quyết vấn đề này, nhưng cách
tiếp cận trên là một trong những cách đơn giản và hiệu quả nhất.

Tóm tắt
Chương trình sử dụng hàm sqrt từ module math để tính căn bậc
hai.
Chương trình sử dụng phép toán ** để tính bình phương của
một số.
Chương trình sử dụng tuples để lưu trữ tọa độ của các điểm.
Chương trình Python trên tìm khoảng cách giữa hai điểm A và B
trong hệ tọa độ Oxy.
Chương 16 : Giao diện cơ bản
151. Viết chương trình để tạo một cửa sổ GUI đơn giản.
152. Viết chương trình để thêm nút vào cửa sổ GUI.
153. Viết chương trình để thêm hộp văn bản vào cửa sổ GUI.
154. Viết chương trình để thêm nhãn vào cửa sổ GUI.
155. Viết chương trình để thêm menu vào cửa sổ GUI.
156. Viết chương trình để thêm hộp thoại thông báo vào cửa sổ GUI.
157. Viết chương trình để thêm hình ảnh vào cửa sổ GUI.
158. Viết chương trình để thêm bảng vào cửa sổ GUI.
159. Viết chương trình để thêm đồ thị vào cửa sổ GUI.
160. Viết chương trình để tạo ứng dụng máy tính đơn giản với GUI.
151 - Viết chương trình để tạo một
cửa sổ GUI đơn giản

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo ra một cửa sổ
GUI (Giao diện người dùng đồ họa) đơn giản, với tiêu đề cửa sổ là
“Fx Studio”.

Thuật toán:
Đầu vào:

Không có đầu vào cụ thể từ người dùng.

Đầu ra:

Một cửa sổ GUI đơn giản với tiêu đề “Fx Studio”.

Các bước thực hiện:

1. Import thư viện tkinter.


2. Tạo một instance của lớp Tk từ thư viện tkinter.
3. Đặt tiêu đề cho cửa sổ là “Fx Studio".
4. Gọi phương thức mainloop trên instance này để hiển thị cửa
sổ GUI.

Code Python
import tkinter as tk

root = tk.Tk()
root.title("Fx Studio")
root.mainloop()
Giải thích code:
Import thư viện tkinter: Thư viện tkinter được sử dụng để
tạo GUI trong Python.
Tạo một instance của lớp Tk: Đây là cửa sổ chính của ứng
dụng GUI.
Đặt tiêu đề cho cửa sổ: Sử dụng phương thức title để đặt
tiêu đề cho cửa sổ là "Fx Studio".
Gọi phương thức mainloop: Phương thức này được gọi để giữ
cửa sổ mở cho đến khi người dùng đóng nó.

Bổ sung
1. Sử dụng PyQt: PyQt là một bộ bindings Python cho thư viện Qt,
một thư viện để tạo GUI. PyQt hỗ trợ nhiều hệ điều hành và là
một lựa chọn tốt cho việc tạo GUI phức tạp.

2. Sử dụng wxPython: wxPython là một bộ bindings Python cho thư


viện wxWidgets, một thư viện khác để tạo GUI. wxPython hỗ trợ
nhiều hệ điều hành và cung cấp một giao diện người dùng tự
nhiên cho mỗi hệ điều hành.

3. Sử dụng Kivy: Kivy là một thư viện Python cho phát triển đa nền
tảng, bao gồm cả GUI. Kivy hỗ trợ cả cảm ứng đa điểm và là lựa
chọn tốt cho việc tạo ứng dụng di động.

4. Sử dụng PyGTK: PyGTK là một bộ bindings Python cho thư viện


GTK+. GTK+ là một thư viện để tạo GUI và được sử dụng rộng
rãi trong nhiều ứng dụng Linux, bao gồm cả môi trường desktop
GNOME.

5. Sử dụng PySide: PySide là một bộ bindings Python cho thư viện


Qt, tương tự như PyQt, nhưng được cung cấp bởi Nokia và có
một giấy phép LGPL hơn là giấy phép GPL như PyQt.
Tóm tắt:
Sử dụng thư viện tkinter để tạo GUI trong Python.
Sử dụng lớp Tk trong tkinter để tạo cửa sổ chính của ứng dụng
GUI.
Sử dụng phương thức title để đặt tiêu đề cho cửa sổ.
Sử dụng phương thức mainloop để giữ cửa sổ mở.

Chương trình này tạo ra một cửa sổ GUI đơn giản với tiêu đề “Fx
Studio” sử dụng thư viện tkinter trong Python.
152 - Viết chương trình để thêm nút
vào cửa sổ GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo ra một cửa sổ
GUI với một nút. Khi nút được nhấn, một sự kiện sẽ được xử lý.

Thuật toán:
Đầu vào:

Không có đầu vào cụ thể từ người dùng.

Đầu ra:

Một cửa sổ GUI với một nút. Khi nút được nhấn, một sự kiện
sẽ được xử lý.

Các bước thực hiện:

1. Import thư viện tkinter.


2. Tạo một instance của lớp Tk từ thư viện tkinter.
3. Tạo một nút bằng cách sử dụng lớp Button từ thư viện
tkinter.
4. Định nghĩa một hàm để xử lý sự kiện khi nút được nhấn.
5. Gắn hàm này vào nút bằng cách sử dụng thuộc tính command
của nút.
6. Gọi phương thức mainloop trên instance Tk để hiển thị cửa
sổ GUI.
Code Python
import tkinter as tk

def handle_button_click():
print("Button clicked!")

root = tk.Tk()
button = tk.Button(root, text="Click me!",
command=handle_button_click)
button.pack()
root.mainloop()

Giải thích code


Import thư viện tkinter: Thư viện tkinter được sử dụng để
tạo GUI trong Python.
Định nghĩa hàm handle_button_click: Hàm này sẽ được gọi
khi nút được nhấn. Trong trường hợp này, nó chỉ in ra một thông
báo.
Tạo một instance của lớp Tk: Đây là cửa sổ chính của ứng
dụng GUI.
Tạo một nút: Sử dụng lớp Button từ thư viện tkinter. Nút này
có văn bản là "Click me!" và khi được nhấn, nó sẽ gọi hàm
handle_button_click.
Gọi phương thức pack trên nút: Điều này sẽ thêm nút vào cửa
sổ.
Gọi phương thức mainloop: Phương thức này được gọi để giữ
cửa sổ mở cho đến khi người dùng đóng nó.

Bổ sung
Sử dụng thư viện PyQt, wxPython, Kivy, PyGTK, hoặc PySide: Tất
cả những thư viện này cũng cung cấp các lớp và phương thức để
tạo nút và xử lý sự kiện cho nút.
Tóm tắt:
Sử dụng thư viện tkinter để tạo GUI trong Python.
Sử dụng lớp Tk trong tkinter để tạo cửa sổ chính của ứng dụng
GUI.
Sử dụng lớp Button trong tkinter để tạo nút.
Sử dụng thuộc tính command của lớp Button để gắn hàm xử lý sự
kiện cho nút.
Sử dụng phương thức pack để thêm nút vào cửa sổ.
Sử dụng phương thức mainloop để giữ cửa sổ mở.

Chương trình này tạo ra một cửa sổ GUI với một nút. Khi nút được
nhấn, một sự kiện sẽ được xử lý.
153 - Viết chương trình để thêm hộp
văn bản vào cửa sổ GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo ra một cửa sổ
GUI với một hộp văn bản và một nút. Khi nút được nhấn, văn bản
trong hộp văn bản sẽ được xóa.

Thuật toán:
Đầu vào: Không có đầu vào cụ thể từ người dùng.
Đầu ra: Một cửa sổ GUI với một hộp văn bản và một nút. Khi nút
được nhấn, văn bản trong hộp văn bản sẽ được xóa.
Các bước thực hiện:
1. Import thư viện tkinter.
2. Tạo một instance của lớp Tk từ thư viện tkinter.
3. Tạo một hộp văn bản bằng cách sử dụng lớp Entry từ thư
viện tkinter.
4. Tạo một nút bằng cách sử dụng lớp Button từ thư viện
tkinter.
5. Định nghĩa một hàm để xóa văn bản trong hộp văn bản khi
nút được nhấn.
6. Gắn hàm này vào nút bằng cách sử dụng thuộc tính command
của nút.
7. Gọi phương thức mainloop trên instance Tk để hiển thị cửa
sổ GUI.

Code Python
import tkinter as tk
def clear_text():
entry.delete(0, tk.END)

root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="Clear text",
command=clear_text)
button.pack()
root.mainloop()

Giải thích code


Import thư viện tkinter: Thư viện tkinter được sử dụng để
tạo GUI trong Python.
Định nghĩa hàm clear_text: Hàm này sẽ được gọi khi nút được
nhấn. Trong trường hợp này, nó xóa văn bản trong hộp văn bản.
Tạo một instance của lớp Tk: Đây là cửa sổ chính của ứng
dụng GUI.
Tạo một hộp văn bản: Sử dụng lớp Entry từ thư viện tkinter.
Tạo một nút: Sử dụng lớp Button từ thư viện tkinter. Nút này
có văn bản là "Clear text" và khi được nhấn, nó sẽ gọi hàm
clear_text.
Gọi phương thức pack trên hộp văn bản và nút: Điều này sẽ
thêm hộp văn bản và nút vào cửa sổ.
Gọi phương thức mainloop: Phương thức này được gọi để giữ
cửa sổ mở cho đến khi người dùng đóng nó.

Bổ sung
Sử dụng thư viện PyQt, wxPython, Kivy, PyGTK, hoặc PySide: Tất
cả những thư viện này cũng cung cấp các lớp và phương thức để
tạo hộp văn bản, nút và xử lý sự kiện cho nút.
Tóm tắt:
Sử dụng thư viện tkinter để tạo GUI trong Python.
Sử dụng lớp Tk trong tkinter để tạo cửa sổ chính của ứng dụng
GUI.
Sử dụng lớp Entry trong tkinter để tạo hộp văn bản.
Sử dụng lớp Button trong tkinter để tạo nút.
Sử dụng thuộc tính command của lớp Button để gắn hàm xử lý sự
kiện cho nút.
Sử dụng phương thức pack để thêm hộp văn bản và nút vào cửa
sổ.
Sử dụng phương thức mainloop để giữ cửa sổ mở.

Chương trình này tạo ra một cửa sổ GUI với một hộp văn bản và
một nút. Khi nút được nhấn, văn bản trong hộp văn bản sẽ được
xóa.
154 - Viết chương trình để thêm nhãn
vào cửa sổ GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python sử dụng thư viện
Tkinter để tạo giao diện người dùng (GUI). Cửa sổ GUI này có tiêu
đề là “Fx Studio” và có một nhãn (label). Ngoài ra, còn có một nút
bấm; khi nhấn vào nút này, nội dung của nhãn sẽ thay đổi.

Thuật toán:

Đầu vào:
Không có đầu vào từ người dùng ngoài việc tương tác với giao
diện (nhấn nút).

Đầu ra:
Thay đổi nội dung của nhãn khi nút được nhấn.

Các bước thực hiện:


1. Tạo một cửa sổ GUI với tiêu đề “Fx Studio”.
2. Thêm một nhãn vào cửa sổ này.
3. Thêm một nút vào cửa sổ.
4. Viết hàm để thay đổi nội dung của nhãn khi nhấn vào nút.
5. Liên kết nút với hàm thay đổi nội dung nhãn.
Code Python
import tkinter as tk

def change_label_text():
label.config(text="Nội dung nhãn đã được thay đổi")

# Tạo cửa sổ chính


window = tk.Tk()
window.title("Fx Studio")

# Tạo nhãn
label = tk.Label(window, text="Đây là nhãn ban đầu")
label.pack()

# Tạo nút và liên kết với hàm change_label_text


button = tk.Button(window, text="Nhấn để thay đổi nhãn",
command=change_label_text)
button.pack()

# Chạy vòng lặp chính của Tkinter


window.mainloop()

Giải thích code


1. import tkinter as tk: Nhập thư viện Tkinter và đặt tên viết tắt
là tk.
2. def change_label_text(): Định nghĩa hàm change_label_text
để thay đổi nội dung của nhãn.
label.config(text="Nội dung nhãn đã được thay đổi"):
Sử dụng phương thức config của đối tượng nhãn để thay
đổi thuộc tính text.
3. window = tk.Tk(): Tạo một cửa sổ chính của ứng dụng.
window.title("Fx Studio"): Đặt tiêu đề cho cửa sổ là “Fx
Studio”.
4. label = tk.Label(window, text="Đây là nhãn ban đầu"): Tạo
một nhãn với nội dung ban đầu.
label.pack(): Đóng gói và hiển thị nhãn trong cửa sổ.
5. button = tk.Button(window, text="Nhấn để thay đổi nhãn",
command=change_label_text): Tạo một nút bấm.
button.pack(): Đóng gói và hiển thị nút trong cửa sổ.
command=change_label_text: Liên kết sự kiện nhấn nút với
hàm change_label_text.
6. window.mainloop(): Bắt đầu vòng lặp chính của Tkinter để cửa
sổ luôn mở và sẵn sàng cho các tương tác.

Tóm tắt
Nhập thư viện Tkinter (import tkinter as tk).
Tạo cửa sổ chính với tk.Tk().
Đặt tiêu đề cho cửa sổ (window.title).
Tạo và hiển thị nhãn (tk.Label và label.pack).
Tạo và hiển thị nút (tk.Button và button.pack).
Liên kết sự kiện nhấn nút với hàm thay đổi nội dung nhãn
(command=change_label_text).
Bắt đầu vòng lặp chính của Tkinter (window.mainloop()).

Chương trình này tạo một cửa sổ GUI với một nhãn và một nút bấm,
khi nhấn vào nút, nội dung của nhãn sẽ thay đổi.
155 - Viết chương trình để thêm menu
vào cửa sổ GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python sử dụng thư viện
Tkinter để tạo giao diện người dùng (GUI) với các yêu cầu sau:

1. Cửa sổ có tiêu đề là “Fx Studio”.


2. Có một menu trong cửa sổ.
3. Có một nhãn để hiển thị nội dung được chọn từ menu.

Thuật toán:

Đầu vào:
Các mục menu được chọn bởi người dùng.

Đầu ra:
Nội dung nhãn sẽ thay đổi dựa trên mục menu được chọn.

Các bước thực hiện:


1. Tạo một cửa sổ GUI với tiêu đề “Fx Studio”.
2. Thêm một nhãn vào cửa sổ này.
3. Tạo một menu và các mục trong menu.
4. Viết hàm để thay đổi nội dung của nhãn dựa trên mục menu
được chọn.
5. Liên kết các mục menu với hàm thay đổi nội dung nhãn.
6. Thêm menu vào cửa sổ.
Code Python
import tkinter as tk
from tkinter import Menu

def show_selected(option):
label.config(text=f"Bạn đã chọn: {option}")

# Tạo cửa sổ chính


window = tk.Tk()
window.title("Fx Studio")

# Tạo nhãn
label = tk.Label(window, text="Chọn một mục từ menu")
label.pack()

# Tạo menu
menu_bar = Menu(window)
window.config(menu=menu_bar)

# Tạo menu chính


main_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="Menu", menu=main_menu)

# Thêm các mục vào menu chính


main_menu.add_command(label="Tùy chọn 1", command=lambda:
show_selected("Tùy chọn 1"))
main_menu.add_command(label="Tùy chọn 2", command=lambda:
show_selected("Tùy chọn 2"))
main_menu.add_command(label="Tùy chọn 3", command=lambda:
show_selected("Tùy chọn 3"))

# Chạy vòng lặp chính của Tkinter


window.mainloop()

Giải thích code


1. import tkinter as tk và from tkinter import Menu: Nhập thư
viện Tkinter và lớp Menu để sử dụng các tính năng GUI.
2. def show_selected(option): Định nghĩa hàm show_selected để
thay đổi nội dung của nhãn dựa trên mục menu được chọn.
label.config(text=f"Bạn đã chọn: {option}"): Sử dụng
phương thức config của đối tượng nhãn để thay đổi thuộc
tính text.
3. window = tk.Tk(): Tạo một cửa sổ chính của ứng dụng.
window.title("Fx Studio"): Đặt tiêu đề cho cửa sổ là “Fx
Studio”.
4. label = tk.Label(window, text="Chọn một mục từ menu"): Tạo
một nhãn với nội dung ban đầu.
label.pack(): Đóng gói và hiển thị nhãn trong cửa sổ.
5. menu_bar = Menu(window): Tạo thanh menu.
window.config(menu=menu_bar): Đặt thanh menu vào cửa
sổ.
6. main_menu = Menu(menu_bar, tearoff=0): Tạo menu chính.
menu_bar.add_cascade(label="Menu", menu=main_menu):
Thêm menu chính vào thanh menu.
7. main_menu.add_command(label="Tùy chọn 1", command=lambda:
show_selected("Tùy chọn 1")): Thêm mục “Tùy chọn 1” vào
menu chính và liên kết sự kiện chọn mục với hàm
show_selected.
Tương tự, thêm các mục “Tùy chọn 2” và “Tùy chọn 3” vào
menu chính.
8. window.mainloop(): Bắt đầu vòng lặp chính của Tkinter để cửa
sổ luôn mở và sẵn sàng cho các tương tác.

Tóm tắt
Nhập thư viện Tkinter và lớp Menu (import tkinter as tk, from
tkinter import Menu).
Tạo cửa sổ chính với tk.Tk().
Đặt tiêu đề cho cửa sổ (window.title).
Tạo và hiển thị nhãn (tk.Label và label.pack).
Tạo thanh menu (Menu).
Tạo menu chính và thêm vào thanh menu (Menu và
menu_bar.add_cascade).
Thêm các mục vào menu chính và liên kết sự kiện chọn mục với
hàm thay đổi nội dung nhãn (main_menu.add_command).
Bắt đầu vòng lặp chính của Tkinter (window.mainloop()).

Chương trình này tạo một cửa sổ GUI với một menu và một nhãn.
Khi người dùng chọn một mục từ menu, nội dung của nhãn sẽ thay
đổi để hiển thị mục đã chọn.
156 - Viết chương trình để thêm hộp
thoại thông báo vào cửa sổ GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python sử dụng thư viện
Tkinter để tạo giao diện người dùng (GUI) với các yêu cầu sau:

1. Cửa sổ có tiêu đề là “Fx Studio”.


2. Kích thước tối thiểu của cửa sổ là 500x400.
3. Có một hộp thoại thông báo.
4. Có một nút để xóa nội dung của hộp thoại.

Thuật toán:

Đầu vào:
Các sự kiện từ người dùng như nhấn nút.

Đầu ra:
Xóa nội dung của hộp thoại khi nút được nhấn.

Các bước thực hiện:


1. Tạo một cửa sổ GUI với tiêu đề “Fx Studio” và thiết lập kích
thước tối thiểu.
2. Thêm một hộp thoại thông báo vào cửa sổ.
3. Thêm một nút vào cửa sổ để xóa nội dung của hộp thoại.
4. Viết hàm để xóa nội dung của hộp thoại khi nhấn vào nút.
5. Liên kết nút với hàm xóa nội dung hộp thoại.
Code Python
import tkinter as tk
from tkinter import messagebox

def clear_textbox():
textbox.delete("1.0", tk.END)
messagebox.showinfo("Thông báo", "Nội dung đã được xóa")

# Tạo cửa sổ chính


window = tk.Tk()
window.title("Fx Studio")
window.minsize(500, 400)

# Tạo hộp thoại thông báo (Text widget)


textbox = tk.Text(window, width=50, height=10)
textbox.pack(pady=20)

# Tạo nút để xóa nội dung của hộp thoại


clear_button = tk.Button(window, text="Xóa nội dung",
command=clear_textbox)
clear_button.pack(pady=20)

# Chạy vòng lặp chính của Tkinter


window.mainloop()

Giải thích code


1. import tkinter as tk và from tkinter import messagebox:
Nhập thư viện Tkinter và module messagebox để sử dụng các
tính năng GUI và hiển thị hộp thoại thông báo.
2. def clear_textbox(): Định nghĩa hàm clear_textbox để xóa nội
dung của hộp thoại và hiển thị thông báo.
textbox.delete("1.0", tk.END): Xóa toàn bộ nội dung của
hộp thoại từ vị trí bắt đầu “1.0” đến cuối tk.END.
messagebox.showinfo("Thông báo", "Nội dung đã được
xóa"): Hiển thị hộp thoại thông báo với tiêu đề “Thông báo”
và nội dung “Nội dung đã được xóa”.
3. window = tk.Tk(): Tạo một cửa sổ chính của ứng dụng.
window.title("Fx Studio"): Đặt tiêu đề cho cửa sổ là “Fx
Studio”.
window.minsize(500, 400): Thiết lập kích thước tối thiểu cho
cửa sổ là 500x400.
4. textbox = tk.Text(window, width=50, height=10): Tạo một
hộp thoại thông báo với kích thước cụ thể.
textbox.pack(pady=20): Đóng gói và hiển thị hộp thoại trong
cửa sổ, với khoảng cách dọc (padding) là 20 pixel.
5. clear_button = tk.Button(window, text="Xóa nội dung",
command=clear_textbox): Tạo một nút bấm với nhãn “Xóa nội
dung” và liên kết sự kiện nhấn nút với hàm clear_textbox.
clear_button.pack(pady=20): Đóng gói và hiển thị nút trong
cửa sổ, với khoảng cách dọc (padding) là 20 pixel.
6. window.mainloop(): Bắt đầu vòng lặp chính của Tkinter để cửa
sổ luôn mở và sẵn sàng cho các tương tác.

Tóm tắt
Nhập thư viện Tkinter và module messagebox (import tkinter
as tk, from tkinter import messagebox).
Tạo cửa sổ chính với tk.Tk().
Đặt tiêu đề và kích thước tối thiểu cho cửa sổ (window.title và
window.minsize).
Tạo và hiển thị hộp thoại thông báo (tk.Text và textbox.pack).
Tạo và hiển thị nút bấm (tk.Button và clear_button.pack).
Liên kết sự kiện nhấn nút với hàm xóa nội dung hộp thoại
(command=clear_textbox).
Bắt đầu vòng lặp chính của Tkinter (window.mainloop()).

Chương trình này tạo một cửa sổ GUI với một hộp thoại thông báo
và một nút bấm. Khi người dùng nhấn vào nút, nội dung của hộp
thoại sẽ được xóa và hiển thị một hộp thoại thông báo xác nhận
rằng nội dung đã được xóa.
157 - Viết chương trình để thêm hình
ảnh vào cửa sổ GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python sử dụng thư viện
Tkinter để tạo giao diện người dùng (GUI) với các yêu cầu sau:

1. Cửa sổ có tiêu đề là “Fx Studio”.


2. Kích thước tối thiểu của cửa sổ là 400x400.
3. Có một nút để mở hộp thoại chọn ảnh của hệ thống.
4. Hiển thị ảnh đã chọn trong cửa sổ.

Thuật toán:

Đầu vào:
Đường dẫn tới ảnh được chọn bởi người dùng từ hộp thoại hệ
thống.

Đầu ra:
Hiển thị ảnh trong cửa sổ GUI.

Các bước thực hiện:


1. Tạo một cửa sổ GUI với tiêu đề “Fx Studio” và thiết lập kích
thước tối thiểu.
2. Thêm một nút vào cửa sổ để mở hộp thoại chọn ảnh.
3. Viết hàm để mở hộp thoại chọn ảnh và hiển thị ảnh trong cửa sổ.
4. Liên kết nút với hàm mở hộp thoại chọn ảnh.
5. Hiển thị ảnh đã chọn trong cửa sổ.

Code Python
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk

def open_image():
file_path = filedialog.askopenfilename(filetypes=[("Image
files", "*.jpg *.jpeg *.png *.bmp *.gif")])
if file_path:
load_image(file_path)

def load_image(file_path):
img = Image.open(file_path)
img = img.resize((400, 400), Image.LANCZOS) # Resize
image to fit the window
img_tk = ImageTk.PhotoImage(img)

if 'image_label' in globals():
image_label.config(image=img_tk)
image_label.image = img_tk
else:
global image_label
image_label = tk.Label(window, image=img_tk)
image_label.image = img_tk
image_label.pack()

# Tạo cửa sổ chính


window = tk.Tk()
window.title("Fx Studio")
window.minsize(400, 400)

# Tạo nút để mở hộp thoại chọn ảnh


open_button = tk.Button(window, text="Chọn ảnh",
command=open_image)
open_button.pack(pady=20)
# Chạy vòng lặp chính của Tkinter
window.mainloop()

Giải thích code


1. import tkinter as tk và from tkinter import filedialog:
Nhập thư viện Tkinter và module filedialog để sử dụng các
tính năng GUI và mở hộp thoại chọn file.
2. from PIL import Image, ImageTk: Nhập các lớp Image và
ImageTk từ thư viện PIL (Pillow) để xử lý và hiển thị ảnh.
3. def open_image(): Định nghĩa hàm open_image để mở hộp thoại
chọn ảnh.
file_path = filedialog.askopenfilename(filetypes=
[("Image files", "*.jpg *.jpeg *.png *.bmp *.gif")]):
Mở hộp thoại chọn ảnh và lấy đường dẫn của file ảnh được
chọn.
if file_path: Nếu người dùng đã chọn một file ảnh, gọi
hàm load_image(file_path) để tải và hiển thị ảnh.
4. def load_image(file_path): Định nghĩa hàm load_image để tải
và hiển thị ảnh trong cửa sổ.
img = Image.open(file_path): Mở file ảnh từ đường dẫn
được chọn.
img = img.resize((400, 400), Image.LANCZOS): Thay đổi
kích thước ảnh để phù hợp với cửa sổ.
img_tk = ImageTk.PhotoImage(img): Chuyển đổi ảnh thành
đối tượng PhotoImage để hiển thị trong Tkinter.
Sử dụng global image_label để đảm bảo image_label có
thể được cập nhật toàn cầu nếu đã tồn tại.
image_label.config(image=img_tk): Nếu image_label đã
tồn tại, cập nhật ảnh mới.
image_label = tk.Label(window, image=img_tk): Nếu
image_label chưa tồn tại, tạo một nhãn mới để hiển thị ảnh.
image_label.pack(): Đóng gói và hiển thị nhãn trong cửa sổ.
5. window = tk.Tk(): Tạo một cửa sổ chính của ứng dụng.
window.title("Fx Studio"): Đặt tiêu đề cho cửa sổ là “Fx
Studio”.
window.minsize(400, 400): Thiết lập kích thước tối thiểu cho
cửa sổ là 400x400.
6. open_button = tk.Button(window, text="Chọn ảnh",
command=open_image): Tạo một nút bấm với nhãn “Chọn ảnh” và
liên kết sự kiện nhấn nút với hàm open_image.
open_button.pack(pady=20): Đóng gói và hiển thị nút trong
cửa sổ, với khoảng cách dọc (padding) là 20 pixel.
7. window.mainloop(): Bắt đầu vòng lặp chính của Tkinter để cửa
sổ luôn mở và sẵn sàng cho các tương tác.

Tóm tắt
Nhập thư viện Tkinter và Pillow (import tkinter as tk, from
tkinter import filedialog, from PIL import Image, ImageTk).
Tạo cửa sổ chính với tk.Tk().
Đặt tiêu đề và kích thước tối thiểu cho cửa sổ (window.title và
window.minsize).
Tạo nút bấm và liên kết sự kiện nhấn nút với hàm mở hộp thoại
chọn ảnh (tk.Button và open_button.pack).
Định nghĩa hàm mở hộp thoại chọn ảnh (open_image) và hàm tải
và hiển thị ảnh (load_image).
Bắt đầu vòng lặp chính của Tkinter (window.mainloop()).

Chương trình này tạo một cửa sổ GUI với một nút bấm để mở hộp
thoại chọn ảnh của hệ thống và hiển thị ảnh đã chọn trong cửa sổ.
158 - Viết chương trình để thêm bảng
vào cửa sổ GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python sử dụng thư viện
Tkinter để tạo giao diện người dùng (GUI) với các yêu cầu sau:

1. Cửa sổ có tiêu đề là “Fx Studio”.


2. Kích thước tối thiểu của cửa sổ là 600x400.
3. Thêm một bảng (table) vào cửa sổ.
4. Có một nút để thêm dữ liệu ngẫu nhiên vào bảng.
5. Nếu bảng có kích thước lớn hơn cửa sổ, cần có thanh cuộn để
có thể xem nội dung.

Thuật toán:

Đầu vào:
Các sự kiện từ người dùng như nhấn nút.

Đầu ra:
Thêm dữ liệu ngẫu nhiên vào bảng khi nhấn nút.

Các bước thực hiện:


1. Tạo một cửa sổ GUI với tiêu đề “Fx Studio” và thiết lập kích
thước tối thiểu.
2. Thêm một bảng vào cửa sổ.
3. Thêm một thanh cuộn cho bảng.
4. Thêm một nút vào cửa sổ để thêm dữ liệu ngẫu nhiên vào bảng.
5. Viết hàm để thêm dữ liệu ngẫu nhiên vào bảng khi nhấn nút.
6. Liên kết nút với hàm thêm dữ liệu ngẫu nhiên.

Code Python
import tkinter as tk
from tkinter import ttk
import random

def add_random_data():
data = [str(random.randint(1, 100)) for _ in range(3)]
tree.insert("", "end", values=data)

# Tạo cửa sổ chính


window = tk.Tk()
window.title("Fx Studio")
window.minsize(600, 400)

# Tạo frame để chứa bảng và thanh cuộn


frame = tk.Frame(window)
frame.pack(fill="both", expand=True)

# Tạo bảng (Treeview)


columns = ("col1", "col2", "col3")
tree = ttk.Treeview(frame, columns=columns, show="headings")
tree.heading("col1", text="Column 1")
tree.heading("col2", text="Column 2")
tree.heading("col3", text="Column 3")

# Tạo thanh cuộn cho bảng


scrollbar = ttk.Scrollbar(frame, orient="vertical",
command=tree.yview)
tree.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side="right", fill="y")
tree.pack(fill="both", expand=True)

# Tạo nút để thêm dữ liệu ngẫu nhiên vào bảng


add_button = tk.Button(window, text="Thêm dữ liệu ngẫu
nhiên", command=add_random_data)
add_button.pack(pady=10)

# Chạy vòng lặp chính của Tkinter


window.mainloop()

Giải thích code


1. import tkinter as tk và from tkinter import ttk: Nhập thư
viện Tkinter và module ttk để sử dụng các tính năng GUI.
2. import random: Nhập thư viện random để tạo dữ liệu ngẫu nhiên.
3. def add_random_data(): Định nghĩa hàm add_random_data để
thêm dữ liệu ngẫu nhiên vào bảng.
data = [str(random.randint(1, 100)) for _ in
range(3)]: Tạo một danh sách gồm 3 giá trị ngẫu nhiên từ 1
đến 100.
tree.insert("", "end", values=data): Thêm hàng mới vào
bảng với các giá trị ngẫu nhiên.
4. window = tk.Tk(): Tạo một cửa sổ chính của ứng dụng.
window.title("Fx Studio"): Đặt tiêu đề cho cửa sổ là “Fx
Studio”.
window.minsize(600, 400): Thiết lập kích thước tối thiểu cho
cửa sổ là 600x400.
5. frame = tk.Frame(window): Tạo một frame để chứa bảng và
thanh cuộn.
frame.pack(fill="both", expand=True): Đóng gói và hiển
thị frame, cho phép nó mở rộng để chứa nội dung.
6. columns = ("col1", "col2", "col3"): Định nghĩa các cột cho
bảng.
tree = ttk.Treeview(frame, columns=columns,
show="headings"):Tạo bảng với các cột đã định nghĩa.
tree.heading("col1", text="Column 1"),
tree.heading("col2", text="Column 2"),
tree.heading("col3", text="Column 3"): Đặt tiêu đề cho
các cột.
7. scrollbar = ttk.Scrollbar(frame, orient="vertical",
command=tree.yview): Tạo thanh cuộn dọc cho bảng.
tree.configure(yscrollcommand=scrollbar.set): Liên kết
thanh cuộn với bảng.
scrollbar.pack(side="right", fill="y"): Đóng gói và hiển
thị thanh cuộn ở bên phải của frame.
tree.pack(fill="both", expand=True): Đóng gói và hiển thị
bảng, cho phép nó mở rộng để chứa nội dung.
8. add_button = tk.Button(window, text="Thêm dữ liệu ngẫu
nhiên", command=add_random_data): Tạo một nút bấm với nhãn
“Thêm dữ liệu ngẫu nhiên” và liên kết sự kiện nhấn nút với hàm
add_random_data.
add_button.pack(pady=10): Đóng gói và hiển thị nút trong
cửa sổ, với khoảng cách dọc (padding) là 10 pixel.
9. window.mainloop(): Bắt đầu vòng lặp chính của Tkinter để cửa
sổ luôn mở và sẵn sàng cho các tương tác.

Tóm tắt
Nhập thư viện Tkinter và Pillow (import tkinter as tk, from
tkinter import ttk, import random).
Tạo cửa sổ chính với tk.Tk().
Đặt tiêu đề và kích thước tối thiểu cho cửa sổ (window.title và
window.minsize).
Tạo frame để chứa bảng và thanh cuộn (tk.Frame).
Tạo bảng (ttk.Treeview) và định nghĩa các cột.
Tạo thanh cuộn cho bảng (ttk.Scrollbar).
Tạo nút bấm và liên kết sự kiện nhấn nút với hàm thêm dữ liệu
ngẫu nhiên (tk.Button và add_button.pack).
Định nghĩa hàm thêm dữ liệu ngẫu nhiên (add_random_data).
Bắt đầu vòng lặp chính của Tkinter (window.mainloop()).

Chương trình này tạo một cửa sổ GUI với một bảng và một nút bấm
để thêm dữ liệu ngẫu nhiên vào bảng. Khi dữ liệu trong bảng vượt
quá kích thước cửa sổ, thanh cuộn sẽ xuất hiện để cho phép người
dùng xem toàn bộ nội dung.
159 - Viết chương trình để thêm đồ thị
vào cửa sổ GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python sử dụng thư viện
Tkinter để tạo giao diện người dùng (GUI) với các yêu cầu sau:

1. Cửa sổ có tiêu đề là “Fx Studio”.


2. Kích thước tối thiểu của cửa sổ là 600x400.
3. Thêm một đồ thị vào cửa sổ để hiển thị dữ liệu giả về nhiệt độ
trung bình và lượng mưa trong 12 tháng của một năm.

Thuật toán:

Đầu vào:
Dữ liệu giả về nhiệt độ và lượng mưa trong 12 tháng.

Đầu ra:
Hiển thị đồ thị về nhiệt độ và lượng mưa trong cửa sổ GUI.

Các bước thực hiện:


1. Tạo một cửa sổ GUI với tiêu đề “Fx Studio” và thiết lập kích
thước tối thiểu.
2. Thêm một đồ thị vào cửa sổ để hiển thị dữ liệu.
3. Sử dụng thư viện Matplotlib để vẽ đồ thị.
4. Nhúng đồ thị Matplotlib vào Tkinter.
Code Python
import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import
FigureCanvasTkAgg

# Dữ liệu giả về nhiệt độ và lượng mưa trong 12 tháng


months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
"Aug", "Sep", "Oct", "Nov", "Dec"]
temperature = [5, 7, 12, 17, 20, 25, 30, 28, 22, 18, 10, 6]
rainfall = [50, 40, 60, 80, 70, 50, 30, 40, 60, 80, 70, 50]

# Tạo cửa sổ chính


window = tk.Tk()
window.title("Fx Studio")
window.minsize(600, 400)

# Tạo figure và axes cho đồ thị


fig, ax1 = plt.subplots()

# Vẽ dữ liệu nhiệt độ và lượng mưa


ax1.plot(months, temperature, 'r-', label='Temperature (°C)')
ax1.set_xlabel('Month')
ax1.set_ylabel('Temperature (°C)', color='r')
ax2 = ax1.twinx()
ax2.plot(months, rainfall, 'b-', label='Rainfall (mm)')
ax2.set_ylabel('Rainfall (mm)', color='b')

# Thêm legend
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')

# Tạo canvas để nhúng đồ thị vào Tkinter


canvas = FigureCanvasTkAgg(fig, master=window)
canvas.draw()
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

# Chạy vòng lặp chính của Tkinter


window.mainloop()
Giải thích code
1. import tkinter as tk và from tkinter import ttk: Nhập thư
viện Tkinter và module ttk để sử dụng các tính năng GUI.
2. import matplotlib.pyplot as plt và from
matplotlib.backends.backend_tkagg import
FigureCanvasTkAgg: Nhập thư viện Matplotlib và module để
nhúng đồ thị vào Tkinter.
3. Khai báo dữ liệu giả về nhiệt độ và lượng mưa trong 12 tháng:
months: Danh sách các tháng trong năm.
temperature: Danh sách nhiệt độ trung bình từng tháng.
rainfall: Danh sách lượng mưa từng tháng.
4. window = tk.Tk(): Tạo một cửa sổ chính của ứng dụng.
window.title("Fx Studio"): Đặt tiêu đề cho cửa sổ là “Fx
Studio”.
window.minsize(600, 400): Thiết lập kích thước tối thiểu cho
cửa sổ là 600x400.
5. fig, ax1 = plt.subplots(): Tạo figure và axes để vẽ đồ thị.
ax1.plot(months, temperature, 'r-', label='Temperature
(°C)'): Vẽ đồ thị nhiệt độ với màu đỏ và nhãn ‘Temperature
(°C)’.
ax1.set_xlabel('Month'): Đặt nhãn cho trục x là ‘Month’.
ax1.set_ylabel('Temperature (°C)', color='r'): Đặt nhãn
cho trục y là ‘Temperature (°C)’ và màu đỏ.
ax2 = ax1.twinx(): Tạo một trục y thứ hai để vẽ lượng mưa.
ax2.plot(months, rainfall, 'b-', label='Rainfall
(mm)'): Vẽ đồ thị lượng mưa với màu xanh và nhãn ‘Rainfall
(mm)’.
ax2.set_ylabel('Rainfall (mm)', color='b'): Đặt nhãn
cho trục y là ‘Rainfall (mm)’ và màu xanh.
6. ax1.legend(loc='upper left') và ax2.legend(loc='upper
right'): Thêm chú thích (legend) cho đồ thị, đặt vị trí chú thích
tương ứng.
7. canvas = FigureCanvasTkAgg(fig, master=window): Tạo canvas
để nhúng đồ thị vào Tkinter.
canvas.draw(): Vẽ đồ thị.
canvas.get_tk_widget().pack(fill=tk.BOTH,
expand=True): Đóng gói và hiển thị canvas trong cửa sổ, cho
phép nó mở rộng để chứa nội dung.
8. window.mainloop(): Bắt đầu vòng lặp chính của Tkinter để cửa
sổ luôn mở và sẵn sàng cho các tương tác.

Tóm tắt
Nhập thư viện Tkinter và Matplotlib (import tkinter as tk, from
tkinter import ttk, import matplotlib.pyplot as plt, from
matplotlib.backends.backend_tkagg import
FigureCanvasTkAgg).
Khai báo dữ liệu giả về nhiệt độ và lượng mưa trong 12 tháng.
Tạo cửa sổ chính với tk.Tk().
Đặt tiêu đề và kích thước tối thiểu cho cửa sổ (window.title và
window.minsize).
Tạo figure và axes để vẽ đồ thị (plt.subplots).
Vẽ đồ thị nhiệt độ và lượng mưa (ax1.plot và ax2.plot).
Đặt nhãn cho trục x và y, thêm chú thích cho đồ thị
(ax1.set_xlabel, ax1.set_ylabel, ax2.set_ylabel, ax1.legend,
ax2.legend).
Tạo canvas để nhúng đồ thị vào Tkinter (FigureCanvasTkAgg).
Đóng gói và hiển thị canvas trong cửa sổ
(canvas.get_tk_widget().pack).
Bắt đầu vòng lặp chính của Tkinter (window.mainloop()).

Chương trình này tạo một cửa sổ GUI với một đồ thị hiển thị dữ liệu
giả về nhiệt độ trung bình và lượng mưa trong 12 tháng của một
năm.
160 - Viết chương trình để tạo ứng
dụng máy tính đơn giản với GUI

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python sử dụng thư viện
Tkinter để tạo một ứng dụng máy tính đơn giản với giao diện người
dùng (GUI). Ứng dụng máy tính sẽ hỗ trợ các phép tính cơ bản như
cộng, trừ, nhân, chia.

Thuật toán:

Đầu vào:
Các biểu thức toán học do người dùng nhập vào.

Đầu ra:
Kết quả của các phép toán.

Các bước thực hiện:


1. Tạo một cửa sổ GUI với Tkinter.
2. Thêm màn hình hiển thị kết quả.
3. Thêm các nút cho các số từ 0 đến 9 và các phép toán (+, -, *, /).
4. Thêm nút để tính toán kết quả (=) và nút để xóa (C).
5. Viết hàm để xử lý các sự kiện nhấn nút và hiển thị kết quả trên
màn hình.
Code Python
import tkinter as tk

def click_button(item):
global expression
expression += str(item)
input_text.set(expression)

def clear():
global expression
expression = ""
input_text.set("")

def calculate():
global expression
try:
result = str(eval(expression))
input_text.set(result)
expression = result
except Exception as e:
input_text.set("error")
expression = ""

# Khởi tạo cửa sổ chính


window = tk.Tk()
window.title("Máy tính đơn giản")
window.geometry("400x500")

expression = ""
input_text = tk.StringVar()

# Tạo khung cho màn hình hiển thị


input_frame = tk.Frame(window, width=400, height=50, bd=0,
highlightbackground="black", highlightcolor="black",
highlightthickness=2)
input_frame.pack(side=tk.TOP)

# Tạo màn hình hiển thị


input_field = tk.Entry(input_frame, font=('arial', 18,
'bold'), textvariable=input_text, width=50, bg="#eee", bd=0,
justify=tk.RIGHT)
input_field.grid(row=0, column=0)
input_field.pack(ipady=10)

# Tạo khung cho các nút


btns_frame = tk.Frame(window, width=400, height=450,
bg="grey")
btns_frame.pack()

# Định nghĩa các nút


buttons = [
('7', 1, 0), ('8', 1, 1), ('9', 1, 2),
('4', 2, 0), ('5', 2, 1), ('6', 2, 2),
('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('0', 4, 1),
('+', 1, 3), ('-', 2, 3), ('*', 3, 3), ('/', 4, 3),
('=', 4, 2), ('C', 4, 0),
]

# Thêm các nút vào khung


for (text, row, col) in buttons:
if text == "=":
btn = tk.Button(btns_frame, text=text, width=10,
height=3, bd=0, bg="#eee", cursor="hand2", command=lambda:
calculate())
elif text == "C":
btn = tk.Button(btns_frame, text=text, width=10,
height=3, bd=0, bg="#f44336", cursor="hand2", command=lambda:
clear())
else:
btn = tk.Button(btns_frame, text=text, width=10,
height=3, bd=0, bg="#fff", cursor="hand2", command=lambda
text=text: click_button(text))

btn.grid(row=row, column=col, padx=1, pady=1)

# Chạy vòng lặp chính của Tkinter


window.mainloop()
Giải thích code
1. import tkinter as tk: Nhập thư viện Tkinter để tạo giao diện
người dùng.
2. def click_button(item): Định nghĩa hàm để xử lý sự kiện khi
người dùng nhấn nút số hoặc phép toán.
global expression: Sử dụng biến toàn cục expression.
expression += str(item): Thêm ký tự của nút được nhấn
vào biểu thức.
input_text.set(expression): Cập nhật màn hình hiển thị
với biểu thức mới.
3. def clear(): Định nghĩa hàm để xóa màn hình hiển thị.
global expression: Sử dụng biến toàn cục expression.
expression = "": Đặt lại biểu thức thành chuỗi rỗng.
input_text.set(""): Cập nhật màn hình hiển thị để xóa.
4. def calculate(): Định nghĩa hàm để tính toán kết quả của biểu
thức.
global expression: Sử dụng biến toàn cục expression.
result = str(eval(expression)): Tính toán kết quả của
biểu thức.
input_text.set(result): Cập nhật màn hình hiển thị với kết
quả.
expression = result: Đặt biểu thức thành kết quả để tiếp
tục tính toán.
except Exception as e: Nếu có lỗi, hiển thị “error” trên màn
hình.
5. window = tk.Tk(): Tạo cửa sổ chính của ứng dụng.
window.title("Máy tính đơn giản"): Đặt tiêu đề cho cửa
sổ.
window.geometry("400x500"): Thiết lập kích thước của cửa
sổ.
6. expression = "": Khởi tạo biến biểu thức là chuỗi rỗng.
input_text = tk.StringVar(): Tạo biến để lưu giá trị hiển
thị trên màn hình.
7. input_frame = tk.Frame(window, width=400, height=50,
bd=0, highlightbackground="black",
highlightcolor="black", highlightthickness=2): Tạo khung
cho màn hình hiển thị.
input_frame.pack(side=tk.TOP): Đóng gói khung và đặt ở
phía trên của cửa sổ.
8. input_field = tk.Entry(input_frame, font=('arial', 18,
'bold'), textvariable=input_text, width=50, bg="#eee",
bd=0, justify=tk.RIGHT): Tạo màn hình hiển thị.
input_field.grid(row=0, column=0): Đặt màn hình hiển thị
vào khung.
input_field.pack(ipady=10): Đóng gói màn hình hiển thị
với khoảng cách dọc (padding) là 10 pixel.
9. btns_frame = tk.Frame(window, width=400, height=450,
bg="grey"): Tạo khung cho các nút.
btns_frame.pack(): Đóng gói khung và hiển thị trong cửa sổ.
10. buttons: Danh sách các nút với vị trí tương ứng trong lưới (grid).
11. Thêm các nút vào khung:
for (text, row, col) in buttons: Lặp qua danh sách các
nút.
btn = tk.Button(...): Tạo nút với các thuộc tính tương
ứng.
btn.grid(row=row, column=col, padx=1, pady=1): Đặt nút
vào lưới với khoảng cách ngang và dọc (padding) là 1 pixel.
12. window.mainloop(): Bắt đầu vòng lặp chính của Tkinter để cửa
sổ luôn mở và sẵn sàng cho các tương tác.

Tóm tắt
Nhập thư viện Tkinter (import tkinter as tk).
Tạo cửa sổ chính với tk.Tk().
Đặt tiêu đề và kích thước cho cửa sổ (window.title và
window.geometry).
Khởi tạo biến biểu thức và biến hiển thị (expression và
input_text).
Tạo khung và màn hình hiển thị (tk.Frame và tk.Entry).
Tạo khung và thêm các nút với các phép toán và số (tk.Button
và btns_frame.pack).
Định nghĩa hàm để xử lý sự kiện nhấn nút, xóa màn hình và tính
toán kết quả (click_button, clear, calculate).
Bắt đầu vòng lặp chính của Tkinter (window.mainloop()).

Chương trình này tạo một ứng dụng máy tính đơn giản với giao diện
người dùng cho phép thực hiện các phép toán cơ bản như cộng,
trừ, nhân, chia.
Chương 17 : Bài tập tổng hợp
161. Viết chương trình để quản lý danh sách học sinh.
162. Viết chương trình để quản lý thư viện sách.
163. Viết chương trình để quản lý cửa hàng bán lẻ.
164. Viết chương trình để quản lý kho hàng.
165. Viết chương trình để quản lý nhân viên.
166. Viết chương trình để quản lý lịch học.
167. Viết chương trình để quản lý điểm thi.
168. Viết chương trình để quản lý thông tin cá nhân.
169. Viết chương trình để quản lý thu chi cá nhân.
170. Viết chương trình để quản lý công việc hàng ngày.
161 - Viết chương trình để quản lý
danh sách học sinh

Giải thích đề bài


Đề bài yêu cầu viết một chương trình quản lý danh sách học sinh
bằng Python, sử dụng hướng đối tượng để tạo các lớp học sinh.
Chúng ta sẽ tạo lớp HọcSinh (Student) để biểu diễn các thuộc tính
và phương thức của học sinh, đồng thời cung cấp các chức năng cơ
bản như thêm, xóa, và hiển thị danh sách học sinh.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý danh sách học sinh.

Đầu ra
Thông tin danh sách học sinh được hiển thị theo các yêu cầu từ
người dùng.

Các bước thực hiện


1. Tạo lớp HocSinh với các thuộc tính như tên, tuổi, và lớp.
2. Tạo lớp QuanLyHocSinh để quản lý danh sách các học sinh.
3. Các phương thức chính bao gồm:
Thêm học sinh mới vào danh sách.
Xóa học sinh khỏi danh sách.
Hiển thị danh sách học sinh.
4. Cung cấp giao diện người dùng để nhập lệnh và quản lý danh
sách học sinh.

Code Python

Học sinh
class HocSinh:
def __init__(self, ten, tuoi, lop):
self.ten = ten
self.tuoi = tuoi
self.lop = lop

def __str__(self):
return f"Học sinh: {self.ten}, Tuổi: {self.tuoi},
Lớp: {self.lop}"

class QuanLyHocSinh:
def __init__(self):
self.danh_sach_hoc_sinh = []

def them_hoc_sinh(self, hoc_sinh):


self.danh_sach_hoc_sinh.append(hoc_sinh)

def xoa_hoc_sinh(self, ten):


for hoc_sinh in self.danh_sach_hoc_sinh:
if hoc_sinh.ten == ten:
self.danh_sach_hoc_sinh.remove(hoc_sinh)
return True
return False

def hien_thi_danh_sach(self):
for hoc_sinh in self.danh_sach_hoc_sinh:
print(hoc_sinh)
Menu chương trình
def menu():
qlhs = QuanLyHocSinh()
while True:
print("\n1. Thêm học sinh")
print("2. Xóa học sinh")
print("3. Hiển thị danh sách học sinh")
print("4. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
ten = input("Nhập tên học sinh: ")
tuoi = input("Nhập tuổi học sinh: ")
lop = input("Nhập lớp học sinh: ")
hoc_sinh = HocSinh(ten, tuoi, lop)
qlhs.them_hoc_sinh(hoc_sinh)
print("Đã thêm học sinh.")

elif lua_chon == '2':


ten = input("Nhập tên học sinh cần xóa: ")
if qlhs.xoa_hoc_sinh(ten):
print("Đã xóa học sinh.")
else:
print("Không tìm thấy học sinh.")

elif lua_chon == '3':


qlhs.hien_thi_danh_sach()

elif lua_chon == '4':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")

if __name__ == "__main__":
menu()
Giải thích code
1. Định nghĩa lớp HocSinh:

__init__: Hàm khởi tạo với các tham số tên, tuổi và lớp.
__str__: Phương thức để hiển thị thông tin học sinh.

2. Định nghĩa lớp QuanLyHocSinh:

__init__:Hàm khởi tạo để khởi tạo danh sách học sinh.


them_hoc_sinh: Thêm học sinh vào danh sách.
xoa_hoc_sinh: Xóa học sinh khỏi danh sách theo tên.
hien_thi_danh_sach: Hiển thị danh sách học sinh.

3. Hàm menu:

Tạo đối tượng QuanLyHocSinh.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm, xóa và hiển thị danh sách học sinh dựa trên lựa chọn
của người dùng.

Tóm tắt
Lớp: Định nghĩa và sử dụng các lớp trong Python.
Phương thức: Tạo và sử dụng các phương thức trong lớp.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.

Chương trình quản lý danh sách học sinh bằng Python sử dụng
hướng đối tượng để tạo lớp HọcSinh và QuanLyHocSinh, cung cấp
các chức năng thêm, xóa, và hiển thị danh sách học sinh qua giao
diện người dùng đơn giản.
162 - Viết chương trình để quản lý thư
viện sách

Giải thích đề bài


Đề bài yêu cầu viết một chương trình quản lý thư viện sách bằng
Python, sử dụng hướng đối tượng để tạo các đối tượng cơ bản như
sách, người mượn sách và quản lý thư viện. Chúng ta sẽ tạo các
lớp tương ứng để biểu diễn các thuộc tính và phương thức của từng
đối tượng, đồng thời cung cấp các chức năng cơ bản như thêm
sách, thêm người mượn, mượn sách, trả sách và hiển thị danh sách
sách và người mượn.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý thư viện.

Đầu ra
Thông tin về sách và người mượn được hiển thị theo các yêu
cầu từ người dùng.

Các bước thực hiện


1. Tạo lớp Sach với các thuộc tính như tiêu đề, tác giả và trạng thái
(đã mượn/chưa mượn).
2. Tạo lớp NguoiMuon với các thuộc tính như tên và danh sách sách
đã mượn.
3. Tạo lớp QuanLyThuVien để quản lý danh sách các sách và người
mượn.
4. Các phương thức chính bao gồm:
Thêm sách mới vào thư viện.
Thêm người mượn mới.
Mượn sách.
Trả sách.
Hiển thị danh sách sách.
Hiển thị danh sách người mượn.
5. Cung cấp giao diện người dùng để nhập lệnh và quản lý thư
viện.

Code Python

Sách
class Sach:
def __init__(self, tieu_de, tac_gia):
self.tieu_de = tieu_de
self.tac_gia = tac_gia
self.da_muon = False

def __str__(self):
trang_thai = "Đã mượn" if self.da_muon else "Chưa
mượn"
return f"Sách: {self.tieu_de}, Tác giả:
{self.tac_gia}, Trạng thái: {trang_thai}"

Người mượn sách


class NguoiMuon:
def __init__(self, ten):
self.ten = ten
self.danh_sach_sach_muon = []

def muon_sach(self, sach):


if not sach.da_muon:
self.danh_sach_sach_muon.append(sach)
sach.da_muon = True
return True
return False

def tra_sach(self, tieu_de):


for sach in self.danh_sach_sach_muon:
if sach.tieu_de == tieu_de:
self.danh_sach_sach_muon.remove(sach)
sach.da_muon = False
return True
return False

def __str__(self):
danh_sach = ", ".join(sach.tieu_de for sach in
self.danh_sach_sach_muon)
return f"Người mượn: {self.ten}, Sách đã mượn:
{danh_sach}"

Quản lý thư viện


class QuanLyThuVien:
def __init__(self):
self.danh_sach_sach = []
self.danh_sach_nguoi_muon = []

def them_sach(self, sach):


self.danh_sach_sach.append(sach)

def them_nguoi_muon(self, nguoi_muon):


self.danh_sach_nguoi_muon.append(nguoi_muon)

def muon_sach(self, ten_nguoi_muon, tieu_de_sach):


nguoi_muon = self.tim_nguoi_muon(ten_nguoi_muon)
sach = self.tim_sach(tieu_de_sach)
if nguoi_muon and sach:
return nguoi_muon.muon_sach(sach)
return False
def tra_sach(self, ten_nguoi_muon, tieu_de_sach):
nguoi_muon = self.tim_nguoi_muon(ten_nguoi_muon)
if nguoi_muon:
return nguoi_muon.tra_sach(tieu_de_sach)
return False

def hien_thi_danh_sach_sach(self):
for sach in self.danh_sach_sach:
print(sach)

def hien_thi_danh_sach_nguoi_muon(self):
for nguoi_muon in self.danh_sach_nguoi_muon:
print(nguoi_muon)

def tim_sach(self, tieu_de):


for sach in self.danh_sach_sach:
if sach.tieu_de == tieu_de:
return sach
return None

def tim_nguoi_muon(self, ten):


for nguoi_muon in self.danh_sach_nguoi_muon:
if nguoi_muon.ten == ten:
return nguoi_muon
return None

Menu chương trình


def menu():
qltv = QuanLyThuVien()
while True:
print("\n1. Thêm sách")
print("2. Thêm người mượn")
print("3. Mượn sách")
print("4. Trả sách")
print("5. Hiển thị danh sách sách")
print("6. Hiển thị danh sách người mượn")
print("7. Thoát")
lua_chon = input("Chọn một tùy chọn: ")
if lua_chon == '1':
tieu_de = input("Nhập tiêu đề sách: ")
tac_gia = input("Nhập tác giả sách: ")
sach = Sach(tieu_de, tac_gia)
qltv.them_sach(sach)
print("Đã thêm sách.")

elif lua_chon == '2':


ten = input("Nhập tên người mượn: ")
nguoi_muon = NguoiMuon(ten)
qltv.them_nguoi_muon(nguoi_muon)
print("Đã thêm người mượn.")

elif lua_chon == '3':


ten = input("Nhập tên người mượn: ")
tieu_de = input("Nhập tiêu đề sách cần mượn: ")
if qltv.muon_sach(ten, tieu_de):
print("Đã mượn sách.")
else:
print("Không thể mượn sách.")

elif lua_chon == '4':


ten = input("Nhập tên người mượn: ")
tieu_de = input("Nhập tiêu đề sách cần trả: ")
if qltv.tra_sach(ten, tieu_de):
print("Đã trả sách.")
else:
print("Không thể trả sách.")

elif lua_chon == '5':


qltv.hien_thi_danh_sach_sach()

elif lua_chon == '6':


qltv.hien_thi_danh_sach_nguoi_muon()

elif lua_chon == '7':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")

if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp Sach:

__init__: Hàm khởi tạo với các tham số tiêu đề, tác giả và
trạng thái mượn.
__str__: Phương thức để hiển thị thông tin sách.

2. Định nghĩa lớp NguoiMuon:

__init__: Hàm khởi tạo với tên và danh sách sách đã


mượn.
muon_sach: Thêm sách vào danh sách đã mượn và cập nhật
trạng thái mượn.
tra_sach: Xóa sách khỏi danh sách đã mượn và cập nhật
trạng thái mượn.
__str__: Phương thức để hiển thị thông tin người mượn và
sách đã mượn.

3. Định nghĩa lớp QuanLyThuVien:

__init__: Hàm khởi tạo để khởi tạo danh sách sách và


người mượn.
them_sach: Thêm sách vào danh sách.
them_nguoi_muon: Thêm người mượn vào danh sách.
muon_sach: Người mượn mượn sách từ thư viện.
tra_sach: Người mượn trả sách cho thư viện.
hien_thi_danh_sach_sach: Hiển thị danh sách sách.
hien_thi_danh_sach_nguoi_muon: Hiển thị danh sách người
mượn.
tim_sach:Tìm sách theo tiêu đề.
tim_nguoi_muon: Tìm người mượn theo tên.

4. Hàm menu:

Tạo đối tượng QuanLyThuVien.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm sách, thêm người mượn, mượn sách, trả sách và hiển
thị danh sách sách và người mượn dựa trên lựa chọn của
người dùng.

Tóm tắt
Lớp: Định nghĩa và sử dụng các lớp trong Python.

Phương thức: Tạo và sử dụng các phương thức trong lớp.

Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu.

Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người


dùng và print để hiển thị thông tin.

Chương trình quản lý thư viện sách bằng Python sử dụng hướng đối
tượng để tạo các lớp Sach, NguoiMuon và QuanLyThuVien, cung cấp
các chức năng thêm sách, thêm người mượn, mượn sách, trả sách
và hiển thị danh sách sách và người mượn qua giao diện người
dùng đơn giản.
163 - Viết chương trình để quản lý cửa
hàng bán lẻ

Giải thích đề bài


Đề bài yêu cầu viết một chương trình quản lý cửa hàng bán lẻ bằng
Python, sử dụng hướng đối tượng để tạo các đối tượng cơ bản như
hàng hóa, đơn hàng và quản lý cửa hàng. Chúng ta sẽ tạo các lớp
tương ứng để biểu diễn các thuộc tính và phương thức của từng đối
tượng, đồng thời cung cấp các chức năng cơ bản như thêm hàng
hóa, tạo đơn hàng, tính tổng tiền đơn hàng và hiển thị danh sách
hàng hóa và đơn hàng.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý cửa hàng.

Đầu ra
Thông tin về hàng hóa và đơn hàng được hiển thị theo các yêu
cầu từ người dùng.

Các bước thực hiện


1. Tạo lớp HangHoa với các thuộc tính như tên, giá và số lượng tồn
kho.
2. Tạo lớp DonHang với các thuộc tính như danh sách hàng hóa và
tổng tiền.
3. Tạo lớp QuanLyCuaHang để quản lý danh sách hàng hóa và đơn
hàng.
4. Các phương thức chính bao gồm:
Thêm hàng hóa mới vào cửa hàng.
Tạo đơn hàng mới.
Tính tổng tiền đơn hàng.
Hiển thị danh sách hàng hóa.
Hiển thị danh sách đơn hàng.
5. Cung cấp giao diện người dùng để nhập lệnh và quản lý cửa
hàng.

Code Python

Hàng hóa
class HangHoa:
def __init__(self, ten, gia, so_luong):
self.ten = ten
self.gia = gia
self.so_luong = so_luong

def __str__(self):
return f"Hàng hóa: {self.ten}, Giá: {self.gia}, Số
lượng tồn kho: {self.so_luong}"

Đơn hàng
class DonHang:
def __init__(self):
self.danh_sach_hang_hoa = []
self.tong_tien = 0

def them_hang_hoa(self, hang_hoa, so_luong):


if hang_hoa.so_luong >= so_luong:
self.danh_sach_hang_hoa.append((hang_hoa,
so_luong))
hang_hoa.so_luong -= so_luong
self.tong_tien += hang_hoa.gia * so_luong
return True
return False

def __str__(self):
danh_sach = ", ".join(f"{hang_hoa.ten} (x{so_luong})"
for hang_hoa, so_luong in self.danh_sach_hang_hoa)
return f"Đơn hàng: {danh_sach}, Tổng tiền:
{self.tong_tien}"

Quản lý cửa hàng


class QuanLyCuaHang:
def __init__(self):
self.danh_sach_hang_hoa = []
self.danh_sach_don_hang = []

def them_hang_hoa(self, hang_hoa):


self.danh_sach_hang_hoa.append(hang_hoa)

def tao_don_hang(self, danh_sach_mua_hang):


don_hang = DonHang()
for ten_hang_hoa, so_luong in
danh_sach_mua_hang.items():
hang_hoa = self.tim_hang_hoa(ten_hang_hoa)
if hang_hoa:
if not don_hang.them_hang_hoa(hang_hoa,
so_luong):
print(f"Không đủ số lượng hàng hóa:
{ten_hang_hoa}")
return None
self.danh_sach_don_hang.append(don_hang)
return don_hang

def hien_thi_danh_sach_hang_hoa(self):
for hang_hoa in self.danh_sach_hang_hoa:
print(hang_hoa)

def hien_thi_danh_sach_don_hang(self):
for don_hang in self.danh_sach_don_hang:
print(don_hang)

def tim_hang_hoa(self, ten):


for hang_hoa in self.danh_sach_hang_hoa:
if hang_hoa.ten == ten:
return hang_hoa
return None

Menu chương trình


def menu():
qlch = QuanLyCuaHang()
while True:
print("\n1. Thêm hàng hóa")
print("2. Tạo đơn hàng")
print("3. Hiển thị danh sách hàng hóa")
print("4. Hiển thị danh sách đơn hàng")
print("5. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
ten = input("Nhập tên hàng hóa: ")
gia = float(input("Nhập giá hàng hóa: "))
so_luong = int(input("Nhập số lượng tồn kho: "))
hang_hoa = HangHoa(ten, gia, so_luong)
qlch.them_hang_hoa(hang_hoa)
print("Đã thêm hàng hóa.")

elif lua_chon == '2':


danh_sach_mua_hang = {}
while True:
ten = input("Nhập tên hàng hóa cần mua (hoặc
'xong' để kết thúc): ")
if ten == 'xong':
break
so_luong = int(input("Nhập số lượng: "))
danh_sach_mua_hang[ten] = so_luong
don_hang = qlch.tao_don_hang(danh_sach_mua_hang)
if don_hang:
print("Đã tạo đơn hàng.")
else:
print("Không thể tạo đơn hàng.")

elif lua_chon == '3':


qlch.hien_thi_danh_sach_hang_hoa()

elif lua_chon == '4':


qlch.hien_thi_danh_sach_don_hang()

elif lua_chon == '5':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")

if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp HangHoa:

__init__: Hàm khởi tạo với các tham số tên, giá và số lượng
tồn kho.
__str__: Phương thức để hiển thị thông tin hàng hóa.

2. Định nghĩa lớp DonHang:

__init__: Hàm khởi tạo với danh sách hàng hóa và tổng
tiền.
them_hang_hoa: Thêm hàng hóa vào đơn hàng và cập nhật
số lượng và tổng tiền.
__str__: Phương thức để hiển thị thông tin đơn hàng.
3. Định nghĩa lớp QuanLyCuaHang:

__init__: Hàm khởi tạo để khởi tạo danh sách hàng hóa và
đơn hàng.
them_hang_hoa: Thêm hàng hóa vào danh sách.
tao_don_hang: Tạo đơn hàng mới dựa trên danh sách hàng
hóa cần mua.
hien_thi_danh_sach_hang_hoa: Hiển thị danh sách hàng hóa.
hien_thi_danh_sach_don_hang: Hiển thị danh sách đơn
hàng.
tim_hang_hoa: Tìm hàng hóa theo tên.

4. Hàm menu:

Tạo đối tượng QuanLyCuaHang.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm hàng hóa, tạo đơn hàng, hiển thị danh sách hàng hóa
và đơn hàng dựa trên lựa chọn của người dùng.

Tóm tắt
Lớp: Định nghĩa và sử dụng các lớp trong Python.
Phương thức: Tạo và sử dụng các phương thức trong lớp.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.

Chương trình quản lý cửa hàng bán lẻ bằng Python sử dụng hướng
đối tượng để tạo các lớp HangHoa, DonHang và QuanLyCuaHang, cung
cấp các chức năng thêm hàng hóa, tạo đơn hàng, hiển thị danh
sách hàng hóa và đơn hàng qua giao diện người dùng đơn giản.
164 - Viết chương trình để quản lý kho
hàng

Giải thích đề bài


Đề bài yêu cầu viết một chương trình quản lý kho hàng bằng
Python, sử dụng hướng đối tượng để tạo các đối tượng cơ bản như
hàng hóa, nhập hàng, xuất hàng và quản lý kho hàng. Chúng ta sẽ
tạo các lớp tương ứng để biểu diễn các thuộc tính và phương thức
của từng đối tượng, đồng thời cung cấp các chức năng cơ bản như
thêm hàng hóa, nhập hàng, xuất hàng và hiển thị danh sách hàng
hóa.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý kho hàng.

Đầu ra
Thông tin về hàng hóa được hiển thị theo các yêu cầu từ người
dùng.

Các bước thực hiện


1. Tạo lớp HangHoa với các thuộc tính như tên, giá và số lượng tồn
kho.
2. Tạo lớp QuanLyKho để quản lý danh sách hàng hóa và các hoạt
động nhập, xuất hàng.
3. Các phương thức chính bao gồm:
Thêm hàng hóa mới vào kho.
Nhập hàng (tăng số lượng tồn kho).
Xuất hàng (giảm số lượng tồn kho).
Hiển thị danh sách hàng hóa.
4. Cung cấp giao diện người dùng để nhập lệnh và quản lý kho
hàng.

Code Python

Hàng hóa
class HangHoa:
def __init__(self, ten, gia, so_luong):
self.ten = ten
self.gia = gia
self.so_luong = so_luong

def __str__(self):
return f"Hàng hóa: {self.ten}, Giá: {self.gia}, Số
lượng tồn kho: {self.so_luong}"

Quản lý kho
class QuanLyKho:
def __init__(self):
self.danh_sach_hang_hoa = []

def them_hang_hoa(self, hang_hoa):


self.danh_sach_hang_hoa.append(hang_hoa)

def nhap_hang(self, ten, so_luong):


hang_hoa = self.tim_hang_hoa(ten)
if hang_hoa:
hang_hoa.so_luong += so_luong
return True
return False
def xuat_hang(self, ten, so_luong):
hang_hoa = self.tim_hang_hoa(ten)
if hang_hoa and hang_hoa.so_luong >= so_luong:
hang_hoa.so_luong -= so_luong
return True
return False

def hien_thi_danh_sach_hang_hoa(self):
for hang_hoa in self.danh_sach_hang_hoa:
print(hang_hoa)

def tim_hang_hoa(self, ten):


for hang_hoa in self.danh_sach_hang_hoa:
if hang_hoa.ten == ten:
return hang_hoa
return None

Menu chương trình


def menu():
qlk = QuanLyKho()
while True:
print("\n1. Thêm hàng hóa")
print("2. Nhập hàng")
print("3. Xuất hàng")
print("4. Hiển thị danh sách hàng hóa")
print("5. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
ten = input("Nhập tên hàng hóa: ")
gia = float(input("Nhập giá hàng hóa: "))
so_luong = int(input("Nhập số lượng tồn kho: "))
hang_hoa = HangHoa(ten, gia, so_luong)
qlk.them_hang_hoa(hang_hoa)
print("Đã thêm hàng hóa.")

elif lua_chon == '2':


ten = input("Nhập tên hàng hóa cần nhập: ")
so_luong = int(input("Nhập số lượng cần nhập: "))
if qlk.nhap_hang(ten, so_luong):
print("Đã nhập hàng.")
else:
print("Không tìm thấy hàng hóa.")

elif lua_chon == '3':


ten = input("Nhập tên hàng hóa cần xuất: ")
so_luong = int(input("Nhập số lượng cần xuất: "))
if qlk.xuat_hang(ten, so_luong):
print("Đã xuất hàng.")
else:
print("Không thể xuất hàng (không đủ số lượng
hoặc không tìm thấy hàng hóa).")

elif lua_chon == '4':


qlk.hien_thi_danh_sach_hang_hoa()

elif lua_chon == '5':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")

if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp HangHoa:

__init__: Hàm khởi tạo với các tham số tên, giá và số lượng
tồn kho.
__str__: Phương thức để hiển thị thông tin hàng hóa.

2. Định nghĩa lớp QuanLyKho:


__init__:Hàm khởi tạo để khởi tạo danh sách hàng hóa.
them_hang_hoa: Thêm hàng hóa vào danh sách.
nhap_hang: Nhập hàng, tăng số lượng tồn kho của hàng hóa.
xuat_hang: Xuất hàng, giảm số lượng tồn kho của hàng hóa.
hien_thi_danh_sach_hang_hoa: Hiển thị danh sách hàng hóa.
tim_hang_hoa: Tìm hàng hóa theo tên.

3. Hàm menu:

Tạo đối tượng QuanLyKho.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm hàng hóa, nhập hàng, xuất hàng và hiển thị danh sách
hàng hóa dựa trên lựa chọn của người dùng.

Tóm tắt
Lớp: Định nghĩa và sử dụng các lớp trong Python.
Phương thức: Tạo và sử dụng các phương thức trong lớp.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.

Chương trình quản lý kho hàng bằng Python sử dụng hướng đối
tượng để tạo các lớp HangHoa và QuanLyKho, cung cấp các chức
năng thêm hàng hóa, nhập hàng, xuất hàng và hiển thị danh sách
hàng hóa qua giao diện người dùng đơn giản.
165 - Viết chương trình để quản lý
nhân viên

Giải thích đề bài


Đề bài yêu cầu viết một chương trình quản lý nhân viên bằng
Python, sử dụng hướng đối tượng để tạo các đối tượng cơ bản như
nhân viên, phòng ban và quản lý. Chúng ta sẽ tạo các lớp tương
ứng để biểu diễn các thuộc tính và phương thức của từng đối
tượng, đồng thời cung cấp các chức năng cơ bản như thêm nhân
viên, thêm phòng ban, gán nhân viên vào phòng ban, hiển thị danh
sách nhân viên và phòng ban.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý nhân viên và phòng ban.

Đầu ra
Thông tin về nhân viên và phòng ban được hiển thị theo các yêu
cầu từ người dùng.

Các bước thực hiện


1. Tạo lớp NhanVien với các thuộc tính như tên, tuổi, vị trí và phòng
ban.
2. Tạo lớp PhongBan với các thuộc tính như tên và danh sách nhân
viên.
3. Tạo lớp QuanLyNhanSu để quản lý danh sách nhân viên và phòng
ban.
4. Các phương thức chính bao gồm:
Thêm nhân viên mới vào hệ thống.
Thêm phòng ban mới vào hệ thống.
Gán nhân viên vào phòng ban.
Hiển thị danh sách nhân viên.
Hiển thị danh sách phòng ban.
5. Cung cấp giao diện người dùng để nhập lệnh và quản lý nhân
viên, phòng ban.

Code Python

Nhân viên
class NhanVien:
def __init__(self, ten, tuoi, vi_tri):
self.ten = ten
self.tuoi = tuoi
self.vi_tri = vi_tri
self.phong_ban = None

def __str__(self):
phong_ban = self.phong_ban.ten if self.phong_ban else
"Chưa có"
return f"Nhân viên: {self.ten}, Tuổi: {self.tuoi}, Vị
trí: {self.vi_tri}, Phòng ban: {phong_ban}"

Phòng ban
class PhongBan:
def __init__(self, ten):
self.ten = ten
self.danh_sach_nhan_vien = []

def them_nhan_vien(self, nhan_vien):


self.danh_sach_nhan_vien.append(nhan_vien)
nhan_vien.phong_ban = self

def __str__(self):
nhan_vien_str = ', '.join(nv.ten for nv in
self.danh_sach_nhan_vien)
return f"Phòng ban: {self.ten}, Nhân viên:
{nhan_vien_str}"

Quản lý nhân sự
class QuanLyNhanSu:
def __init__(self):
self.danh_sach_nhan_vien = []
self.danh_sach_phong_ban = []

def them_nhan_vien(self, nhan_vien):


self.danh_sach_nhan_vien.append(nhan_vien)

def them_phong_ban(self, phong_ban):


self.danh_sach_phong_ban.append(phong_ban)

def gan_nhan_vien_vao_phong_ban(self, ten_nhan_vien,


ten_phong_ban):
nhan_vien = self.tim_nhan_vien(ten_nhan_vien)
phong_ban = self.tim_phong_ban(ten_phong_ban)
if nhan_vien and phong_ban:
phong_ban.them_nhan_vien(nhan_vien)
return True
return False

def hien_thi_danh_sach_nhan_vien(self):
for nhan_vien in self.danh_sach_nhan_vien:
print(nhan_vien)

def hien_thi_danh_sach_phong_ban(self):
for phong_ban in self.danh_sach_phong_ban:
print(phong_ban)

def tim_nhan_vien(self, ten):


for nhan_vien in self.danh_sach_nhan_vien:
if nhan_vien.ten == ten:
return nhan_vien
return None

def tim_phong_ban(self, ten):


for phong_ban in self.danh_sach_phong_ban:
if phong_ban.ten == ten:
return phong_ban
return None

Menu chương trình


def menu():
qlns = QuanLyNhanSu()
while True:
print("\n1. Thêm nhân viên")
print("2. Thêm phòng ban")
print("3. Gán nhân viên vào phòng ban")
print("4. Hiển thị danh sách nhân viên")
print("5. Hiển thị danh sách phòng ban")
print("6. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
ten = input("Nhập tên nhân viên: ")
tuoi = int(input("Nhập tuổi nhân viên: "))
vi_tri = input("Nhập vị trí công việc của nhân
viên: ")
nhan_vien = NhanVien(ten, tuoi, vi_tri)
qlns.them_nhan_vien(nhan_vien)
print("Đã thêm nhân viên.")

elif lua_chon == '2':


ten = input("Nhập tên phòng ban: ")
phong_ban = PhongBan(ten)
qlns.them_phong_ban(phong_ban)
print("Đã thêm phòng ban.")

elif lua_chon == '3':


ten_nhan_vien = input("Nhập tên nhân viên: ")
ten_phong_ban = input("Nhập tên phòng ban: ")
if
qlns.gan_nhan_vien_vao_phong_ban(ten_nhan_vien,
ten_phong_ban):
print("Đã gán nhân viên vào phòng ban.")
else:
print("Không thể gán nhân viên vào phòng
ban.")

elif lua_chon == '4':


qlns.hien_thi_danh_sach_nhan_vien()

elif lua_chon == '5':


qlns.hien_thi_danh_sach_phong_ban()

elif lua_chon == '6':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")

if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp NhanVien:

__init__: Hàm khởi tạo với các tham số tên, tuổi, vị trí và
phòng ban (ban đầu là None).
__str__: Phương thức để hiển thị thông tin nhân viên, bao
gồm cả phòng ban (nếu có).

2. Định nghĩa lớp PhongBan:


__init__: Hàm khởi tạo với tên phòng ban và danh sách
nhân viên.
them_nhan_vien: Thêm nhân viên vào phòng ban và cập nhật
phòng ban cho nhân viên.
__str__: Phương thức để hiển thị thông tin phòng ban và
danh sách nhân viên trong phòng ban.

3. Định nghĩa lớp QuanLyNhanSu:

__init__: Hàm khởi tạo để khởi tạo danh sách nhân viên và
phòng ban.
them_nhan_vien: Thêm nhân viên vào danh sách.
them_phong_ban: Thêm phòng ban vào danh sách.
gan_nhan_vien_vao_phong_ban: Gán nhân viên vào phòng
ban, cập nhật thông tin cho nhân viên và phòng ban.
hien_thi_danh_sach_nhan_vien: Hiển thị danh sách nhân
viên.
hien_thi_danh_sach_phong_ban: Hiển thị danh sách phòng
ban.
tim_nhan_vien: Tìm nhân viên theo tên.
tim_phong_ban: Tìm phòng ban theo tên.

4. Hàm menu:

Tạo đối tượng QuanLyNhanSu.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm nhân viên, thêm phòng ban, gán nhân viên vào phòng
ban, hiển thị danh sách nhân viên và phòng ban dựa trên lựa
chọn của người dùng.

Tóm tắt
Lớp: Định nghĩa và sử dụng các lớp trong Python.
Phương thức: Tạo và sử dụng các phương thức trong lớp.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.

Chương trình quản lý nhân viên bằng Python sử dụng hướng đối
tượng để tạo các lớp NhanVien, PhongBan và QuanLyNhanSu, cung cấp
các chức năng thêm nhân viên, thêm phòng ban, gán nhân viên vào
phòng ban, hiển thị danh sách nhân viên và phòng ban qua giao
diện người dùng đơn giản.
166 - Viết chương trình để quản lý lịch
học

Giải thích đề bài


Đề bài yêu cầu viết một chương trình quản lý lịch học bằng Python,
sử dụng hướng đối tượng để tạo các đối tượng cơ bản như môn
học, lớp học và lịch học. Chúng ta sẽ tạo các lớp tương ứng để biểu
diễn các thuộc tính và phương thức của từng đối tượng, đồng thời
cung cấp các chức năng cơ bản như thêm môn học, tạo lớp học,
sắp xếp lịch học và hiển thị lịch học.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý lịch học.

Đầu ra
Thông tin về lịch học được hiển thị theo các yêu cầu từ người
dùng.

Các bước thực hiện


1. Tạo lớp MonHoc với các thuộc tính như tên môn học và mã môn
học.
2. Tạo lớp LopHoc với các thuộc tính như môn học, thời gian học và
phòng học.
3. Tạo lớp QuanLyLichHoc để quản lý danh sách môn học và lớp
học.
4. Các phương thức chính bao gồm:
Thêm môn học mới.
Tạo lớp học mới.
Sắp xếp lịch học.
Hiển thị lịch học.
5. Cung cấp giao diện người dùng để nhập lệnh và quản lý lịch
học.

Code Python

Môn học
class MonHoc:
def __init__(self, ten, ma_mon_hoc):
self.ten = ten
self.ma_mon_hoc = ma_mon_hoc

def __str__(self):
return f"Môn học: {self.ten}, Mã môn học:
{self.ma_mon_hoc}"

Lớp học
class LopHoc:
def __init__(self, mon_hoc, thoi_gian, phong_hoc):
self.mon_hoc = mon_hoc
self.thoi_gian = thoi_gian
self.phong_hoc = phong_hoc

def __str__(self):
return f"Lớp học: {self.mon_hoc.ten}, Thời gian:
{self.thoi_gian}, Phòng học: {self.phong_hoc}"
Quản lý học sinh
class QuanLyLichHoc:
def __init__(self):
self.danh_sach_mon_hoc = []
self.danh_sach_lop_hoc = []

def them_mon_hoc(self, mon_hoc):


self.danh_sach_mon_hoc.append(mon_hoc)

def tao_lop_hoc(self, ma_mon_hoc, thoi_gian, phong_hoc):


mon_hoc = self.tim_mon_hoc(ma_mon_hoc)
if mon_hoc:
lop_hoc = LopHoc(mon_hoc, thoi_gian, phong_hoc)
self.danh_sach_lop_hoc.append(lop_hoc)
return True
return False

def hien_thi_lich_hoc(self):
for lop_hoc in self.danh_sach_lop_hoc:
print(lop_hoc)

def tim_mon_hoc(self, ma_mon_hoc):


for mon_hoc in self.danh_sach_mon_hoc:
if mon_hoc.ma_mon_hoc == ma_mon_hoc:
return mon_hoc
return None

Menu chương trình


def menu():
qllh = QuanLyLichHoc()
while True:
print("\n1. Thêm môn học")
print("2. Tạo lớp học")
print("3. Hiển thị lịch học")
print("4. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
ten = input("Nhập tên môn học: ")
ma_mon_hoc = input("Nhập mã môn học: ")
mon_hoc = MonHoc(ten, ma_mon_hoc)
qllh.them_mon_hoc(mon_hoc)
print("Đã thêm môn học.")

elif lua_chon == '2':


ma_mon_hoc = input("Nhập mã môn học: ")
thoi_gian = input("Nhập thời gian học: ")
phong_hoc = input("Nhập phòng học: ")
if qllh.tao_lop_hoc(ma_mon_hoc, thoi_gian,
phong_hoc):
print("Đã tạo lớp học.")
else:
print("Không tìm thấy môn học.")

elif lua_chon == '3':


qllh.hien_thi_lich_hoc()

elif lua_chon == '4':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")

if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp MonHoc:

__init__: Hàm khởi tạo với các tham số tên môn học và mã
môn học.
__str__: Phương thức để hiển thị thông tin môn học.
2. Định nghĩa lớp LopHoc:

__init__: Hàm khởi tạo với các tham số môn học, thời gian
và phòng học.
__str__: Phương thức để hiển thị thông tin lớp học.

3. Định nghĩa lớp QuanLyLichHoc:

__init__: Hàm khởi tạo để khởi tạo danh sách môn học và
lớp học.
them_mon_hoc: Thêm môn học vào danh sách.
tao_lop_hoc: Tạo lớp học mới và thêm vào danh sách lớp
học.
hien_thi_lich_hoc: Hiển thị danh sách lớp học.
tim_mon_hoc: Tìm môn học theo mã môn học.

4. Hàm menu:

Tạo đối tượng QuanLyLichHoc.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm môn học, tạo lớp học và hiển thị lịch học dựa trên lựa
chọn của người dùng.

Tóm tắt
Lớp: Định nghĩa và sử dụng các lớp trong Python.
Phương thức: Tạo và sử dụng các phương thức trong lớp.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.

Chương trình quản lý lịch học bằng Python sử dụng hướng đối
tượng để tạo các lớp MonHoc, LopHoc và QuanLyLichHoc, cung cấp
các chức năng thêm môn học, tạo lớp học, sắp xếp lịch học và hiển
thị lịch học qua giao diện người dùng đơn giản.
167 - Viết chương trình để quản lý
điểm thi

Giải thích đề bài


Đề bài yêu cầu viết một chương trình quản lý điểm thi của sinh viên
theo từng kỳ thi bằng Python, sử dụng hướng đối tượng để tạo các
đối tượng cơ bản như sinh viên, môn học, kỳ thi, và quản lý điểm thi.
Chúng ta sẽ tạo các lớp tương ứng để biểu diễn các thuộc tính và
phương thức của từng đối tượng, đồng thời cung cấp các chức
năng cơ bản như thêm sinh viên, thêm môn học, thêm kỳ thi, ghi
điểm, và hiển thị điểm thi của sinh viên theo từng kỳ thi.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý điểm thi.

Đầu ra
Thông tin về điểm thi của sinh viên theo từng kỳ thi được hiển thị
theo các yêu cầu từ người dùng.

Các bước thực hiện


1. Tạo lớp SinhVien với các thuộc tính như tên, mã sinh viên.
2. Tạo lớp MonHoc với các thuộc tính như tên môn học và mã môn
học.
3. Tạo lớp KyThi với các thuộc tính như tên kỳ thi và mã kỳ thi.
4. Tạo lớp DiemThi để lưu thông tin điểm thi của từng sinh viên cho
từng môn học trong từng kỳ thi.
5. Tạo lớp QuanLyDiemThi để quản lý danh sách sinh viên, môn
học, kỳ thi, và điểm thi.
6. Các phương thức chính bao gồm:
Thêm sinh viên mới.
Thêm môn học mới.
Thêm kỳ thi mới.
Ghi điểm thi.
Hiển thị điểm thi của từng sinh viên theo từng kỳ thi.
7. Cung cấp giao diện người dùng để nhập lệnh và quản lý điểm
thi.

Code Python

Sinh Viên
class SinhVien:
def __init__(self, ten, ma_sv):
self.ten = ten
self.ma_sv = ma_sv

def __str__(self):
return f"Sinh viên: {self.ten}, Mã sinh viên:
{self.ma_sv}"

Môn học
class MonHoc:
def __init__(self, ten, ma_mh):
self.ten = ten
self.ma_mh = ma_mh

def __str__(self):
return f"Môn học: {self.ten}, Mã môn học:
{self.ma_mh}"
Kỳ Thi
class KyThi:
def __init__(self, ten, ma_ky_thi):
self.ten = ten
self.ma_ky_thi = ma_ky_thi

def __str__(self):
return f"Kỳ thi: {self.ten}, Mã kỳ thi:
{self.ma_ky_thi}"

class DiemThi:
def __init__(self, sinh_vien, mon_hoc, ky_thi, diem):
self.sinh_vien = sinh_vien
self.mon_hoc = mon_hoc
self.ky_thi = ky_thi
self.diem = diem

def __str__(self):
return f"Sinh viên: {self.sinh_vien.ten}, Môn học:
{self.mon_hoc.ten}, Kỳ thi: {self.ky_thi.ten}, Điểm:
{self.diem}"

Quản lý điểm thi


class QuanLyDiemThi:
def __init__(self):
self.danh_sach_sinh_vien = []
self.danh_sach_mon_hoc = []
self.danh_sach_ky_thi = []
self.danh_sach_diem_thi = []

def them_sinh_vien(self, sinh_vien):


self.danh_sach_sinh_vien.append(sinh_vien)

def them_mon_hoc(self, mon_hoc):


self.danh_sach_mon_hoc.append(mon_hoc)

def them_ky_thi(self, ky_thi):


self.danh_sach_ky_thi.append(ky_thi)

def ghi_diem(self, ma_sv, ma_mh, ma_ky_thi, diem):


sinh_vien = self.tim_sinh_vien(ma_sv)
mon_hoc = self.tim_mon_hoc(ma_mh)
ky_thi = self.tim_ky_thi(ma_ky_thi)
if sinh_vien and mon_hoc and ky_thi:
diem_thi = DiemThi(sinh_vien, mon_hoc, ky_thi,
diem)
self.danh_sach_diem_thi.append(diem_thi)
return True
return False

def hien_thi_diem_thi(self, ma_sv):


sinh_vien = self.tim_sinh_vien(ma_sv)
if sinh_vien:
for diem_thi in self.danh_sach_diem_thi:
if diem_thi.sinh_vien == sinh_vien:
print(diem_thi)
else:
print("Không tìm thấy sinh viên.")

def tim_sinh_vien(self, ma_sv):


for sinh_vien in self.danh_sach_sinh_vien:
if sinh_vien.ma_sv == ma_sv:
return sinh_vien
return None

def tim_mon_hoc(self, ma_mh):


for mon_hoc in self.danh_sach_mon_hoc:
if mon_hoc.ma_mh == ma_mh:
return mon_hoc
return None

def tim_ky_thi(self, ma_ky_thi):


for ky_thi in self.danh_sach_ky_thi:
if ky_thi.ma_ky_thi == ma_ky_thi:
return ky_thi
return None
Menu chương trình
def menu():
qldt = QuanLyDiemThi()
while True:
print("\n1. Thêm sinh viên")
print("2. Thêm môn học")
print("3. Thêm kỳ thi")
print("4. Ghi điểm thi")
print("5. Hiển thị điểm thi của sinh viên")
print("6. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
ten = input("Nhập tên sinh viên: ")
ma_sv = input("Nhập mã sinh viên: ")
sinh_vien = SinhVien(ten, ma_sv)
qldt.them_sinh_vien(sinh_vien)
print("Đã thêm sinh viên.")

elif lua_chon == '2':


ten = input("Nhập tên môn học: ")
ma_mh = input("Nhập mã môn học: ")
mon_hoc = MonHoc(ten, ma_mh)
qldt.them_mon_hoc(mon_hoc)
print("Đã thêm môn học.")

elif lua_chon == '3':


ten = input("Nhập tên kỳ thi: ")
ma_ky_thi = input("Nhập mã kỳ thi: ")
ky_thi = KyThi(ten, ma_ky_thi)
qldt.them_ky_thi(ky_thi)
print("Đã thêm kỳ thi.")

elif lua_chon == '4':


ma_sv = input("Nhập mã sinh viên: ")
ma_mh = input("Nhập mã môn học: ")
ma_ky_thi = input("Nhập mã kỳ thi: ")
diem = float(input("Nhập điểm thi: "))
if qldt.ghi_diem(ma_sv, ma_mh, ma_ky_thi, diem):
print("Đã ghi điểm.")
else:
print("Không thể ghi điểm (không tìm thấy
sinh viên, môn học hoặc kỳ thi).")

elif lua_chon == '5':


ma_sv = input("Nhập mã sinh viên: ")
qldt.hien_thi_diem_thi(ma_sv)

elif lua_chon == '6':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")

if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp SinhVien:

__init__: Hàm khởi tạo với các tham số tên và mã sinh viên.
__str__: Phương thức để hiển thị thông tin sinh viên.

2. Định nghĩa lớp MonHoc:

__init__: Hàm khởi tạo với các tham số tên môn học và mã
môn học.
__str__: Phương thức để hiển thị thông tin môn học.

3. Định nghĩa lớp KyThi:

__init__: Hàm khởi tạo với các tham số tên kỳ thi và mã kỳ


thi.
__str__: Phương thức để hiển thị thông tin kỳ thi.
4. Định nghĩa lớp DiemThi:

__init__: Hàm khởi tạo với các tham số sinh viên, môn học,
kỳ thi và điểm.
__str__: Phương thức để hiển thị thông tin điểm thi.

5. Định nghĩa lớp QuanLyDiemThi:

__init__:Hàm khởi tạo để khởi tạo danh sách sinh viên,


môn học, kỳ thi và điểm thi.
them_sinh_vien: Thêm sinh viên vào danh sách.
them_mon_hoc: Thêm môn học vào danh sách.

them_ky_thi: Thêm kỳ thi vào danh sách.


ghi_diem: Ghi điểm thi cho sinh viên.
hien_thi_diem_thi: Hiển thị điểm thi của sinh viên.
tim_sinh_vien: Tìm sinh viên theo mã sinh viên.
tim_mon_hoc: Tìm môn học theo mã môn học.
tim_ky_thi: Tìm kỳ thi theo mã kỳ thi.

6. Hàm menu:
Tạo đối tượng QuanLyDiemThi.
Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm sinh viên, thêm môn học, thêm kỳ thi, ghi điểm và hiển
thị điểm thi dựa trên lựa chọn của người dùng.

Tóm tắt
Lớp: Định nghĩa và sử dụng các lớp trong Python.
Phương thức: Tạo và sử dụng các phương thức trong lớp.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.
Chương trình quản lý điểm thi bằng Python sử dụng hướng đối
tượng để tạo các lớp SinhVien, MonHoc, KyThi, DiemThi và
QuanLyDiemThi, cung cấp các chức năng thêm sinh viên, thêm môn
học, thêm kỳ thi, ghi điểm và hiển thị điểm thi qua giao diện người
dùng đơn giản.
168 - Viết chương trình để quản lý
thông tin cá nhân

Giải thích đề bài


Đề bài yêu cầu viết một chương trình quản lý thông tin cá nhân bằng
Python, sử dụng hướng đối tượng để tạo các đối tượng cơ bản như
thông tin cá nhân và quản lý thông tin cá nhân. Chúng ta sẽ tạo các
lớp tương ứng để biểu diễn các thuộc tính và phương thức của từng
đối tượng, đồng thời cung cấp các chức năng cơ bản như thêm
thông tin cá nhân, cập nhật thông tin cá nhân, và hiển thị thông tin
cá nhân.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý thông tin cá nhân.

Đầu ra
Thông tin về cá nhân được hiển thị theo các yêu cầu từ người
dùng.

Các bước thực hiện


1. Tạo lớp ThongTinCaNhan với các thuộc tính như tên, tuổi, địa chỉ,
số điện thoại, và email.
2. Tạo lớp QuanLyThongTinCaNhan để quản lý danh sách thông tin
cá nhân.
3. Các phương thức chính bao gồm:
Thêm thông tin cá nhân mới.
Cập nhật thông tin cá nhân.
Hiển thị thông tin cá nhân.
4. Cung cấp giao diện người dùng để nhập lệnh và quản lý thông
tin cá nhân.

Code Python

Thông tin cá nhân


class ThongTinCaNhan:
def __init__(self, ten, tuoi, dia_chi, so_dien_thoai,
email):
self.ten = ten
self.tuoi = tuoi
self.dia_chi = dia_chi
self.so_dien_thoai = so_dien_thoai
self.email = email

def cap_nhat(self, ten=None, tuoi=None, dia_chi=None,


so_dien_thoai=None, email=None):
if ten is not None:
self.ten = ten
if tuoi is not None:
self.tuoi = tuoi
if dia_chi is not None:
self.dia_chi = dia_chi
if so_dien_thoai is not None:
self.so_dien_thoai = so_dien_thoai
if email is not None:
self.email = email

def __str__(self):
return (f"Tên: {self.ten}, Tuổi: {self.tuoi}, Địa
chỉ: {self.dia_chi}, "
f"Số điện thoại: {self.so_dien_thoai}, Email:
{self.email}")
Quản lý thông tin cá nhân
class QuanLyThongTinCaNhan:
def __init__(self):
self.danh_sach_thong_tin = []

def them_thong_tin(self, thong_tin):


self.danh_sach_thong_tin.append(thong_tin)

def cap_nhat_thong_tin(self, ten, ten_moi=None,


tuoi=None, dia_chi=None, so_dien_thoai=None, email=None):
for thong_tin in self.danh_sach_thong_tin:
if thong_tin.ten == ten:
thong_tin.cap_nhat(ten=ten_moi, tuoi=tuoi,
dia_chi=dia_chi, so_dien_thoai=so_dien_thoai, email=email)
return True
return False

def hien_thi_thong_tin(self, ten):


for thong_tin in self.danh_sach_thong_tin:
if thong_tin.ten == ten:
print(thong_tin)
return
print("Không tìm thấy thông tin cá nhân.")

Menu chương trình


def menu():
qlttcn = QuanLyThongTinCaNhan()
while True:
print("\n1. Thêm thông tin cá nhân")
print("2. Cập nhật thông tin cá nhân")
print("3. Hiển thị thông tin cá nhân")
print("4. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
ten = input("Nhập tên: ")
tuoi = int(input("Nhập tuổi: "))
dia_chi = input("Nhập địa chỉ: ")
so_dien_thoai = input("Nhập số điện thoại: ")
email = input("Nhập email: ")
thong_tin = ThongTinCaNhan(ten, tuoi, dia_chi,
so_dien_thoai, email)
qlttcn.them_thong_tin(thong_tin)
print("Đã thêm thông tin cá nhân.")

elif lua_chon == '2':


ten = input("Nhập tên của thông tin cá nhân cần
cập nhật: ")
ten_moi = input("Nhập tên mới (hoặc nhấn Enter để
giữ nguyên): ")
tuoi = input("Nhập tuổi mới (hoặc nhấn Enter để
giữ nguyên): ")
dia_chi = input("Nhập địa chỉ mới (hoặc nhấn
Enter để giữ nguyên): ")
so_dien_thoai = input("Nhập số điện thoại mới
(hoặc nhấn Enter để giữ nguyên): ")
email = input("Nhập email mới (hoặc nhấn Enter để
giữ nguyên): ")
tuoi = int(tuoi) if tuoi else None
cap_nhat_thanh_cong =
qlttcn.cap_nhat_thong_tin(ten, ten_moi=ten_moi, tuoi=tuoi,
dia_chi=dia_chi, so_dien_thoai=so_dien_thoai, email=email)
if cap_nhat_thanh_cong:
print("Đã cập nhật thông tin cá nhân.")
else:
print("Không tìm thấy thông tin cá nhân.")

elif lua_chon == '3':


ten = input("Nhập tên của thông tin cá nhân cần
hiển thị: ")
qlttcn.hien_thi_thong_tin(ten)

elif lua_chon == '4':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")
if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp ThongTinCaNhan:

__init__: Hàm khởi tạo với các tham số tên, tuổi, địa chỉ, số
điện thoại và email.
cap_nhat: Phương thức để cập nhật thông tin cá nhân.
__str__: Phương thức để hiển thị thông tin cá nhân.

2. Định nghĩa lớp QuanLyThongTinCaNhan:

__init__: Hàm khởi tạo để khởi tạo danh sách thông tin cá
nhân.
them_thong_tin:Thêm thông tin cá nhân vào danh sách.
cap_nhat_thong_tin: Cập nhật thông tin cá nhân.
hien_thi_thong_tin: Hiển thị thông tin cá nhân.

3. Hàm menu:

Tạo đối tượng QuanLyThongTinCaNhan.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm thông tin cá nhân, cập nhật thông tin cá nhân và hiển
thị thông tin cá nhân dựa trên lựa chọn của người dùng.

Tóm tắt
Lớp: Định nghĩa và sử dụng các lớp trong Python.
Phương thức: Tạo và sử dụng các phương thức trong lớp.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.

Chương trình quản lý thông tin cá nhân bằng Python sử dụng


hướng đối tượng để tạo các lớp ThongTinCaNhan và
QuanLyThongTinCaNhan, cung cấp các chức năng thêm thông tin cá
nhân, cập nhật thông tin cá nhân và hiển thị thông tin cá nhân qua
giao diện người dùng đơn giản.
169 - Viết chương trình để quản lý thu
chi cá nhân

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để quản lý thu chi cá nhân
theo từng tháng bằng Python. Chúng ta sẽ sử dụng hướng đối
tượng để tạo các đối tượng cơ bản như giao dịch (thu/chi) và quản
lý thu chi.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý thu chi.

Đầu ra
Thông tin về thu chi của mỗi tháng được hiển thị theo yêu cầu từ
người dùng.

Các bước thực hiện


1. Tạo lớp GiaoDich với các thuộc tính như số tiền, loại giao dịch
(thu/chi), và mô tả.
2. Tạo lớp Thang để biểu diễn thông tin thu chi của mỗi tháng.
3. Tạo lớp QuanLyThuChi để quản lý danh sách các tháng và các
giao dịch.
4. Các phương thức chính bao gồm:
Thêm giao dịch mới cho mỗi tháng.
Hiển thị thông tin thu chi của mỗi tháng.
5. Cung cấp giao diện người dùng để nhập lệnh và quản lý thu chi.

Code Python

Giao dịch
class GiaoDich:
def __init__(self, so_tien, loai, mo_ta):
self.so_tien = so_tien
self.loai = loai
self.mo_ta = mo_ta

def __str__(self):
return f"Số tiền: {self.so_tien}, Loại: {self.loai},
Mô tả: {self.mo_ta}"

Tháng
class Thang:
def __init__(self, thang):
self.thang = thang
self.danh_sach_giao_dich = []

def them_giao_dich(self, giao_dich):


self.danh_sach_giao_dich.append(giao_dich)

def hien_thi_thu_chi(self):
print(f"----- Tháng {self.thang} -----")
for giao_dich in self.danh_sach_giao_dich:
print(giao_dich)

Quản lý thu chi


class QuanLyThuChi:
def __init__(self):
self.danh_sach_thang = {}
def them_thang(self, thang):
self.danh_sach_thang[thang] = Thang(thang)

def them_giao_dich(self, thang, giao_dich):


if thang in self.danh_sach_thang:

self.danh_sach_thang[thang].them_giao_dich(giao_dich)
return True
return False

def hien_thi_thu_chi_theo_thang(self, thang):


if thang in self.danh_sach_thang:
self.danh_sach_thang[thang].hien_thi_thu_chi()
else:
print("Không có dữ liệu cho tháng này.")

Menu chương trình


def menu():
qltc = QuanLyThuChi()
while True:
print("\n1. Thêm thông tin thu chi cho một tháng")
print("2. Hiển thị thông tin thu chi của một tháng")
print("3. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
thang = input("Nhập tháng (vd: 01, 02, ..., 12):
")
if thang not in qltc.danh_sach_thang:
qltc.them_thang(thang)
loai_gd = input("Nhập loại giao dịch (thu/chi):
")
so_tien = float(input("Nhập số tiền: "))
mo_ta = input("Nhập mô tả: ")
giao_dich = GiaoDich(so_tien, loai_gd, mo_ta)
if qltc.them_giao_dich(thang, giao_dich):
print("Đã thêm thông tin thu chi.")
else:
print("Lỗi: Tháng không tồn tại.")

elif lua_chon == '2':


thang = input("Nhập tháng để hiển thị thông tin
thu chi: ")
qltc.hien_thi_thu_chi_theo_thang(thang)

elif lua_chon == '3':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")

if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp GiaoDich:

__init__: Hàm khởi tạo với các thuộc tính số tiền, loại giao
dịch (thu/chi) và mô tả.
__str__: Phương thức để hiển thị thông tin giao dịch.

2. Định nghĩa lớp Thang:

__init__: Hàm khởi tạo với tham số là tháng và danh sách


giao dịch của tháng đó.
them_giao_dich: Thêm giao dịch vào danh sách của tháng.
hien_thi_thu_chi: Hiển thị thông tin thu chi của tháng.

3. Định nghĩa lớp QuanLyThuChi:

__init__: Hàm khởi tạo để khởi tạo danh sách các tháng và
gán mỗi tháng một đối tượng Thang.
them_thang:Thêm một tháng mới vào danh sách.
them_giao_dich: Thêm một giao dịch vào danh sách thu chi
của tháng.
hien_thi_thu_chi_theo_thang: Hiển thị thông tin thu chi của
một tháng.

4. Hàm menu:

Tạo đối tượng QuanLyThuChi.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm thông tin thu chi cho một tháng và hiển thị thông tin thu
chi của một tháng dựa trên lựa chọn của người dùng.

Tóm tắt
Lớp: Sử dụng lớp để tổ chức và quản lý dữ liệu.
Phương thức: Sử dụng phương thức để thực hiện các hoạt
động trên dữ liệu.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu và xử lý lựa chọn người dùng.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.

Chương trình quản lý thu chi cá nhân theo từng tháng bằng Python
sử dụng hướng đối tượng để tạo các lớp GiaoDich, Thang và
QuanLyThuChi, cung cấp các chức năng thêm thông tin thu chi và
hiển thị thông tin thu chi theo từng tháng qua giao diện người dùng.
170 - Viết chương trình để quản lý
công việc hàng ngày

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để quản lý công việc hàng
ngày bằng Python. Chương trình này sẽ cho phép người dùng thêm,
chỉnh sửa, xóa và hiển thị các công việc trong một ngày cụ thể.

Thuật toán

Đầu vào
Không có đầu vào cụ thể, chương trình sẽ nhận các lệnh từ
người dùng để quản lý công việc hàng ngày.

Đầu ra
Thông tin về công việc được hiển thị theo yêu cầu từ người
dùng.

Các bước thực hiện


1. Tạo lớp CongViec với các thuộc tính như tên công việc, mô tả và
trạng thái (hoàn thành/chưa hoàn thành).
2. Tạo lớp QuanLyCongViec để quản lý danh sách các công việc.
3. Các phương thức chính bao gồm:
Thêm công việc mới.
Chỉnh sửa công việc.
Xóa công việc.
Hiển thị danh sách công việc.
4. Cung cấp giao diện người dùng để nhập lệnh và quản lý công
việc hàng ngày.

Code Python

Công việc
class CongViec:
def __init__(self, ten, mo_ta, hoan_thanh=False):
self.ten = ten
self.mo_ta = mo_ta
self.hoan_thanh = hoan_thanh

def cap_nhat(self, ten=None, mo_ta=None,


hoan_thanh=None):
if ten is not None:
self.ten = ten
if mo_ta is not None:
self.mo_ta = mo_ta
if hoan_thanh is not None:
self.hoan_thanh = hoan_thanh

def __str__(self):
trang_thai = "Hoàn thành" if self.hoan_thanh else
"Chưa hoàn thành"
return f"Tên công việc: {self.ten}, Mô tả:
{self.mo_ta}, Trạng thái: {trang_thai}"

Quản lý công việc


class QuanLyCongViec:
def __init__(self):
self.danh_sach_cong_viec = []

def them_cong_viec(self, cong_viec):


self.danh_sach_cong_viec.append(cong_viec)

def cap_nhat_cong_viec(self, ten, ten_moi=None,


mo_ta=None, hoan_thanh=None):
for cv in self.danh_sach_cong_viec:
if cv.ten == ten:
cv.cap_nhat(ten=ten_moi, mo_ta=mo_ta,
hoan_thanh=hoan_thanh)
return True
return False

def xoa_cong_viec(self, ten):


for cv in self.danh_sach_cong_viec:
if cv.ten == ten:
self.danh_sach_cong_viec.remove(cv)
return True
return False

def hien_thi_danh_sach_cong_viec(self):
if not self.danh_sach_cong_viec:
print("Không có công việc nào.")
else:
for cv in self.danh_sach_cong_viec:
print(cv)

Menu chươmg trình


def menu():
qlcv = QuanLyCongViec()
while True:
print("\n1. Thêm công việc mới")
print("2. Chỉnh sửa công việc")
print("3. Xóa công việc")
print("4. Hiển thị danh sách công việc")
print("5. Thoát")
lua_chon = input("Chọn một tùy chọn: ")

if lua_chon == '1':
ten = input("Nhập tên công việc: ")
mo_ta = input("Nhập mô tả công việc: ")
cong_viec = CongViec(ten, mo_ta)
qlcv.them_cong_viec(cong_viec)
print("Đã thêm công việc mới.")
elif lua_chon == '2':
ten = input("Nhập tên công việc cần chỉnh sửa: ")
ten_moi = input("Nhập tên mới (hoặc nhấn Enter để
giữ nguyên): ")
mo_ta_moi = input("Nhập mô tả mới (hoặc nhấn
Enter để giữ nguyên): ")
hoan_thanh = input("Công việc đã hoàn thành?
(yes/no): ")
hoan_thanh = True if hoan_thanh.lower() == "yes"
else False
cap_nhat_thanh_cong =
qlcv.cap_nhat_cong_viec(ten, ten_moi=ten_moi,
mo_ta=mo_ta_moi, hoan_thanh=hoan_thanh)
if cap_nhat_thanh_cong:
print("Đã cập nhật công việc.")
else:
print("Không tìm thấy công việc.")

elif lua_chon == '3':


ten = input("Nhập tên công việc cần xóa: ")
xoa_thanh_cong = qlcv.xoa_cong_viec(ten)
if xoa_thanh_cong:
print("Đã xóa công việc.")
else:
print("Không tìm thấy công việc.")

elif lua_chon == '4':


print("Danh sách công việc:")
qlcv.hien_thi_danh_sach_cong_viec()

elif lua_chon == '5':


print("Thoát chương trình.")
break

else:
print("Lựa chọn không hợp lệ. Vui lòng chọn
lại.")
if __name__ == "__main__":
menu()

Giải thích code


1. Định nghĩa lớp CongViec:

__init__: Hàm khởi tạo với các thuộc tính như tên công
việc, mô tả và trạng thái hoàn thành.
cap_nhat: Phương thức để cập nhật thông tin công việc.
__str__: Phương thức để hiển thị thông tin công việc.

2. Định nghĩa lớp QuanLyCongViec:

__init__:Hàm khởi tạo để khởi tạo danh sách công việc.


them_cong_viec: Thêm công việc vào danh sách.
cap_nhat_cong_viec: Cập nhật thông tin công việc.
xoa_cong_viec: Xóa công việc khỏi danh sách.
hien_thi_danh_sach_cong_viec: Hiển thị danh sách công
việc.

3. Hàm menu:

Tạo đối tượng QuanLyCongViec.


Vòng lặp để hiển thị menu và nhận lựa chọn từ người dùng.
Thêm công việc mới, chỉnh sửa công việc, xóa công việc và
hiển thị danh sách công việc dựa trên lựa chọn của người
dùng.

Tóm tắt
Lớp: Sử dụng lớp để tổ chức và quản lý dữ liệu.
Phương thức: Sử dụng phương thức để thực hiện các hoạt
động trên dữ liệu.
Vòng lặp và điều kiện: Sử dụng vòng lặp và câu lệnh điều kiện
để tạo menu và xử lý lựa chọn người dùng.
Nhập và xuất dữ liệu: Sử dụng input để nhận dữ liệu từ người
dùng và print để hiển thị thông tin.

Chương trình quản lý công việc hàng ngày bằng Python sử dụng
hướng đối tượng để tạo các lớp CongViec và QuanLyCongViec, cung
cấp các chức năng thêm công việc mới, chỉnh sửa công việc, xóa
công việc và hiển thị danh sách công việc thông qua giao diện người
dùng.
Chương 18 : Decorator
171. Viết chương trình để tạo một decorator đơn giản.
172. Viết chương trình để tạo một decorator chấp nhận đối số.
173. Viết chương trình để tạo một decorator với nhiều hàm trả về.
174. Viết chương trình để tạo một decorator gọi một hàm nhiều lần.
175. Viết chương trình để tạo một decorator sửa đổi giá trị trả về của
một hàm.
176. Viết chương trình để tạo một decorator kiểm tra thời gian thực
thi của một hàm.
177. Viết chương trình để tạo một decorator giới hạn số lần gọi một
hàm.
178. Viết chương trình để tạo một decorator chuyển đổi giá trị trả về
thành một kiểu dữ liệu khác.
179. Viết chương trình để tạo một decorator nhận một đối số từ bên
ngoài.
180. Viết chương trình để tạo một decorator sử dụng hàm generator.
171 - Viết chương trình Python để tạo
một decorator đơn giản

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một decorator
đơn giản. Decorator là một hàm dùng để bổ sung thêm chức năng
cho một hàm khác mà không thay đổi mã nguồn của hàm đó.
Decorator thường được sử dụng để xử lý logic trước và sau khi một
hàm được thực thi.

Decorator
Decorator trong Python là một cách mạnh mẽ để thay đổi hoặc mở
rộng hành vi của một hàm hoặc phương thức mà không cần thay đổi
mã nguồn của nó. Decorator thực chất là một hàm cao cấp, nghĩa là
nó là một hàm nhận vào một hàm khác làm đối số và trả về một hàm
mới đã được “trang trí” hoặc “bổ sung” một số chức năng.

Thuật toán

Đầu vào
Một hàm mà chúng ta muốn áp dụng decorator lên.

Đầu ra
Một hàm đã được bổ sung thêm chức năng từ decorator.
Các bước thực hiện
1. Định nghĩa decorator.
2. Trong decorator, định nghĩa một hàm lồng bên trong để bổ sung
thêm chức năng cho hàm gốc.
3. Trả về hàm đã được bổ sung chức năng.
4. Áp dụng decorator lên một hàm cụ thể và kiểm tra kết quả.

Code Python
def my_decorator(func):
def wrapper():
print("Something is happening before the function is
called.")
func()
print("Something is happening after the function is
called.")
return wrapper

@my_decorator
def say_hello():
print("Hello!")

# Calling the decorated function


say_hello()

Giải thích code


1. def my_decorator(func):: Định nghĩa một hàm decorator có tên
my_decorator nhận vào một hàm func như tham số.
2. def wrapper():: Định nghĩa một hàm lồng bên trong có tên
wrapper, đây là hàm sẽ thay thế cho hàm gốc.
print("Something is happening before the function is
called."): In ra thông báo trước khi gọi hàm gốc.
func(): Gọi hàm gốc.
print("Something is happening after the function is
called."): In ra thông báo sau khi gọi hàm gốc.
3. return wrapper: Trả về hàm wrapper, hàm này sẽ được sử dụng
thay cho hàm gốc.
4. @my_decorator: Sử dụng decorator my_decorator để trang trí cho
hàm say_hello.
5. def say_hello():: Định nghĩa một hàm đơn giản có tên
say_hello.
print("Hello!"): In ra thông báo “Hello!”.
6. say_hello(): Gọi hàm say_hello đã được trang trí bởi decorator.

Bổ sung
Để tạo nhiều decorator hoặc decorator phức tạp hơn, chúng ta
có thể thêm tham số cho decorator hoặc áp dụng nhiều
decorator lên một hàm.

Tóm tắt
Decorator là một hàm dùng để bổ sung thêm chức năng cho một
hàm khác mà không thay đổi mã nguồn của hàm đó.
Decorator được định nghĩa bằng cách tạo một hàm lồng bên
trong và trả về hàm này.
Sử dụng ký hiệu @decorator_name để áp dụng decorator lên một
hàm cụ thể.

Chương trình trên minh họa cách tạo và sử dụng một decorator đơn
giản trong Python.
172 - Viết chương trình để tạo một
decorator chấp nhận đối số

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một decorator
có thể chấp nhận đối số. Decorator này sẽ không chỉ bổ sung thêm
chức năng cho hàm mà còn có thể thay đổi hành vi của hàm dựa
trên các đối số được cung cấp cho decorator.

Thuật toán

Đầu vào
Một hàm cần trang trí và các đối số cho decorator.

Đầu ra
Một hàm đã được bổ sung thêm chức năng từ decorator dựa
trên các đối số cung cấp.

Các bước thực hiện


1. Định nghĩa một decorator chính có thể chấp nhận đối số.
2. Trong decorator chính, định nghĩa một decorator phụ để bổ sung
chức năng cho hàm gốc.
3. Trong decorator phụ, định nghĩa một hàm lồng bên trong để thực
hiện chức năng bổ sung.
4. Trả về hàm đã được bổ sung chức năng.
5. Áp dụng decorator có đối số lên một hàm cụ thể và kiểm tra kết
quả.
Code Python
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
func(*args, **kwargs)
return wrapper
return decorator

@repeat(3)
def say_hello():
print("Hello!")

# Calling the decorated function


say_hello()

Giải thích code


1. def repeat(n):: Định nghĩa một hàm decorator chính có tên
repeat nhận vào đối số n.
2. def decorator(func):: Định nghĩa một decorator phụ nhận vào
một hàm func cần trang trí.
def wrapper(*args, **kwargs):: Định nghĩa một hàm lồng
bên trong có tên wrapper, nhận bất kỳ số lượng đối số và từ
khóa đối số.
for _ in range(n):: Lặp n lần.
func(*args, **kwargs): Gọi hàm gốc func với các
đối số và từ khóa đối số.
return wrapper: Trả về hàm wrapper đã được trang trí.
3. return decorator: Trả về decorator phụ.
4. @repeat(3): Sử dụng decorator repeat với đối số 3 để trang trí
cho hàm say_hello.
5. def say_hello():: Định nghĩa một hàm đơn giản có tên
say_hello.
print("Hello!"): In ra thông báo “Hello!”.
6. say_hello(): Gọi hàm say_hello đã được trang trí bởi decorator
có đối số.

*args & **kwargs


Trong Python, def wrapper(*args, **kwargs): là cách khai báo một
hàm tên là wrapper nhận bất kỳ số lượng đối số nào, có tên hoặc
không có tên.

*args là một cú pháp đặc biệt cho phép hàm nhận một số lượng
không xác định các đối số không có tên. Các đối số này được
truy cập dưới dạng một tuple.

**kwargs là một cú pháp đặc biệt cho phép hàm nhận một số
lượng không xác định các đối số có tên. Các đối số này được
truy cập dưới dạng một từ điển.

Ví dụ, nếu bạn gọi wrapper(1, 2, 3, a=4, b=5), thì trong hàm
wrapper, args sẽ là một tuple (1, 2, 3) và kwargs sẽ là một từ điển
{'a': 4, 'b': 5}.

Hàm wrapper thường được sử dụng trong các decorator, nơi nó bao
bọc hàm gốc và thêm một số hành vi bổ sung, trong khi vẫn cho
phép hàm gốc được gọi với bất kỳ đối số nào.

Bổ sung
Một ví dụ khác, để tạo một decorator chấp nhận đối số mà không sử
dụng vòng lặp. Dưới đây là một ví dụ về decorator nhận đối số và
không sử dụng vòng lặp:
def multiply_by(factor):
def multiply_decorator(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs) * factor
return wrapper
return multiply_decorator

@multiply_by(2)
def add_numbers(a, b):
return a + b

print(add_numbers(3, 4)) # Output: 14

Trong ví dụ này, multiply_by là một decorator nhận đối số factor.


Nó trả về một decorator multiply_decorator nhận một hàm func
làm đối số. multiply_decorator sau đó trả về wrapper, một hàm mới
mà khi được gọi, sẽ gọi func và nhân kết quả với factor.

Khi bạn sử dụng @multiply_by(2) trước hàm add_numbers, Python


sẽ gọi multiply_by(2), trả về multiply_decorator, và
multiply_decorator sau đó được áp dụng cho add_numbers. Kết quả
là, khi bạn gọi add_numbers(3, 4), nó sẽ trả về kết quả của 3 + 4
nhân với 2, tức là 14.

Tóm tắt
Tạo decorator có thể chấp nhận đối số bằng cách định nghĩa
một hàm decorator chính nhận đối số và trả về một decorator
phụ.
Decorator phụ định nghĩa một hàm lồng bên trong để thực hiện
chức năng bổ sung dựa trên đối số cung cấp.
Sử dụng ký hiệu @decorator_name(argument) để áp dụng
decorator có đối số lên một hàm cụ thể.

Chương trình trên minh họa cách tạo và sử dụng một decorator
chấp nhận đối số để lặp lại việc gọi một hàm nhiều lần.
173 - Viết chương trình để tạo một
decorator với nhiều hàm trả về

Giải thích đề bài


Đề bài yêu cầu chúng ta viết một decorator trong Python có thể trả
về nhiều hàm khác nhau dựa trên một số điều kiện.

Thuật toán:
Đầu vào: Một hàm và một đối số cho decorator.
Đầu ra: Một hàm mới được trả về từ decorator dựa trên đối số.
Các bước thực hiện:
1. Định nghĩa decorator nhận đối số.
2. Trong decorator, định nghĩa một hàm wrapper nhận hàm cần
trang trí.
3. Trong hàm wrapper, kiểm tra đối số và trả về hàm tương
ứng.
4. Áp dụng decorator lên hàm cần trang trí.

Code Python
def route(path):
def decorator(func):
def wrapper(*args, **kwargs):
if path == "/home":
return home(*args, **kwargs)
elif path == "/about":
return about(*args, **kwargs)
else:
return func(*args, **kwargs)
return wrapper
return decorator
def home(name):
return f"Welcome to the home page, {name}!"

def about(name):
return f"This is the about page. Nice to meet you,
{name}!"

@route("/home")
def greet(name):
return f"Hello, {name}!"

print(greet("John")) # Output: Welcome to the home page,


John!

Giải thích code


Đầu tiên, chúng ta định nghĩa decorator route nhận đối số path.
Trong route, chúng ta định nghĩa một hàm decorator nhận hàm
func làm đối số.
Trong decorator, chúng ta định nghĩa một hàm wrapper kiểm tra
path và trả về hàm tương ứng.
Chúng ta sau đó áp dụng decorator route lên hàm greet bằng
cách sử dụng cú pháp @route("/home").

*args & **kwargs


Trong Python, def wrapper(*args, **kwargs): là cách khai báo một
hàm tên là wrapper nhận bất kỳ số lượng đối số nào, có tên hoặc
không có tên.

*args là một cú pháp đặc biệt cho phép hàm nhận một số lượng
không xác định các đối số không có tên. Các đối số này được
truy cập dưới dạng một tuple.

**kwargs là một cú pháp đặc biệt cho phép hàm nhận một số
lượng không xác định các đối số có tên. Các đối số này được
truy cập dưới dạng một từ điển.

Ví dụ, nếu bạn gọi wrapper(1, 2, 3, a=4, b=5), thì trong hàm
wrapper, args sẽ là một tuple (1, 2, 3) và kwargs sẽ là một từ điển
{'a': 4, 'b': 5}.

Hàm wrapper thường được sử dụng trong các decorator, nơi nó bao
bọc hàm gốc và thêm một số hành vi bổ sung, trong khi vẫn cho
phép hàm gốc được gọi với bất kỳ đối số nào.

Bổ sung
Cách tiếp cận này có thể được mở rộng để xử lý nhiều đối số
hơn hoặc để xử lý các hàm khác nhau dựa trên các điều kiện
khác nhau.

Tóm tắt:
Chương trình này minh họa cách sử dụng decorator trong
Python để thay đổi hành vi của một hàm dựa trên đối số của
decorator.
Chương trình này cũng minh họa cách sử dụng hàm wrapper
trong decorator để kiểm tra đối số và trả về hàm tương ứng.
Chương trình này cung cấp một ví dụ về cách sử dụng decorator
để thực hiện logic điều hướng đơn giản, một kỹ thuật thường
được sử dụng trong các ứng dụng web.

Chương trình này minh họa cách sử dụng decorator trong Python để
thay đổi hành vi của một hàm dựa trên đối số của decorator.
174 - Viết chương trình để tạo một
decorator gọi một hàm nhiều lần

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một decorator
có thể gọi một hàm nhiều lần. Decorator này sẽ nhận vào một đối số
để xác định số lần gọi hàm và sau đó thực hiện việc gọi hàm đó
đúng số lần đã được chỉ định.

Thuật toán

Đầu vào
Một hàm cần trang trí.
Số lần cần gọi hàm đó.

Đầu ra
Một hàm đã được bổ sung thêm chức năng từ decorator để gọi
nhiều lần.

Các bước thực hiện


1. Định nghĩa một decorator để gọi hàm nhiều lần.
2. Trong decorator, định nghĩa một hàm lồng bên trong để thực
hiện việc gọi hàm nhiều lần.
3. Trả về hàm đã được bổ sung chức năng.
4. Áp dụng decorator lên một hàm cụ thể và kiểm tra kết quả.
Code Python
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
func(*args, **kwargs)
return wrapper
return decorator

@repeat(3)
def say_hello():
print("Hello!")

# Calling the decorated function


say_hello()

Giải thích code


1. Định nghĩa decorator repeat:

def repeat(n):: Định nghĩa một hàm decorator nhận vào


một đối số n đại diện cho số lần cần gọi hàm.
def decorator(func):: Định nghĩa một decorator phụ nhận
vào một hàm func cần trang trí.
def wrapper(*args, **kwargs):: Định nghĩa một hàm
lồng bên trong wrapper nhận bất kỳ số lượng đối số và từ
khóa đối số.
for _ in range(n):: Lặp n lần.
func(*args, **kwargs): Gọi hàm gốc func với
các đối số và từ khóa đối số.
return wrapper: Trả về hàm wrapper đã được trang trí.
return decorator: Trả về decorator phụ.

2. Áp dụng decorator lên hàm say_hello:


@repeat(3): Sử dụng decorator repeat với đối số 3 để trang
trí cho hàm say_hello.
def say_hello():: Định nghĩa một hàm đơn giản có tên
say_hello.
print("Hello!"): In ra thông báo “Hello!”.

3. Gọi hàm say_hello đã được trang trí:

say_hello(): Gọi hàm say_hello đã được trang trí bởi


decorator repeat. Hàm này sẽ in ra “Hello!” ba lần.

Bổ sung
Có thể áp dụng decorator repeat với các số lần khác nhau để
gọi các hàm khác nhau nhiều lần.

Tóm tắt
Tạo decorator có thể gọi hàm nhiều lần bằng cách định nghĩa
một hàm decorator chính nhận đối số và trả về một decorator
phụ.
Decorator phụ định nghĩa một hàm lồng bên trong để thực hiện
việc gọi hàm nhiều lần dựa trên đối số cung cấp.
Sử dụng ký hiệu @decorator_name(argument) để áp dụng
decorator có đối số lên một hàm cụ thể.

Chương trình trên minh họa cách tạo và sử dụng một decorator để
gọi một hàm nhiều lần, giúp bổ sung chức năng cho hàm một cách
linh hoạt.
175 - Viết chương trình để tạo một
decorator sửa đổi giá trị trả về của
một hàm

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một decorator
có thể sửa đổi giá trị trả về của một hàm. Decorator này sẽ nhận vào
một hàm và thay đổi giá trị trả về của hàm đó theo một cách nào đó.

Thuật toán

Đầu vào
Một hàm cần trang trí.

Đầu ra
Một hàm đã được bổ sung thêm chức năng từ decorator để sửa
đổi giá trị trả về.

Các bước thực hiện


1. Định nghĩa một decorator để sửa đổi giá trị trả về của hàm.
2. Trong decorator, định nghĩa một hàm lồng bên trong để thực
hiện việc sửa đổi giá trị trả về.
3. Trả về hàm đã được bổ sung chức năng.
4. Áp dụng decorator lên một hàm cụ thể và kiểm tra kết quả.
Code Python
def modify_return_value_decorator(func):
def wrapper(*args, **kwargs):
# Gọi hàm gốc và lấy giá trị trả về
result = func(*args, **kwargs)
# Sửa đổi giá trị trả về
modified_result = result * 2 # Ví dụ: nhân đôi giá
trị trả về
return modified_result
return wrapper

@modify_return_value_decorator
def get_number():
return 5

# Calling the decorated function


print(get_number())

Giải thích code


1. Định nghĩa decorator modify_return_value_decorator:

def modify_return_value_decorator(func):: Định nghĩa


một hàm decorator nhận vào một hàm func cần trang trí.
def wrapper(*args, **kwargs):: Định nghĩa một hàm lồng
bên trong wrapper nhận bất kỳ số lượng đối số và từ khóa
đối số.
result = func(*args, **kwargs): Gọi hàm gốc func với
các đối số và từ khóa đối số, lưu kết quả trả về vào biến
result.
modified_result = result * 2: Sửa đổi giá trị trả về, ví
dụ ở đây là nhân đôi giá trị trả về.
return modified_result: Trả về kết quả đã được sửa
đổi.
return wrapper: Trả về hàm wrapper đã được trang trí.
2. Áp dụng decorator lên hàm get_number:

@modify_return_value_decorator: Sử dụng decorator


modify_return_value_decorator để trang trí cho hàm
get_number.
def get_number():: Định nghĩa một hàm đơn giản có tên
get_number.
return 5: Hàm này trả về số 5.

3. Gọi hàm get_number đã được trang trí:

print(get_number()): Gọi hàm get_number đã được trang trí


bởi decorator modify_return_value_decorator. Hàm này sẽ
trả về giá trị đã được sửa đổi, ở đây là 5 * 2 = 10.

Bổ sung
Có thể thay đổi logic sửa đổi giá trị trả về trong hàm wrapper để
thực hiện các thao tác khác như thêm một giá trị cố định, chuyển
đổi kiểu dữ liệu, hoặc các phép tính phức tạp hơn.

Tóm tắt
Tạo decorator để sửa đổi giá trị trả về của hàm bằng cách định
nghĩa một hàm decorator nhận vào hàm và trả về một hàm lồng
bên trong.
Hàm lồng bên trong thực hiện việc gọi hàm gốc, sửa đổi giá trị
trả về và trả về kết quả đã được sửa đổi.
Sử dụng ký hiệu @decorator_name để áp dụng decorator lên một
hàm cụ thể.

Chương trình trên minh họa cách tạo và sử dụng một decorator để
sửa đổi giá trị trả về của một hàm, giúp bổ sung chức năng cho hàm
một cách linh hoạt.
176 - Viết chương trình để tạo một
decorator kiểm tra thời gian thực thi
của một hàm

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một decorator
có thể kiểm tra thời gian thực thi của một hàm. Decorator này sẽ đo
thời gian từ khi hàm bắt đầu cho đến khi kết thúc và in ra thời gian
thực thi đó.

Thuật toán

Đầu vào
Một hàm cần trang trí.

Đầu ra
Một hàm đã được bổ sung thêm chức năng từ decorator để kiểm
tra thời gian thực thi.

Các bước thực hiện


1. Định nghĩa một decorator để đo thời gian thực thi của hàm.
2. Trong decorator, định nghĩa một hàm lồng bên trong để thực
hiện việc đo thời gian thực thi.
3. Sử dụng time module để đo thời gian bắt đầu và kết thúc thực
thi hàm.
4. Trả về hàm đã được bổ sung chức năng.
5. Áp dụng decorator lên một hàm cụ thể và kiểm tra kết quả.

Code Python
import time

def timing_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time() # Lấy thời gian bắt đầu
result = func(*args, **kwargs) # Gọi hàm gốc
end_time = time.time() # Lấy thời gian kết thúc
execution_time = end_time - start_time # Tính toán
thời gian thực thi
print(f"Function {func.__name__} took
{execution_time:.6f} seconds to execute")
return result
return wrapper

@timing_decorator
def example_function():
time.sleep(2) # Giả lập một công việc tốn thời gian
return "Function execution complete"

# Calling the decorated function


print(example_function())

Giải thích code


1. Nhập module time:

import time: Nhập module time để sử dụng hàm time() cho


việc đo thời gian.

2. Định nghĩa decorator timing_decorator:

def timing_decorator(func):: Định nghĩa một hàm


decorator nhận vào một hàm func cần trang trí.
def wrapper(*args, **kwargs):: Định nghĩa một hàm lồng
bên trong wrapper nhận bất kỳ số lượng đối số và từ khóa
đối số.
start_time = time.time(): Lấy thời gian bắt đầu thực
thi hàm.
result = func(*args, **kwargs): Gọi hàm gốc func với
các đối số và từ khóa đối số, lưu kết quả trả về vào biến
result.
end_time = time.time(): Lấy thời gian kết thúc thực thi
hàm.
execution_time = end_time - start_time: Tính toán
thời gian thực thi hàm.
print(f"Function {func.__name__} took
{execution_time:.6f} seconds to execute"): In ra thời
gian thực thi của hàm.
return result: Trả về kết quả của hàm gốc.
return wrapper: Trả về hàm wrapper đã được trang trí.

3. Áp dụng decorator lên hàm example_function:

@timing_decorator: Sử dụng decorator timing_decorator để


trang trí cho hàm example_function.
def example_function():: Định nghĩa một hàm đơn giản có
tên example_function.
time.sleep(2): Giả lập một công việc tốn thời gian bằng
cách dừng thực thi trong 2 giây.
return "Function execution complete": Trả về một
thông báo khi hoàn thành.

4. Gọi hàm example_function đã được trang trí:

print(example_function()): Gọi hàm example_function đã


được trang trí bởi decorator timing_decorator. Hàm này sẽ
in ra thời gian thực thi và trả về kết quả.
Bổ sung
Có thể áp dụng decorator timing_decorator lên bất kỳ hàm nào
để đo thời gian thực thi của chúng.

Tóm tắt
Sử dụng module time để đo thời gian thực thi của hàm.
Tạo decorator bằng cách định nghĩa một hàm nhận vào hàm và
trả về một hàm lồng bên trong.
Hàm lồng bên trong thực hiện việc đo thời gian thực thi của hàm
và in ra kết quả.
Sử dụng ký hiệu @decorator_name để áp dụng decorator lên một
hàm cụ thể.

Chương trình trên minh họa cách tạo và sử dụng một decorator để
kiểm tra thời gian thực thi của một hàm, giúp theo dõi hiệu suất của
hàm một cách dễ dàng.
177 - Viết chương trình để tạo một
decorator giới hạn số lần gọi một hàm

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một decorator
có thể giới hạn số lần gọi một hàm. Decorator này sẽ đếm số lần
hàm được gọi và ngăn không cho hàm đó được gọi quá số lần đã
chỉ định.

Thuật toán

Đầu vào
Một hàm cần trang trí.
Số lần tối đa có thể gọi hàm đó.

Đầu ra
Một hàm đã được bổ sung thêm chức năng từ decorator để giới
hạn số lần gọi.

Các bước thực hiện


1. Định nghĩa một decorator để giới hạn số lần gọi của hàm.
2. Trong decorator, định nghĩa một hàm lồng bên trong để đếm số
lần gọi hàm.
3. Sử dụng biến đếm để theo dõi số lần gọi hàm.
4. Nếu số lần gọi vượt quá giới hạn, không gọi hàm nữa và có thể
in ra thông báo.
5. Trả về hàm đã được bổ sung chức năng.
6. Áp dụng decorator lên một hàm cụ thể và kiểm tra kết quả.

Code Python
def limit_calls(max_calls):
def decorator(func):
func._call_count = 0 # Biến đếm số lần gọi hàm

def wrapper(*args, **kwargs):


if func._call_count >= max_calls:
print(f"Function {func.__name__} has reached
its call limit.")
return None
func._call_count += 1
return func(*args, **kwargs)

return wrapper

return decorator

@limit_calls(3)
def example_function():
print("Function is called.")

# Calling the decorated function multiple times


example_function()
example_function()
example_function()
example_function() # This call should not execute the
function

Giải thích code


1. Định nghĩa decorator limit_calls:

def limit_calls(max_calls):: Định nghĩa một hàm


decorator nhận vào đối số max_calls đại diện cho số lần tối
đa có thể gọi hàm.
def decorator(func):: Định nghĩa một decorator phụ nhận
vào một hàm func cần trang trí.
func._call_count = 0: Tạo một biến đếm _call_count
để theo dõi số lần gọi hàm.
def wrapper(*args, **kwargs):: Định nghĩa một hàm
lồng bên trong wrapper nhận bất kỳ số lượng đối số và từ
khóa đối số.
if func._call_count >= max_calls: Kiểm tra nếu số
lần gọi hàm đã đạt đến giới hạn max_calls.
print(f"Function {func.__name__} has reached
its call limit."): In ra thông báo khi hàm đã
đạt đến giới hạn gọi.
return None: Không gọi hàm nữa và trả về None.
func._call_count += 1: Tăng biến đếm số lần gọi
hàm lên một đơn vị.
return func(*args, **kwargs): Gọi hàm gốc func
với các đối số và từ khóa đối số.
return wrapper: Trả về hàm wrapper đã được trang trí.
return decorator: Trả về decorator phụ.

2. Áp dụng decorator lên hàm example_function:

@limit_calls(3): Sử dụng decorator limit_calls với đối số


3 để trang trí cho hàm example_function.
def example_function():: Định nghĩa một hàm đơn giản có
tên example_function.
print("Function is called."): In ra thông báo khi hàm
được gọi.

3. Gọi hàm example_function đã được trang trí:

example_function(): Gọi hàm example_function lần thứ


nhất, hàm sẽ thực thi.
example_function(): Gọi hàm example_function lần thứ hai,
hàm sẽ thực thi.
example_function(): Gọi hàm example_function lần thứ ba,
hàm sẽ thực thi.
example_function(): Gọi hàm example_function lần thứ tư,
hàm sẽ không thực thi và in ra thông báo rằng đã đạt đến
giới hạn gọi hàm.

4. Thuộc tính func._call_count:

Trong Python, func._call_count là một thuộc tính tùy chỉnh


được thêm vào hàm func. Trong trường hợp này, nó được sử
dụng để theo dõi số lần hàm func đã được gọi.

_call_count không phải là một thuộc tính có sẵn của hàm trong
Python, nhưng Python cho phép bạn thêm các thuộc tính tùy
chỉnh vào hầu hết các đối tượng, bao gồm cả hàm. Điều này rất
hữu ích khi bạn muốn lưu trữ một số thông tin liên quan đến đối
tượng mà không cần tạo một đối tượng phức tạp hơn.

Trong trường hợp này, func._call_count được khởi tạo với giá
trị 0 khi decorator được áp dụng cho func. Sau đó, mỗi lần
wrapper được gọi, func._call_count tăng lên 1. Nếu
func._call_count đạt đến max_calls, wrapper sẽ ngừng gọi
func và in ra một thông báo.

Bạn có thể coi func._call_count như một biến toàn cục cho
hàm func. Tuy nhiên, nó không phải là một biến toàn cục trong
nghĩa truyền thống, vì nó không có phạm vi toàn cục - bạn không
thể truy cập func._call_count từ bất kỳ đâu trong chương trình
của bạn. Thay vào đó, nó là một thuộc tính của hàm func, và chỉ
có thể được truy cập thông qua func.

Tuy nhiên, giống như một biến toàn cục, func._call_count duy
trì trạng thái của nó giữa các lần gọi hàm, và thay đổi giá trị của
nó sẽ ảnh hưởng đến tất cả các lần gọi hàm sau đó. Điều này
giống như cách một biến toàn cục hoạt động.
Reset
Sau khi số lần gọi đã được đặt lại, chúng ta có thể gọi lại hàm
example_function một lần nữa mà không bị giới hạn bởi số lần gọi
trước đó.

Ví dụ:
# Đặt lại số lần gọi của hàm đã được giới hạn
example_function.reset()

# Gọi lại hàm đã được giới hạn


example_function()

Đoạn code dưới sẽ triển khai một decorator có tên là limit_calls,


cho phép giới hạn số lần gọi của một hàm. Trong decorator này,
chúng ta có một hàm con được gọi là reset, được sử dụng để đặt
lại số lần gọi của hàm đã được giới hạn.
def limit_calls(max_calls):
def decorator(func):

# Initialize call count variable


func._call_count = 0 # Call count variable

# Wrapper function
def wrapper(*args, **kwargs):
if func._call_count >= max_calls:
print(f"Function {func.__name__} has reached
its call limit.")
return None
func._call_count += 1
return func(*args, **kwargs)

# Reset call count function


def reset():
func._call_count = 0 # Reset call count

wrapper.reset = reset # Add reset function to the


wrapper
return wrapper

return decorator

# Calling the decorated function multiple times


example_function()
example_function()
example_function()
example_function() # This call should not execute the
function

# Resetting the call count


example_function.reset()

# Calling the decorated function again


example_function()
example_function()
example_function()
example_function() # This call should not execute the
function

Khi một hàm được gọi nhiều lần và đạt đến giới hạn số lần gọi,
decorator sẽ in ra thông báo “Function {func.name} has reached its
call limit.” và trả về None thay vì thực thi hàm gốc. Điều này giúp đảm
bảo rằng hàm chỉ được gọi một số lần nhất định.

Tuy nhiên, đôi khi chúng ta muốn đặt lại số lần gọi của hàm đã được
giới hạn để có thể gọi lại nó. Đó là lúc chúng ta sử dụng hàm reset.
Hàm reset được triển khai trong decorator và được gán cho thuộc
tính reset của hàm bọc (wrapper). Khi gọi
example_function.reset(), nó sẽ đặt lại số lần gọi của
example_function về 0.

Trong ví dụ trên, sau khi gọi example_function.reset(), số lần gọi


của example_function đã được đặt lại về 0. Do đó, khi gọi
example_function() sau đó, hàm sẽ được thực thi mà không bị giới
hạn bởi số lần gọi trước đó.
Tóm tắt
Tạo decorator để giới hạn số lần gọi của hàm bằng cách định
nghĩa một hàm nhận vào hàm và trả về một hàm lồng bên trong.
Hàm lồng bên trong sử dụng biến đếm để theo dõi số lần gọi
hàm và ngăn không cho hàm được gọi quá số lần chỉ định.
Sử dụng ký hiệu @decorator_name(argument) để áp dụng
decorator có đối số lên một hàm cụ thể.

Chương trình trên minh họa cách tạo và sử dụng một decorator để
giới hạn số lần gọi một hàm, giúp kiểm soát số lần thực thi của hàm
một cách dễ dàng.
178 - Viết chương trình để tạo một
decorator chuyển đổi giá trị trả về
thành một kiểu dữ liệu khác

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một decorator
có thể chuyển đổi giá trị trả về của một hàm thành một kiểu dữ liệu
khác. Decorator này sẽ nhận vào một hàm và chuyển đổi giá trị trả
về của hàm đó thành kiểu dữ liệu đã chỉ định.

Thuật toán

Đầu vào
Một hàm cần trang trí.
Kiểu dữ liệu cần chuyển đổi giá trị trả về.

Đầu ra
Một hàm đã được bổ sung thêm chức năng từ decorator để
chuyển đổi giá trị trả về.

Các bước thực hiện


1. Định nghĩa một decorator để chuyển đổi giá trị trả về của hàm.
2. Trong decorator, định nghĩa một hàm lồng bên trong để thực
hiện việc chuyển đổi giá trị trả về.
3. Trả về hàm đã được bổ sung chức năng.
4. Áp dụng decorator lên một hàm cụ thể và kiểm tra kết quả.
Code Python
def convert_return_type(target_type):
def decorator(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs) # Gọi hàm gốc
try:
converted_result = target_type(result) #
Chuyển đổi giá trị trả về
return converted_result
except (ValueError, TypeError) as e:
print(f"Conversion error: {e}")
return result # Trả về giá trị gốc nếu
chuyển đổi thất bại
return wrapper
return decorator

@convert_return_type(str)
def example_function():
return 123

@convert_return_type(list)
def example_function_list():
return 'abc'

# Calling the decorated functions


print(example_function()) # Kết quả sẽ là chuỗi "123"
print(example_function_list()) # Kết quả sẽ là list ['a',
'b', 'c']

Giải thích code


1. Định nghĩa decorator convert_return_type:

def convert_return_type(target_type):: Định nghĩa một


hàm decorator nhận vào đối số target_type đại diện cho
kiểu dữ liệu cần chuyển đổi giá trị trả về.
def decorator(func):: Định nghĩa một decorator phụ nhận
vào một hàm func cần trang trí.
def wrapper(*args, **kwargs):: Định nghĩa một hàm
lồng bên trong wrapper nhận bất kỳ số lượng đối số và từ
khóa đối số.
result = func(*args, **kwargs): Gọi hàm gốc func
với các đối số và từ khóa đối số, lưu kết quả trả về
vào biến result.
try: converted_result = target_type(result): Cố
gắng chuyển đổi giá trị trả về sang kiểu dữ liệu
target_type.
return converted_result: Trả về kết quả đã được
chuyển đổi.
except (ValueError, TypeError) as e:: Bắt ngoại
lệ nếu có lỗi trong quá trình chuyển đổi.
print(f"Conversion error: {e}"): In ra thông
báo lỗi nếu có lỗi trong quá trình chuyển đổi.
return result: Trả về giá trị gốc nếu chuyển đổi
thất bại.
return wrapper: Trả về hàm wrapper đã được trang trí.
return decorator: Trả về decorator phụ.

2. Áp dụng decorator lên hàm example_function:

@convert_return_type(str): Sử dụng decorator


convert_return_type với đối số str để trang trí cho hàm
example_function.
def example_function():: Định nghĩa một hàm đơn giản có
tên example_function.
return 123: Hàm này trả về số nguyên 123.

3. Áp dụng decorator lên hàm example_function_list:

@convert_return_type(list): Sử dụng decorator


convert_return_type với đối số list để trang trí cho hàm
example_function_list.
def example_function_list():: Định nghĩa một hàm đơn
giản có tên example_function_list.
return 'abc': Hàm này trả về chuỗi ‘abc’.

4. Gọi các hàm đã được trang trí:

print(example_function()): Gọi hàm example_function đã


được trang trí bởi decorator convert_return_type. Hàm này
sẽ trả về chuỗi "123".
print(example_function_list()): Gọi hàm
example_function_list đã được trang trí bởi decorator
convert_return_type. Hàm này sẽ trả về list ['a', 'b',
'c'].

Bổ sung
Có thể áp dụng decorator convert_return_type với các kiểu dữ
liệu khác nhau để chuyển đổi giá trị trả về của các hàm khác
nhau.

Tóm tắt
Tạo decorator để chuyển đổi giá trị trả về của hàm bằng cách
định nghĩa một hàm nhận vào hàm và trả về một hàm lồng bên
trong.
Hàm lồng bên trong thực hiện việc chuyển đổi giá trị trả về của
hàm và trả về kết quả đã được chuyển đổi.
Sử dụng ký hiệu @decorator_name(argument) để áp dụng
decorator có đối số lên một hàm cụ thể.

Chương trình trên minh họa cách tạo và sử dụng một decorator để
chuyển đổi giá trị trả về của một hàm, giúp thay đổi kiểu dữ liệu của
kết quả một cách linh hoạt.
179 - Viết chương trình để tạo một
decorator nhận một đối số từ bên
ngoài

Giải thích đề bài


Đề bài yêu cầu chúng ta viết một decorator trong Python nhận một
đối số từ bên ngoài.

Thuật toán:

Đầu vào
Một hàm bất kỳ
Một đối số từ bên ngoài

Đầu ra
Hàm đã được modify bởi decorator

Các bước thực hiện


1. Định nghĩa decorator nhận đối số từ bên ngoài.
2. Trong decorator, định nghĩa một hàm bên trong nhận hàm cần
modify.
3. Trong hàm bên trong, định nghĩa một hàm wrapper để thực hiện
việc modify hàm.
4. Trả về hàm wrapper.
5. Sử dụng decorator cho hàm cần modify.
Code Python
def multiply(n):
def decorator(func):
def wrapper(*args, **kwargs):
return n * func(*args, **kwargs)
return wrapper
return decorator

@multiply(3)
def add(a, b):
return a + b

print(add(1, 2)) # Output: 9

Giải thích code


1. Định nghĩa decorator multiply nhận đối số n.
2. Trong multiply, định nghĩa hàm decorator nhận hàm func cần
modify.
3. Trong decorator, định nghĩa hàm wrapper để thực hiện việc
modify hàm. wrapper nhận bất kỳ đối số nào và trả về kết quả
của func nhân với n.
4. decorator trả về wrapper.
5. multiply trả về decorator.
6. Sử dụng @multiply(3) để áp dụng decorator cho hàm add.
7. Khi gọi add(1, 2), kết quả là 9 thay vì 3 vì giá trị trả về của add
được nhân với 3.

Tóm tắt:
Decorator trong Python là một hàm nhận một hàm khác làm đối
số và trả về một hàm mới đã được modify.
Decorator có thể nhận đối số từ bên ngoài.
Decorator thường được sử dụng để thêm hoặc thay đổi hành vi
của hàm mà không cần sửa đổi code của hàm đó.

Chương trình này minh họa cách tạo một decorator nhận đối số từ
bên ngoài trong Python.
180 - Viết chương trình để tạo một
decorator sử dụng hàm generator

Giải thích đề bài


Đề bài yêu cầu chúng ta viết một decorator trong Python sử dụng
hàm generator.

Generator là gì?
Generator trong Python là một loại iterator, nhưng bạn chỉ có thể lặp
qua chúng một lần. Điều này là do chúng không lưu trữ tất cả các
giá trị trong bộ nhớ, chúng tạo ra các giá trị theo yêu cầu.

Thuật toán:

Đầu vào
Một hàm bất kỳ

Đầu ra
Hàm đã được modify bởi decorator

Các bước thực hiện


1. Định nghĩa decorator.
2. Trong decorator, định nghĩa một hàm bên trong nhận hàm cần
modify.
3. Trong hàm bên trong, định nghĩa một hàm generator để thực
hiện việc modify hàm.
4. Trả về hàm generator.
5. Sử dụng decorator cho hàm cần modify.

Code Python
def generator_decorator(func):
def inner(*args, **kwargs):
yield from func(*args, **kwargs)
return inner

@generator_decorator
def count_up_to(n):
return (i for i in range(1, n+1))

for num in count_up_to(5):


print(num) # Output: 1, 2, 3, 4, 5

Giải thích code


1. Định nghĩa decorator generator_decorator nhận hàm func cần
modify.
2. Trong generator_decorator, định nghĩa hàm inner để thực hiện
việc modify hàm. inner nhận bất kỳ đối số nào và sử dụng yield
from để trả về giá trị từ func.
3. generator_decorator trả về inner.
4. Sử dụng @generator_decorator để áp dụng decorator cho hàm
count_up_to.
5. Khi gọi count_up_to(5), kết quả là một generator trả về các số
từ 1 đến 5.

Bổ sung
Không có cách giải khác.
Tóm tắt:
Generator trong Python là một loại iterator, nhưng bạn chỉ có thể
lặp qua chúng một lần.
Decorator trong Python là một hàm nhận một hàm khác làm đối
số và trả về một hàm mới đã được modify.
Decorator có thể sử dụng hàm generator để modify hàm.

Chương trình này minh họa cách tạo một decorator sử dụng hàm
generator trong Python.
Chương 19 : Iterator
181. Viết chương trình để tạo một iterator từ một list.
182. Viết chương trình để tạo một iterator từ một tuple.
183. Viết chương trình để tạo một iterator từ một chuỗi.
184. Viết chương trình để lặp qua một iterator.
185. Viết chương trình để sử dụng hàm next để truy cập các phần tử
của một iterator.
186. Viết chương trình để tạo một iterator tùy chỉnh.
187. Viết chương trình để sử dụng itertools để tạo ra một
permutation.
188. Viết chương trình để sử dụng itertools để tạo ra một
combination.
189. Viết chương trình để sử dụng itertools để tạo ra một product.
190. Viết chương trình để sử dụng itertools để tạo ra một
combinations_with_replacement.
181 - Viết chương trình để tạo một
iterator từ một list

Giải thích đề bài


Đề bài yêu cầu chúng ta viết một chương trình bằng Python để tạo
một iterator từ một danh sách (list). Iterator là một đối tượng trong
Python cho phép duyệt qua các phần tử của một collection (như list)
một cách tuần tự.

Thuật toán:
Đầu vào: Một list bất kỳ.
Đầu ra: Một iterator từ list đầu vào.
Các bước thực hiện:
1. Nhận list đầu vào.
2. Tạo iterator từ list đầu vào bằng cách sử dụng hàm iter().
3. Sử dụng iterator để truy xuất từng phần tử trong list cho đến
khi hết phần tử.

Code Python
# Định nghĩa một danh sách
my_list = [1, 2, 3, 4, 5]

# Tạo một iterator từ danh sách


my_iterator = iter(my_list)

# Sử dụng vòng lặp để duyệt qua các phần tử của iterator


while True:
try:
# Lấy phần tử tiếp theo từ iterator
element = next(my_iterator)
print(element)
except StopIteration:
# Nếu không còn phần tử nào trong iterator thì thoát
khỏi vòng lặp
break

Giải thích code


1. Định nghĩa một danh sách:

my_list = [1, 2, 3, 4, 5]: Tạo một list chứa các phần tử


từ 1 đến 5.

2. Tạo một iterator từ danh sách:

my_iterator = iter(my_list): Sử dụng hàm iter() để tạo


một iterator từ list my_list.

3. Sử dụng vòng lặp để duyệt qua các phần tử của iterator:

while True:: Tạo một vòng lặp vô hạn.


try:: Bắt đầu khối lệnh có thể phát sinh ngoại lệ.
element = next(my_iterator): Sử dụng hàm next() để
lấy phần tử tiếp theo từ iterator my_iterator.
print(element): In ra phần tử vừa lấy.
except StopIteration:: Bắt ngoại lệ StopIteration khi
iterator không còn phần tử nào để trả về.
break: Thoát khỏi vòng lặp vô hạn.

Tóm tắt:
list: Danh sách trong Python, một dạng collection.
iter(): Hàm tạo iterator từ một collection.
next(): Hàm lấy phần tử tiếp theo từ một iterator.
StopIteration: Ngoại lệ được ném ra khi không còn phần tử
nào trong iterator.
Vòng lặp while True và khối try-except để duyệt qua tất cả các
phần tử của iterator và xử lý ngoại lệ.

Chương trình này tạo một iterator từ một list và sử dụng nó để duyệt
qua và in ra các phần tử của list tuần tự cho đến khi hết phần tử.
182 - Viết chương trình để tạo một
iterator từ một tuple

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để tạo một iterator từ một tuple
và sử dụng vòng lặp for để duyệt qua các phần tử của tuple.

Thuật toán:
Đầu vào: Một tuple bất kỳ.
Đầu ra: Từng phần tử của tuple được in ra.
Các bước thực hiện:
1. Nhận tuple đầu vào.
2. Tạo iterator từ tuple đầu vào bằng cách sử dụng hàm
iter().
3. Sử dụng vòng lặp for để duyệt qua các phần tử của iterator
và in ra từng phần tử.

Code Python
# Định nghĩa một tuple
my_tuple = (10, 20, 30, 40, 50)

# Tạo một iterator từ tuple


my_iterator = iter(my_tuple)

# Sử dụng vòng lặp for để duyệt qua các phần tử của iterator
for element in my_iterator:
print(element)
Giải thích code
1. Định nghĩa một tuple:

my_tuple = (10, 20, 30, 40, 50): Tạo một tuple chứa các
phần tử từ 10 đến 50.

2. Tạo một iterator từ tuple:

my_iterator = iter(my_tuple): Sử dụng hàm iter() để tạo


một iterator từ tuple my_tuple.

3. Sử dụng vòng lặp for để duyệt qua các phần tử của iterator:

for element in my_iterator:: Sử dụng vòng lặp for để


duyệt qua từng phần tử của iterator my_iterator.
print(element): In ra từng phần tử vừa được lấy từ iterator.

Tóm tắt:
tuple:Tuple trong Python, một dạng collection bất biến.
iter(): Hàm tạo iterator từ một collection.
Vòng lặp for: Sử dụng để duyệt qua các phần tử của iterator
một cách dễ dàng.

Chương trình này tạo một iterator từ một tuple và sử dụng vòng lặp
for để duyệt qua và in ra các phần tử của tuple tuần tự.
183 - Viết chương trình để tạo một
iterator từ một chuỗi

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để tạo một iterator từ một
chuỗi (string) và duyệt qua các phần tử của chuỗi đó.

Thuật toán:
Đầu vào: Một chuỗi bất kỳ.
Đầu ra: Từng ký tự của chuỗi được in ra.
Các bước thực hiện:
1. Nhận chuỗi đầu vào.
2. Tạo iterator từ chuỗi đầu vào bằng cách sử dụng hàm
iter().
3. Sử dụng vòng lặp for để duyệt qua các phần tử của iterator
và in ra từng ký tự.

Code Python
# Định nghĩa một chuỗi
my_string = "Hello, World!"

# Tạo một iterator từ chuỗi


my_iterator = iter(my_string)

# Sử dụng vòng lặp for để duyệt qua các phần tử của iterator
for character in my_iterator:
print(character)
Giải thích code
1. Định nghĩa một chuỗi:

my_string = "Hello, World!": Tạo một chuỗi chứa các ký


tự.

2. Tạo một iterator từ chuỗi:

my_iterator = iter(my_string): Sử dụng hàm iter() để


tạo một iterator từ chuỗi my_string.

3. Sử dụng vòng lặp for để duyệt qua các phần tử của iterator:

for character in my_iterator:: Sử dụng vòng lặp for để


duyệt qua từng ký tự của iterator my_iterator.
print(character): In ra từng ký tự vừa được lấy từ iterator.

Tóm tắt:
string: Chuỗi trong Python, một dạng collection các ký tự.
iter(): Hàm tạo iterator từ một collection.
Vòng lặp for: Sử dụng để duyệt qua các phần tử của iterator
một cách dễ dàng.

Chương trình này tạo một iterator từ một chuỗi và sử dụng vòng lặp
for để duyệt qua và in ra các ký tự của chuỗi tuần tự.
184 - Viết chương trình để lặp qua một
iterator

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để lặp qua một iterator và bổ
sung các cách lặp khác ngoài việc sử dụng hàm next(). Iterator là
một đối tượng trong Python cho phép duyệt qua các phần tử của
một collection (như list, tuple, string) một cách tuần tự.

Thuật toán:
Đầu vào: Một collection bất kỳ (list, tuple, string, etc.).
Đầu ra: Các phần tử của collection được in ra tuần tự.
Các bước thực hiện:
1. Nhận collection đầu vào.
2. Tạo iterator từ collection đầu vào bằng cách sử dụng hàm
iter().
3. Sử dụng các phương pháp khác nhau để lặp qua các phần
tử của iterator và in ra từng phần tử.

Code Python
# Định nghĩa một danh sách
my_collection = [1, 2, 3, 4, 5]

# Tạo một iterator từ danh sách


my_iterator = iter(my_collection)

# Phương pháp 1: Sử dụng vòng lặp for


print("Using for loop:")
for element in my_iterator:
print(element)
# Reset lại iterator cho các phương pháp khác
my_iterator = iter(my_collection)

# Phương pháp 2: Sử dụng list comprehension


print("\nUsing list comprehension:")
elements = [element for element in my_iterator]
print(elements)

# Reset lại iterator cho các phương pháp khác


my_iterator = iter(my_collection)

# Phương pháp 3: Sử dụng hàm list() để chuyển iterator thành


list
print("\nUsing list() function:")
elements = list(my_iterator)
print(elements)

# Reset lại iterator cho các phương pháp khác


my_iterator = iter(my_collection)

# Phương pháp 4: Sử dụng hàm itertools.islice() để lặp qua


các phần tử
import itertools
print("\nUsing itertools.islice():")
for element in itertools.islice(my_iterator, 0, None):
print(element)

Giải thích code


1. Định nghĩa một danh sách:

my_collection = [1, 2, 3, 4, 5]: Tạo một danh sách


chứa các phần tử từ 1 đến 5.

2. Tạo một iterator từ danh sách:

my_iterator = iter(my_collection): Sử dụng hàm iter()


để tạo một iterator từ danh sách my_collection.
3. Phương pháp 1: Sử dụng vòng lặp for:

for element in my_iterator:: Sử dụng vòng lặp for để


duyệt qua từng phần tử của iterator my_iterator.
print(element): In ra từng phần tử vừa được lấy từ iterator.

4. Reset lại iterator:

my_iterator = iter(my_collection): Tạo lại iterator từ


danh sách my_collection để sử dụng cho phương pháp
khác.

5. Phương pháp 2: Sử dụng list comprehension:

elements = [element for element in my_iterator]: Sử


dụng list comprehension để duyệt qua từng phần tử của
iterator và tạo một list mới từ các phần tử đó.
print(elements): In ra list các phần tử.

6. Reset lại iterator:

my_iterator = iter(my_collection): Tạo lại iterator từ


danh sách my_collection để sử dụng cho phương pháp
khác.

7. Phương pháp 3: Sử dụng hàm list():

elements = list(my_iterator): Chuyển đổi iterator thành


list bằng cách sử dụng hàm list().
print(elements): In ra list các phần tử.

8. Reset lại iterator:

my_iterator = iter(my_collection): Tạo lại iterator từ


danh sách my_collection để sử dụng cho phương pháp
khác.
9. Phương pháp 4: Sử dụng hàm itertools.islice():

import itertools: Import module itertools.


for element in itertools.islice(my_iterator, 0,
None)::Sử dụng hàm itertools.islice() để lặp qua các
phần tử của iterator từ vị trí bắt đầu (0) đến hết (None).
print(element): In ra từng phần tử vừa được lấy từ iterator.

Tóm tắt:
iter(): Hàm tạo iterator từ một collection.
for: Vòng lặp để duyệt qua các phần tử của iterator.
list comprehension: Cách viết tắt để tạo list mới từ các phần tử
của một iterator.
list(): Hàm chuyển đổi iterator thành list.
itertools.islice(): Hàm từ module itertools để lặp qua các
phần tử của iterator với điều kiện cắt (slice).

Chương trình này tạo một iterator từ một collection và sử dụng nhiều
phương pháp khác nhau để lặp qua và in ra các phần tử của
collection tuần tự.
185 - Viết chương trình để sử dụng
hàm next() để truy cập các phần tử
của một iterator

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để sử dụng hàm next() để
truy cập các phần tử của một iterator. Hàm next() sẽ lấy phần tử
tiếp theo từ iterator và ném ra ngoại lệ StopIteration khi không còn
phần tử nào để truy cập.

Thuật toán:
Đầu vào: Một collection bất kỳ (list, tuple, string, etc.).
Đầu ra: Các phần tử của collection được in ra tuần tự.
Các bước thực hiện:
1. Nhận collection đầu vào.
2. Tạo iterator từ collection đầu vào bằng cách sử dụng hàm
iter().
3. Sử dụng hàm next() để lặp qua các phần tử của iterator và
in ra từng phần tử cho đến khi hết phần tử.

Code Python
# Định nghĩa một danh sách
my_collection = [1, 2, 3, 4, 5]

# Tạo một iterator từ danh sách


my_iterator = iter(my_collection)

# Sử dụng vòng lặp while và hàm next() để duyệt qua các phần
tử của iterator
while True:
try:
# Lấy phần tử tiếp theo từ iterator
element = next(my_iterator)
print(element)
except StopIteration:
# Nếu không còn phần tử nào trong iterator thì thoát
khỏi vòng lặp
break

Giải thích code


1. Định nghĩa một danh sách:

my_collection = [1, 2, 3, 4, 5]: Tạo một danh sách


chứa các phần tử từ 1 đến 5.

2. Tạo một iterator từ danh sách:

my_iterator = iter(my_collection): Sử dụng hàm iter()


để tạo một iterator từ danh sách my_collection.

3. Sử dụng vòng lặp while và hàm next() để duyệt qua các


phần tử của iterator:

while True:: Tạo một vòng lặp vô hạn.


try:: Bắt đầu khối lệnh có thể phát sinh ngoại lệ.
element = next(my_iterator): Sử dụng hàm next() để
lấy phần tử tiếp theo từ iterator my_iterator.
print(element): In ra phần tử vừa lấy.
except StopIteration:: Bắt ngoại lệ StopIteration khi
iterator không còn phần tử nào để trả về.
break: Thoát khỏi vòng lặp vô hạn.
Tóm tắt:
iter(): Hàm tạo iterator từ một collection.
next(): Hàm lấy phần tử tiếp theo từ một iterator.
StopIteration: Ngoại lệ được ném ra khi không còn phần tử
nào trong iterator.
Vòng lặp while True và khối try-except để duyệt qua tất cả các
phần tử của iterator và xử lý ngoại lệ.

Chương trình này tạo một iterator từ một danh sách và sử dụng hàm
next() để duyệt qua và in ra các phần tử của danh sách tuần tự cho
đến khi hết phần tử.
186 - Viết chương trình để tạo một
iterator tùy chỉnh

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để tạo một iterator tùy chỉnh.
Điều này có nghĩa là chúng ta sẽ định nghĩa một lớp của riêng mình
để thực hiện các phương thức cần thiết để trở thành một iterator
trong Python (__iter__ và __next__).

Thuật toán:
Đầu vào: Không có đầu vào cụ thể. Chương trình sẽ tự tạo dữ
liệu.
Đầu ra: Các phần tử của iterator được in ra tuần tự.
Các bước thực hiện:
1. Định nghĩa một lớp iterator tùy chỉnh.
2. Triển khai phương thức __iter__ trả về chính đối tượng
iterator.
3. Triển khai phương thức __next__ để trả về phần tử tiếp theo
và ném ra ngoại lệ StopIteration khi không còn phần tử
nào.
4. Tạo một đối tượng của lớp iterator tùy chỉnh và sử dụng
vòng lặp for để duyệt qua các phần tử của nó.

Code Python
class CustomIterator:
def __init__(self, data):
self.data = data
self.index = 0

def __iter__(self):
return self

def __next__(self):
if self.index < len(self.data):
result = self.data[self.index]
self.index += 1
return result
else:
raise StopIteration

# Sử dụng iterator tùy chỉnh với một danh sách


my_data = [10, 20, 30, 40, 50]
my_iterator = CustomIterator(my_data)

# Duyệt qua các phần tử của iterator tùy chỉnh bằng vòng lặp
for
for element in my_iterator:
print(element)

Giải thích code


1. Định nghĩa lớp CustomIterator:

class CustomIterator:: Định nghĩa một lớp mới tên là


CustomIterator.

2. Phương thức __init__:

def __init__(self, data):: Khởi tạo đối tượng với dữ liệu


đầu vào data.
self.data = data: Lưu dữ liệu vào thuộc tính data.
self.index = 0: Khởi tạo chỉ số index để theo dõi vị trí hiện
tại trong dữ liệu.

3. Phương thức __iter__:

def __iter__(self):: Triển khai phương thức __iter__.


return self: Trả về chính đối tượng iterator để sử dụng
trong vòng lặp for.

4. Phương thức __next__:

def __next__(self):: Triển khai phương thức __next__.


if self.index < len(self.data):: Kiểm tra xem chỉ số hiện
tại có nhỏ hơn độ dài của dữ liệu không.
result = self.data[self.index]: Lấy phần tử tại vị trí
hiện tại.
self.index += 1: Tăng chỉ số hiện tại lên 1.
return result: Trả về phần tử hiện tại.
else: raise StopIteration: Ném ra ngoại lệ StopIteration
khi không còn phần tử nào.

5. Tạo đối tượng của lớp CustomIterator:

my_data = [10, 20, 30, 40, 50]: Tạo một danh sách dữ
liệu.
my_iterator = CustomIterator(my_data): Tạo một đối
tượng của lớp CustomIterator với dữ liệu my_data.

6. Duyệt qua các phần tử của iterator tùy chỉnh bằng vòng lặp
for:

for element in my_iterator:: Sử dụng vòng lặp for để


duyệt qua từng phần tử của iterator my_iterator.
print(element): In ra từng phần tử.

Tóm tắt:
class:Định nghĩa một lớp trong Python.
__init__: Phương thức khởi tạo đối tượng.
__iter__: Phương thức trả về chính đối tượng iterator.
__next__: Phương thức trả về phần tử tiếp theo và ném ra ngoại
lệ StopIteration.
StopIteration: Ngoại lệ được ném ra khi không còn phần tử
nào trong iterator.
Vòng lặp for: Sử dụng để duyệt qua các phần tử của iterator.

Chương trình này định nghĩa một lớp iterator tùy chỉnh để duyệt qua
các phần tử của một danh sách và in ra từng phần tử.
187 - Viết chương trình để sử dụng
itertools để tạo ra một permutation

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để sử dụng thư viện itertools
của Python để tạo ra một permutation. Permutation là một hoán vị
của các phần tử trong một collection.

Thuật toán:
Đầu vào: Một collection bất kỳ (list, tuple, string, etc.).
Đầu ra: Tất cả các hoán vị của collection được in ra.
Các bước thực hiện:
1. Nhận collection đầu vào.
2. Sử dụng hàm itertools.permutations() để tạo ra tất cả các
hoán vị của collection.
3. Sử dụng vòng lặp để duyệt qua các hoán vị và in ra từng
hoán vị.

Code Python
import itertools

# Định nghĩa một danh sách


my_list = [1, 2, 3]

# Tạo ra các permutation từ danh sách


permutations = itertools.permutations(my_list)

# Duyệt qua các permutation và in ra từng hoán vị


for perm in permutations:
print(perm)
Giải thích code
1. Import module itertools:

import itertools: Import thư viện itertools để sử dụng


các hàm liên quan đến iterator.

2. Định nghĩa một danh sách:

my_list = [1, 2, 3]: Tạo một danh sách chứa các phần tử
1, 2, và 3.

3. Tạo ra các permutation từ danh sách:

permutations = itertools.permutations(my_list): Sử
dụng hàm itertools.permutations() để tạo ra tất cả các
hoán vị của danh sách my_list.

4. Duyệt qua các permutation và in ra từng hoán vị:

for perm in permutations:: Sử dụng vòng lặp for để duyệt


qua từng hoán vị trong iterator permutations.
print(perm): In ra từng hoán vị.

Tóm tắt:
import itertools: Import thư viện itertools để sử dụng các
hàm tạo iterator.
itertools.permutations(): Hàm tạo ra tất cả các hoán vị của
một collection.
Vòng lặp for: Sử dụng để duyệt qua các phần tử của iterator.

Chương trình này sử dụng thư viện itertools để tạo ra tất cả các
hoán vị của một danh sách và in ra từng hoán vị.
188 - Viết chương trình để sử dụng
itertools để tạo ra một combination

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để sử dụng thư viện itertools
của Python để tạo ra các combination. Combination là các tổ hợp
của các phần tử trong một collection mà không quan tâm đến thứ tự.

Thuật toán:
Đầu vào: Một collection bất kỳ (list, tuple, string, etc.) và một số
nguyên r xác định độ dài của tổ hợp.
Đầu ra: Tất cả các tổ hợp có độ dài r của collection được in ra.
Các bước thực hiện:
1. Nhận collection đầu vào và giá trị r.
2. Sử dụng hàm itertools.combinations() để tạo ra tất cả các
tổ hợp có độ dài r của collection.
3. Sử dụng vòng lặp để duyệt qua các tổ hợp và in ra từng tổ
hợp.

Code Python
import itertools

# Định nghĩa một danh sách


my_list = [1, 2, 3, 4]

# Định nghĩa độ dài của tổ hợp


r = 2

# Tạo ra các combination từ danh sách


combinations = itertools.combinations(my_list, r)
# Duyệt qua các combination và in ra từng tổ hợp
for combo in combinations:
print(combo)

Giải thích code


1. Import module itertools:

import itertools: Import thư viện itertools để sử dụng


các hàm liên quan đến iterator.

2. Định nghĩa một danh sách:

my_list = [1, 2, 3, 4]: Tạo một danh sách chứa các phần
tử 1, 2, 3, và 4.

3. Định nghĩa độ dài của tổ hợp:

r = 2: Xác định độ dài của tổ hợp là 2.

4. Tạo ra các combination từ danh sách:

combinations = itertools.combinations(my_list, r): Sử


dụng hàm itertools.combinations() để tạo ra tất cả các tổ
hợp có độ dài r của danh sách my_list.

5. Duyệt qua các combination và in ra từng tổ hợp:

for combo in combinations:: Sử dụng vòng lặp for để


duyệt qua từng tổ hợp trong iterator combinations.
print(combo): In ra từng tổ hợp.
Tóm tắt:
import itertools: Import thư viện itertools để sử dụng các
hàm tạo iterator.
itertools.combinations(): Hàm tạo ra tất cả các tổ hợp có độ
dài r của một collection.
Vòng lặp for: Sử dụng để duyệt qua các phần tử của iterator.

Chương trình này sử dụng thư viện itertools để tạo ra tất cả các tổ
hợp có độ dài r của một danh sách và in ra từng tổ hợp.
189 - Viết chương trình để sử dụng
itertools để tạo ra một product

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để sử dụng thư viện itertools
của Python để tạo ra các product (phép nhân Cartesian). Product là
tất cả các kết hợp có thể có của các phần tử trong các collection
khác nhau.

Thuật toán:
Đầu vào: Hai hoặc nhiều collection (list, tuple, string, etc.).
Đầu ra: Tất cả các kết hợp có thể có của các phần tử từ các
collection được in ra.
Các bước thực hiện:
1. Nhận các collection đầu vào.
2. Sử dụng hàm itertools.product() để tạo ra tất cả các kết
hợp có thể có từ các collection.
3. Sử dụng vòng lặp để duyệt qua các kết hợp và in ra từng kết
hợp.

Code Python
import itertools

# Định nghĩa các collection


list1 = [1, 2]
list2 = ['a', 'b']
list3 = ['x', 'y']

# Tạo ra các product từ các collection


product_result = itertools.product(list1, list2, list3)
# Duyệt qua các product và in ra từng kết hợp
for combo in product_result:
print(combo)

Giải thích code


1. Import module itertools:

import itertools: Import thư viện itertools để sử dụng


các hàm liên quan đến iterator.

2. Định nghĩa các collection:

list1 = [1, 2]: Tạo một danh sách chứa các phần tử 1 và
2.
list2 = ['a', 'b']: Tạo một danh sách chứa các phần tử
‘a’ và ‘b’.
list3 = ['x', 'y']: Tạo một danh sách chứa các phần tử
‘x’ và ‘y’.

3. Tạo ra các product từ các collection:

product_result = itertools.product(list1, list2,


list3): Sử dụng hàm itertools.product() để tạo ra tất cả
các kết hợp có thể có từ các danh sách list1, list2, và
list3.

4. Duyệt qua các product và in ra từng kết hợp:

for combo in product_result:: Sử dụng vòng lặp for để


duyệt qua từng kết hợp trong iterator product_result.
print(combo): In ra từng kết hợp.
Tóm tắt:
import itertools: Import thư viện itertools để sử dụng các
hàm tạo iterator.
itertools.product(): Hàm tạo ra tất cả các kết hợp có thể có từ
các collection.
Vòng lặp for: Sử dụng để duyệt qua các phần tử của iterator.

Chương trình này sử dụng thư viện itertools để tạo ra tất cả các
kết hợp có thể có từ ba danh sách và in ra từng kết hợp.
190 - Viết chương trình để sử dụng
itertools để tạo ra một
combinations_with_replacement

Giải thích đề bài


Đề bài yêu cầu viết một chương trình để sử dụng thư viện itertools
của Python để tạo ra các combinations with replacement (tổ hợp
lặp). Combinations with replacement là các tổ hợp mà cho phép lặp
lại các phần tử.

Thuật toán:
Đầu vào: Một collection bất kỳ (list, tuple, string, etc.) và một số
nguyên r xác định độ dài của tổ hợp.
Đầu ra: Tất cả các tổ hợp có lặp lại có độ dài r của collection
được in ra.
Các bước thực hiện:
1. Nhận collection đầu vào và giá trị r.
2. Sử dụng hàm itertools.combinations_with_replacement()
để tạo ra tất cả các tổ hợp có lặp lại có độ dài r của
collection.
3. Sử dụng vòng lặp để duyệt qua các tổ hợp và in ra từng tổ
hợp.

Code Python
import itertools

# Định nghĩa một danh sách


my_list = [1, 2, 3]
# Định nghĩa độ dài của tổ hợp
r = 2

# Tạo ra các combinations with replacement từ danh sách


combinations_with_replacement =
itertools.combinations_with_replacement(my_list, r)

# Duyệt qua các combinations with replacement và in ra từng


tổ hợp
for combo in combinations_with_replacement:
print(combo)

Giải thích code


1. Import module itertools:

import itertools: Import thư viện itertools để sử dụng


các hàm liên quan đến iterator.

2. Định nghĩa một danh sách:

my_list = [1, 2, 3]: Tạo một danh sách chứa các phần tử
1, 2, và 3.

3. Định nghĩa độ dài của tổ hợp:

r = 2: Xác định độ dài của tổ hợp là 2.

4. Tạo ra các combinations with replacement từ danh sách:

combinations_with_replacement =
itertools.combinations_with_replacement(my_list, r):
Sử dụng hàm itertools.combinations_with_replacement()
để tạo ra tất cả các tổ hợp có lặp lại có độ dài r của danh
sách my_list.
5. Duyệt qua các combinations with replacement và in ra từng
tổ hợp:

for combo in combinations_with_replacement:: Sử dụng


vòng lặp for để duyệt qua từng tổ hợp trong iterator
combinations_with_replacement.
print(combo): In ra từng tổ hợp.

Tóm tắt:
import itertools: Import thư viện itertools để sử dụng các
hàm tạo iterator.
itertools.combinations_with_replacement(): Hàm tạo ra tất cả
các tổ hợp có lặp lại có độ dài r của một collection.
Vòng lặp for: Sử dụng để duyệt qua các phần tử của iterator.

Chương trình này sử dụng thư viện itertools để tạo ra tất cả các tổ
hợp có lặp lại có độ dài r của một danh sách và in ra từng tổ hợp.
Chương 20 : Generator
191. Viết chương trình để tạo một generator sinh ra các số nguyên từ
1 đến n.
192. Viết chương trình để tạo một generator sinh ra các số Fibonacci.
193. Viết chương trình để tạo một generator sinh ra các số nguyên tố.
194. Viết chương trình để tạo một generator sinh ra các số chẵn.
195. Viết chương trình để tạo một generator sinh ra các số lẻ.
196. Viết chương trình để tạo một generator sinh ra các chuỗi từ một
danh sách các từ.
197. Viết chương trình để tạo một generator sinh ra các chuỗi hoàn
hảo.
198. Viết chương trình để tạo một generator sinh ra các số
Armstrong.
199. Viết chương trình để tạo một generator sinh ra các số hoàn hảo.
200. Viết chương trình để tạo một generator sinh ra các số chính
phương.
191 - Viết chương trình để tạo một
generator sinh ra các số nguyên từ 1
đến n

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các số nguyên từ 1 đến n.

Generator
Trong Python, generator là một loại đặc biệt của iterator. Thay vì tạo
ra tất cả các giá trị ngay từ đầu và lưu chúng trong bộ nhớ như list,
generator tạo ra các giá trị một cách lười biếng, tức là chỉ khi cần.

Generator được tạo ra bằng cách sử dụng từ khóa yield thay vì


return trong hàm. Khi gọi hàm tạo generator, nó không thực thi ngay
lập tức mà trả về một đối tượng generator. Khi bạn lặp qua đối
tượng generator, nó sẽ thực thi hàm cho đến khi gặp từ khóa yield,
sau đó nó sẽ trả về giá trị hiện tại và tạm dừng. Lần lặp tiếp theo sẽ
tiếp tục từ điểm dừng cuối cùng cho đến khi hết giá trị hoặc gặp
StopIteration.

Ví dụ về một generator:
def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1

for number in count_up_to(5):


print(number) # Output: 1, 2, 3, 4, 5
Trong ví dụ trên, count_up_to là một generator. Khi bạn lặp qua nó
bằng vòng lặp for, nó sẽ in ra các số từ 1 đến 5.

Thuật toán:
Đầu vào:

Một số nguyên dương n.

Đầu ra:

Một generator sinh ra các số nguyên từ 1 đến n.

Các bước thực hiện:

1. Định nghĩa một hàm generator có tên generate_numbers.


2. Trong hàm này, sử dụng vòng lặp for để lặp qua các số từ 1
đến n.
3. Sử dụng từ khóa yield để trả về từng số nguyên trong mỗi
lần lặp.

Code Python
def generate_numbers(n):
for i in range(1, n + 1):
yield i

# Sử dụng generator
n = 10 # Ví dụ với n = 10
for number in generate_numbers(n):
print(number)

Giải thích code


1. Định nghĩa hàm generate_numbers:
Hàm này nhận một tham số đầu vào n, là số nguyên dương
lớn nhất mà generator sẽ sinh ra.
2. Sử dụng vòng lặp for:
Vòng lặp chạy từ 1 đến n.
Trong mỗi lần lặp, yield trả về giá trị của i, sau đó tạm dừng
hàm và giữ trạng thái hiện tại.
3. Sử dụng generator:
Khởi tạo generator bằng cách gọi hàm generate_numbers(n).
Duyệt qua các giá trị do generator sinh ra bằng vòng lặp for
và in ra từng giá trị.

Tóm tắt:
Định nghĩa hàm với từ khóa yield.
Sử dụng vòng lặp for để sinh ra các giá trị từ 1 đến n.
Generator giúp tiết kiệm bộ nhớ bằng cách không lưu trữ toàn
bộ giá trị trong bộ nhớ.

Chương trình trên tạo ra một generator để sinh ra các số nguyên từ


1 đến n và in ra từng số một.
192 - Viết chương trình để tạo một
generator sinh ra các số Fibonacci

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các số Fibonacci. Số Fibonacci là một dãy số bắt đầu từ 0 và
1, mỗi số tiếp theo trong dãy là tổng của hai số trước đó.

Thuật toán:
Đầu vào:

Một số nguyên dương n, đại diện cho số lượng phần tử của


dãy Fibonacci cần sinh ra.

Đầu ra:

Một generator sinh ra n số Fibonacci đầu tiên.

Các bước thực hiện:

1. Định nghĩa một hàm generator có tên fibonacci.


2. Khởi tạo hai biến a và b lần lượt bằng 0 và 1.
3. Sử dụng vòng lặp để sinh ra n số Fibonacci.
4. Trong mỗi lần lặp, yield giá trị của a, sau đó cập nhật a và b.

Code Python
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b

# Sử dụng generator
n = 10 # Ví dụ với n = 10
for number in fibonacci(n):
print(number)

Giải thích code


1. Định nghĩa hàm fibonacci:
Hàm này nhận một tham số đầu vào n, là số lượng phần tử
của dãy Fibonacci cần sinh ra.
2. Khởi tạo biến a và b:
a được khởi tạo bằng 0 và b bằng 1, đại diện cho hai số đầu
tiên của dãy Fibonacci.
3. Sử dụng vòng lặp for:
Vòng lặp chạy n lần, với _ là biến đếm không sử dụng.
Trong mỗi lần lặp, yield giá trị của a, sau đó cập nhật a và b
bằng các giá trị mới: a = b và b = a + b.

Tóm tắt:
Định nghĩa hàm với từ khóa yield để tạo ra một generator.
Khởi tạo hai biến đầu tiên của dãy Fibonacci.
Sử dụng vòng lặp for để sinh ra n số Fibonacci và cập nhật giá
trị của a và b trong mỗi lần lặp.

Chương trình trên tạo ra một generator để sinh ra n số Fibonacci


đầu tiên và in ra từng số một.
193 - Viết chương trình để tạo một
generator sinh ra các số nguyên tố

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các số nguyên tố. Số nguyên tố là số tự nhiên lớn hơn 1 và
chỉ chia hết cho 1 và chính nó.

Thuật toán:
Đầu vào:

Một số nguyên dương n, đại diện cho số lượng số nguyên tố


cần sinh ra.

Đầu ra:

Một generator sinh ra n số nguyên tố đầu tiên.

Các bước thực hiện:

1. Định nghĩa một hàm generator có tên prime_numbers.


2. Khởi tạo một biến count để đếm số lượng số nguyên tố đã
sinh ra và một biến num để kiểm tra các số từ 2 trở đi.
3. Sử dụng vòng lặp vô hạn để kiểm tra từng số xem có phải số
nguyên tố không.
4. Nếu số đó là số nguyên tố, yield số đó và tăng count.
5. Dừng vòng lặp khi đã sinh ra đủ n số nguyên tố.
Code Python
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True

def prime_numbers(n):
count = 0
num = 2
while count < n:
if is_prime(num):
yield num
count += 1
num += 1

# Sử dụng generator
n = 10 # Ví dụ với n = 10
for number in prime_numbers(n):
print(number)

Giải thích code


1. Định nghĩa hàm is_prime:

Hàm này kiểm tra xem một số num có phải là số nguyên tố


hay không.
Nếu num nhỏ hơn 2, trả về False.
Kiểm tra các ước số từ 2 đến căn bậc hai của num. Nếu tìm
thấy ước số, trả về False.
Nếu không tìm thấy ước số nào, trả về True.

2. Định nghĩa hàm prime_numbers:


Hàm này nhận một tham số đầu vào n, là số lượng số
nguyên tố cần sinh ra.
Khởi tạo count bằng 0 để đếm số lượng số nguyên tố đã
sinh ra và num bằng 2 để bắt đầu kiểm tra các số từ 2.
Sử dụng vòng lặp while để tiếp tục sinh số nguyên tố cho
đến khi count bằng n.
Trong mỗi lần lặp, nếu num là số nguyên tố (is_prime(num)
trả về True), yield số đó và tăng count.
Tăng num sau mỗi lần lặp.

Tóm tắt:
Định nghĩa hàm kiểm tra số nguyên tố.
Định nghĩa generator để sinh ra n số nguyên tố.
Sử dụng vòng lặp và kiểm tra số nguyên tố để sinh ra các giá trị.

Chương trình trên tạo ra một generator để sinh ra n số nguyên tố


đầu tiên và in ra từng số một.
194 - Viết chương trình để tạo một
generator sinh ra các số chẵn

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các số chẵn. Số chẵn là số nguyên chia hết cho 2.

Thuật toán:
Đầu vào:

Một số nguyên dương n, đại diện cho số lượng số chẵn cần


sinh ra.

Đầu ra:

Một generator sinh ra n số chẵn đầu tiên.

Các bước thực hiện:

1. Định nghĩa một hàm generator có tên even_numbers.


2. Khởi tạo một biến count để đếm số lượng số chẵn đã sinh ra
và một biến num để bắt đầu từ số 2.
3. Sử dụng vòng lặp để sinh ra n số chẵn.
4. Trong mỗi lần lặp, yield giá trị của num (số chẵn hiện tại),
sau đó tăng num thêm 2 để lấy số chẵn tiếp theo và tăng
count.

Code Python
def even_numbers(n):
count = 0
num = 2
while count < n:
yield num
count += 1
num += 2

# Sử dụng generator
n = 10 # Ví dụ với n = 10
for number in even_numbers(n):
print(number)

Giải thích code


1. Định nghĩa hàm even_numbers:
Hàm này nhận một tham số đầu vào n, là số lượng số chẵn
cần sinh ra.
Khởi tạo count bằng 0 để đếm số lượng số chẵn đã sinh ra
và num bằng 2 để bắt đầu từ số chẵn đầu tiên.
2. Sử dụng vòng lặp while:
Vòng lặp chạy cho đến khi count bằng n.
Trong mỗi lần lặp, yield giá trị của num (số chẵn hiện tại).
Tăng count thêm 1 và num thêm 2 để lấy số chẵn tiếp theo.

Tóm tắt:
Định nghĩa hàm với từ khóa yield để tạo ra một generator.
Khởi tạo biến đếm số lượng số chẵn đã sinh ra và biến bắt đầu
từ số chẵn đầu tiên.
Sử dụng vòng lặp để sinh ra n số chẵn và cập nhật giá trị của số
chẵn trong mỗi lần lặp.

Chương trình trên tạo ra một generator để sinh ra n số chẵn đầu tiên
và in ra từng số một.
195 - Viết chương trình để tạo một
generator sinh ra các số lẻ

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các số lẻ. Số lẻ là số nguyên không chia hết cho 2. Sau đó,
duyệt qua các phần tử sinh ra bằng hàm next.

Bản chất Generator


1. Tiết kiệm bộ nhớ: Generator không tạo ra tất cả các giá trị ngay
từ đầu và lưu chúng trong bộ nhớ như list, mà chỉ tạo ra các giá
trị khi cần. Điều này giúp tiết kiệm bộ nhớ, đặc biệt khi làm việc
với các chuỗi dữ liệu lớn.

2. Là một iterator: Generator là một loại đặc biệt của iterator. Bạn
có thể sử dụng hàm next() để lấy ra từng giá trị từ generator, và
khi hết giá trị, nó sẽ ném ra ngoại lệ StopIteration. Bạn cũng có
thể lặp qua generator bằng vòng lặp for.

Ví dụ về việc sử dụng hàm next() với generator:


def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1

# Create a generator
numbers = count_up_to(5)

# Use next() to get values from the generator


print(next(numbers)) # Output: 1
print(next(numbers)) # Output: 2
# ... and so on until 5

Thuật toán:
Đầu vào:

Một số nguyên dương n, đại diện cho số lượng số lẻ cần


sinh ra.

Đầu ra:

Một generator sinh ra n số lẻ đầu tiên.

Các bước thực hiện:

1. Định nghĩa một hàm generator có tên odd_numbers.


2. Khởi tạo một biến count để đếm số lượng số lẻ đã sinh ra và
một biến num để bắt đầu từ số 1.
3. Sử dụng vòng lặp để sinh ra n số lẻ.
4. Trong mỗi lần lặp, yield giá trị của num (số lẻ hiện tại), sau
đó tăng num thêm 2 để lấy số lẻ tiếp theo và tăng count.

Code Python
def odd_numbers(n):
count = 0
num = 1
while count < n:
yield num
count += 1
num += 2

# Sử dụng generator và duyệt các phần tử bằng next


n = 10 # Ví dụ với n = 10
odd_gen = odd_numbers(n)
# Duyệt qua các phần tử bằng next
for _ in range(n):
print(next(odd_gen))

Giải thích code


1. Định nghĩa hàm odd_numbers:
Hàm này nhận một tham số đầu vào n, là số lượng số lẻ cần
sinh ra.
Khởi tạo count bằng 0 để đếm số lượng số lẻ đã sinh ra và
num bằng 1 để bắt đầu từ số lẻ đầu tiên.
2. Sử dụng vòng lặp while:
Vòng lặp chạy cho đến khi count bằng n.
Trong mỗi lần lặp, yield giá trị của num (số lẻ hiện tại).
Tăng count thêm 1 và num thêm 2 để lấy số lẻ tiếp theo.
3. Khởi tạo generator:
Khởi tạo generator bằng cách gọi hàm odd_numbers(n).
4. Duyệt qua các phần tử bằng next:
Sử dụng vòng lặp for để gọi next trên generator và in ra
từng giá trị.

Tóm tắt:
Định nghĩa hàm với từ khóa yield để tạo ra một generator.
Khởi tạo biến đếm số lượng số lẻ đã sinh ra và biến bắt đầu từ
số lẻ đầu tiên.
Sử dụng vòng lặp để sinh ra n số lẻ và cập nhật giá trị của số lẻ
trong mỗi lần lặp.
Khởi tạo generator và duyệt qua các phần tử bằng next.

Chương trình trên tạo ra một generator để sinh ra n số lẻ đầu tiên và


in ra từng số một bằng cách sử dụng hàm next.
196 - Viết chương trình để tạo một
generator sinh ra các chuỗi từ một
danh sách các từ

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các chuỗi từ một danh sách các từ. Mục tiêu là tạo một
generator có thể duyệt qua từng từ trong danh sách và trả về từng
từ một.

Thuật toán:
Đầu vào:

Một danh sách các từ.

Đầu ra:

Một generator sinh ra từng từ trong danh sách.

Các bước thực hiện:

1. Định nghĩa một hàm generator có tên word_generator.


2. Duyệt qua từng từ trong danh sách bằng vòng lặp for.
3. Trong mỗi lần lặp, sử dụng yield để trả về từ hiện tại.

Code Python
def word_generator(word_list):
for word in word_list:
yield word
# Sử dụng generator
word_list = ["apple", "banana", "cherry", "date",
"elderberry"]
word_gen = word_generator(word_list)

# Duyệt qua các phần tử bằng next


for _ in range(len(word_list)):
print(next(word_gen))

Giải thích code


1. Định nghĩa hàm word_generator:

Hàm này nhận một tham số đầu vào word_list, là một danh
sách các từ.
Sử dụng vòng lặp for để duyệt qua từng từ trong danh sách
word_list.
Trong mỗi lần lặp, yield trả về từ hiện tại.

2. Khởi tạo generator:

Khởi tạo generator bằng cách gọi hàm


word_generator(word_list).

3. Duyệt qua các phần tử bằng next:

Sử dụng vòng lặp for để gọi next trên generator và in ra


từng từ trong danh sách word_list.

Tóm tắt:
Định nghĩa hàm với từ khóa yield để tạo ra một generator.
Sử dụng vòng lặp for để duyệt qua từng từ trong danh sách và
trả về từng từ một.
Khởi tạo generator và duyệt qua các phần tử bằng next.
Chương trình trên tạo ra một generator để sinh ra từng từ trong
danh sách word_list và in ra từng từ một bằng cách sử dụng hàm
next.
197 - Viết chương trình để tạo một
generator sinh ra các chuỗi hoàn hảo

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các chuỗi hoàn hảo. Tuy nhiên, vì khái niệm “chuỗi hoàn hảo”
không được định nghĩa cụ thể trong bài, chúng ta sẽ sử dụng một
định nghĩa thông dụng: chuỗi hoàn hảo là một chuỗi đối xứng, tức là
chuỗi đọc từ trái sang phải cũng giống như đọc từ phải sang trái.

Thuật toán:
Đầu vào:

Một danh sách các chuỗi.

Đầu ra:

Một generator sinh ra các chuỗi đối xứng (hoàn hảo).

Các bước thực hiện:

1. Định nghĩa một hàm generator có tên perfect_strings.


2. Duyệt qua từng chuỗi trong danh sách bằng vòng lặp for.
3. Kiểm tra xem chuỗi đó có đối xứng không.
4. Nếu đối xứng, sử dụng yield để trả về chuỗi đó.

Code Python
def is_palindrome(s):
return s == s[::-1]
def perfect_strings(strings):
for s in strings:
if is_palindrome(s):
yield s

# Sử dụng generator
string_list = ["level", "world", "radar", "python", "madam",
"example"]
perfect_gen = perfect_strings(string_list)

# Duyệt qua các phần tử bằng next


try:
while True:
print(next(perfect_gen))
except StopIteration:
pass

Giải thích code


1. Định nghĩa hàm is_palindrome:

Hàm này kiểm tra xem một chuỗi s có phải là chuỗi đối xứng
không.
Sử dụng cú pháp s[::-1] để đảo ngược chuỗi và so sánh
với chuỗi ban đầu.

2. Định nghĩa hàm perfect_strings:

Hàm này nhận một tham số đầu vào strings, là một danh
sách các chuỗi.
Sử dụng vòng lặp for để duyệt qua từng chuỗi trong danh
sách strings.
Trong mỗi lần lặp, kiểm tra xem chuỗi hiện tại có phải là
chuỗi đối xứng bằng cách gọi hàm is_palindrome(s).
Nếu đúng, yield trả về chuỗi đó.

3. Khởi tạo generator:


Khởi tạo generator bằng cách gọi hàm
perfect_strings(string_list).

4. Duyệt qua các phần tử bằng next:

Sử dụng vòng lặp while True để gọi next trên generator và


in ra từng chuỗi đối xứng.
Khi không còn phần tử nào để trả về, StopIteration sẽ
được ném ra và vòng lặp kết thúc.

Tóm tắt:
Định nghĩa hàm kiểm tra chuỗi đối xứng.
Định nghĩa generator để sinh ra các chuỗi đối xứng từ danh
sách.
Sử dụng vòng lặp để kiểm tra và trả về các chuỗi đối xứng.
Khởi tạo generator và duyệt qua các phần tử bằng next.

Chương trình trên tạo ra một generator để sinh ra các chuỗi đối
xứng từ danh sách string_list và in ra từng chuỗi một bằng cách
sử dụng hàm next.
198 - Viết chương trình để tạo một
generator sinh ra các số Armstrong

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các số Armstrong. Số Armstrong (hay còn gọi là số
Narcissistic) là số nguyên mà tổng của các chữ số được nâng lên
lũy thừa bậc n (trong đó n là số chữ số) bằng chính số đó.

Ví dụ:

Số 153 là một số Armstrong vì 1^3 + 5^3 + 3^3 = 153.


Số 9474 là một số Armstrong vì 9^4 + 4^4 + 7^4 + 4^4 = 9474.

Thuật toán:
Đầu vào:

Một số nguyên dương n, đại diện cho số lượng số Armstrong


cần sinh ra.

Đầu ra:

Một generator sinh ra n số Armstrong đầu tiên.

Các bước thực hiện:

1. Định nghĩa một hàm để kiểm tra xem một số có phải là số


Armstrong không.
2. Định nghĩa một hàm generator có tên armstrong_numbers.
3. Khởi tạo một biến count để đếm số lượng số Armstrong đã
sinh ra và một biến num để bắt đầu từ số 1.
4. Sử dụng vòng lặp vô hạn để kiểm tra từng số xem có phải là
số Armstrong không.
5. Nếu đúng, yield số đó và tăng count.
6. Dừng vòng lặp khi đã sinh ra đủ n số Armstrong.

Code Python
def is_armstrong(num):
num_str = str(num)
power = len(num_str)
total = sum(int(digit) ** power for digit in num_str)
return total == num

def armstrong_numbers(n):
count = 0
num = 1
while count < n:
if is_armstrong(num):
yield num
count += 1
num += 1

# Sử dụng generator
n = 10 # Ví dụ với n = 10
armstrong_gen = armstrong_numbers(n)

# Duyệt qua các phần tử bằng next


for _ in range(n):
print(next(armstrong_gen))

Giải thích code


1. Định nghĩa hàm is_armstrong:

Hàm này kiểm tra xem một số num có phải là số Armstrong


không.
Chuyển số num thành chuỗi để dễ dàng duyệt qua từng chữ
số.
Tính power, là số chữ số của num.
Tính tổng của các chữ số được nâng lên lũy thừa bậc power.
So sánh tổng đó với số ban đầu để xác định xem số đó có
phải là số Armstrong không.

2. Định nghĩa hàm armstrong_numbers:

Hàm này nhận một tham số đầu vào n, là số lượng số


Armstrong cần sinh ra.
Khởi tạo count bằng 0 để đếm số lượng số Armstrong đã
sinh ra và num bằng 1 để bắt đầu kiểm tra từ số 1.
Sử dụng vòng lặp vô hạn để kiểm tra từng số xem có phải là
số Armstrong không.
Trong mỗi lần lặp, nếu num là số Armstrong
(is_armstrong(num) trả về True), yield số đó và tăng count.
Tăng num sau mỗi lần lặp.

3. Khởi tạo generator:

Khởi tạo generator bằng cách gọi hàm


armstrong_numbers(n).

4. Duyệt qua các phần tử bằng next:

Sử dụng vòng lặp for để gọi next trên generator và in ra


từng số Armstrong.

Tóm tắt:
Định nghĩa hàm kiểm tra số Armstrong.
Định nghĩa generator để sinh ra n số Armstrong.
Sử dụng vòng lặp để kiểm tra và trả về các số Armstrong.
Khởi tạo generator và duyệt qua các phần tử bằng next.
Chương trình trên tạo ra một generator để sinh ra n số Armstrong
đầu tiên và in ra từng số một bằng cách sử dụng hàm next.
199 - Viết chương trình để tạo một
generator sinh ra các số hoàn hảo

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một generator
sinh ra các số hoàn hảo. Số hoàn hảo là số nguyên dương mà tổng
của tất cả các ước số dương đúng của nó (ngoại trừ chính nó) bằng
chính số đó.

Ví dụ:

Số 6 là một số hoàn hảo vì các ước số của nó là 1, 2, 3 và 1 +


2 + 3 = 6.
Số 28 là một số hoàn hảo vì các ước số của nó là 1, 2, 4, 7,
14 và 1 + 2 + 4 + 7 + 14 = 28.

Thuật toán:
Đầu vào:

Một số nguyên dương n, đại diện cho số lượng số hoàn hảo


cần sinh ra.

Đầu ra:

Một generator sinh ra n số hoàn hảo đầu tiên.

Các bước thực hiện:

1. Định nghĩa một hàm để kiểm tra xem một số có phải là số


hoàn hảo không.
2. Định nghĩa một hàm generator có tên perfect_numbers.
3. Khởi tạo một biến count để đếm số lượng số hoàn hảo đã
sinh ra và một biến num để bắt đầu từ số 2.
4. Sử dụng vòng lặp vô hạn để kiểm tra từng số xem có phải là
số hoàn hảo không.
5. Nếu đúng, yield số đó và tăng count.
6. Dừng vòng lặp khi đã sinh ra đủ n số hoàn hảo.

Code Python
def is_perfect(num):
if num < 2:
return False
divisors_sum = sum(i for i in range(1, num) if num % i ==
0)
return divisors_sum == num

def perfect_numbers(n):
count = 0
num = 2
while count < n:
if is_perfect(num):
yield num
count += 1
num += 1

# Sử dụng generator
n = 3 # Ví dụ với n = 3
perfect_gen = perfect_numbers(n)

# Duyệt qua các phần tử bằng next


for _ in range(n):
print(next(perfect_gen))

Giải thích code


1. Định nghĩa hàm is_perfect:
Hàm này kiểm tra xem một số num có phải là số hoàn hảo
không.
Nếu num nhỏ hơn 2, trả về False.
Tính tổng của các ước số dương của num bằng cách duyệt
qua các số từ 1 đến num - 1.
So sánh tổng các ước số với num để xác định xem số đó có
phải là số hoàn hảo không.

2. Định nghĩa hàm perfect_numbers:

Hàm này nhận một tham số đầu vào n, là số lượng số hoàn


hảo cần sinh ra.
Khởi tạo count bằng 0 để đếm số lượng số hoàn hảo đã sinh
ra và num bằng 2 để bắt đầu kiểm tra từ số 2.
Sử dụng vòng lặp vô hạn để kiểm tra từng số xem có phải là
số hoàn hảo không.
Trong mỗi lần lặp, nếu num là số hoàn hảo (is_perfect(num)
trả về True), yield số đó và tăng count.
Tăng num sau mỗi lần lặp.

3. Khởi tạo generator:

Khởi tạo generator bằng cách gọi hàm perfect_numbers(n).

4. Duyệt qua các phần tử bằng next:

Sử dụng vòng lặp for để gọi next trên generator và in ra


từng số hoàn hảo.

Tóm tắt:
Định nghĩa hàm kiểm tra số hoàn hảo.
Định nghĩa generator để sinh ra n số hoàn hảo.
Sử dụng vòng lặp để kiểm tra và trả về các số hoàn hảo.
Khởi tạo generator và duyệt qua các phần tử bằng next.
Chương trình trên tạo ra một generator để sinh ra n số hoàn hảo đầu
tiên và in ra từng số một bằng cách sử dụng hàm next.
200 - Viết chương trình để tạo một
generator sinh ra các số chính
phương

Giải thích đề bài


Đề bài yêu cầu chúng ta viết một chương trình Python để tạo một
generator sinh ra các số chính phương.

Thuật toán:

Đầu vào
Một số nguyên n

Đầu ra
Một generator sinh ra các số chính phương từ 1 đến n

Các bước thực hiện


1. Tạo một hàm generator nhận vào một số nguyên n.
2. Trong hàm generator, lặp từ 1 đến n và sử dụng từ khóa yield
để trả về bình phương của mỗi số.

Code Python
def square_numbers(n):
for i in range(1, n+1):
yield i * i
# Use the generator
for number in square_numbers(5):
print(number) # Output: 1, 4, 9, 16, 25

Giải thích code


1. Tạo một hàm generator square_numbers nhận vào một số
nguyên n. Trong hàm này, lặp từ 1 đến n và sử dụng từ khóa
yield để trả về bình phương của mỗi số.
2. Sử dụng vòng lặp for để lặp qua generator square_numbers(5)
và in ra mỗi số chính phương.

Tóm tắt:
Generator trong Python là một loại đặc biệt của iterator. Thay vì
tạo ra tất cả các giá trị ngay từ đầu và lưu chúng trong bộ nhớ
như list, generator tạo ra các giá trị một cách lười biếng, tức là
chỉ khi cần.
Bạn có thể tạo một generator bằng cách sử dụng từ khóa yield
trong hàm.

Chương trình này minh họa cách tạo một generator sinh ra các số
chính phương từ 1 đến n trong Python.
Chương 21 : Vẽ đồ thị
201. Viết chương trình để vẽ đồ thị đường bằng Matplotlib.
202. Viết chương trình để vẽ đồ thị cột bằng Matplotlib.
203. Viết chương trình để vẽ đồ thị tròn bằng Matplotlib.
204. Viết chương trình để vẽ đồ thị tán xạ bằng Matplotlib.
205. Viết chương trình để vẽ đồ thị hộp bằng Matplotlib.
206. Viết chương trình để vẽ đồ thị thanh ngang bằng Matplotlib.
207. Viết chương trình để vẽ đồ thị đường cong bằng Matplotlib.
208. Viết chương trình để vẽ đồ thị 3D bằng Matplotlib.
209. Viết chương trình để vẽ đồ thị heatmap bằng Seaborn.
210. Viết chương trình để vẽ đồ thị histogram bằng Seaborn.
201 - Viết chương trình để vẽ đồ thị
đường bằng Matplotlib

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị đường
(line plot) sử dụng thư viện Matplotlib. Chương trình sẽ hiển thị một
đồ thị đường với các dữ liệu đầu vào tùy ý.

Thuật toán:
Đầu vào:
Một danh sách các giá trị trục x.
Một danh sách các giá trị trục y tương ứng với giá trị trục x.
Đầu ra:
Một đồ thị đường thể hiện mối quan hệ giữa các giá trị x và
y.
Các bước thực hiện:
1. Cài đặt thư viện Matplotlib.
2. Khởi tạo các danh sách dữ liệu cho trục x và y.
3. Sử dụng Matplotlib để vẽ đồ thị đường dựa trên các danh
sách dữ liệu này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục x và y, lưới).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Matplotlib:
!pip install matplotlib
Pylot
pyplot là một module trong thư viện matplotlib của Python, một
thư viện mạnh mẽ dùng để vẽ đồ thị và biểu đồ.

pyplot cung cấp một giao diện lập trình có các hàm giống với
MATLAB, giúp người dùng có thể chuyển đổi từ MATLAB sang
Python một cách dễ dàng hơn. Nó giữ một trạng thái nội bộ, trong
đó nó theo dõi các thứ như hình đang được vẽ hiện tại, trục đang
hoạt động, v.v., để làm cho việc vẽ trở nên dễ dàng hơn.

Dòng import matplotlib.pyplot as plt trong mã của bạn nghĩa là


bạn đang nhập module pyplot từ thư viện matplotlib và đặt tên
ngắn gọn cho nó là plt. Sau đó, bạn có thể sử dụng plt để truy cập
các hàm và tính năng của pyplot.

Hiển thị đồ thị


Để hiển thị đồ thị mà không cần tạo cửa sổ, bạn có thể sử dụng
phương thức show() của pyplot. Phương thức này sẽ hiển thị tất cả
các hình vẽ trên cùng một cửa sổ.

Tuy nhiên, nếu bạn đang sử dụng một môi trường như Jupyter
Notebook, bạn có thể sử dụng dòng lệnh %matplotlib inline để
hiển thị đồ thị ngay trong notebook mà không cần mở cửa sổ mới.

Dưới đây là một ví dụ về cách vẽ đồ thị và hiển thị nó mà không cần


tạo cửa sổ:
import matplotlib.pyplot as plt

# Create some data


x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

# Plot the data


plt.plot(x, y)
# Show the plot
plt.show()

Trong đoạn mã trên, plt.plot(x, y) tạo một đồ thị với x và y là dữ


liệu, và plt.show() hiển thị đồ thị đó.

Code Python
import matplotlib.pyplot as plt

# Khởi tạo dữ liệu


x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# Vẽ đồ thị đường
plt.plot(x, y, marker='o')

# Thêm tiêu đề và nhãn


plt.title('Đồ thị đường đơn giản')
plt.xlabel('Trục X')
plt.ylabel('Trục Y')

# Hiển thị lưới


plt.grid(True)

# Hiển thị đồ thị


plt.show()

Giải thích code


1. Import thư viện:

import matplotlib.pyplot as plt: Import thư viện


Matplotlib với alias là plt.

2. Khởi tạo dữ liệu:


x = [1, 2, 3, 4, 5]:Danh sách các giá trị trục x.
y = [2, 3, 5, 7, 11]: Danh sách các giá trị trục y tương
ứng.

3. Vẽ đồ thị đường:

plt.plot(x, y, marker='o'): Vẽ đồ thị đường với dữ liệu từ


các danh sách x và y. Sử dụng dấu chấm tròn để đánh dấu
các điểm dữ liệu.

4. Thêm tiêu đề và nhãn:

plt.title('Đồ thị đường đơn giản'): Thêm tiêu đề cho đồ


thị.
plt.xlabel('Trục X'): Thêm nhãn cho trục x.
plt.ylabel('Trục Y'): Thêm nhãn cho trục y.

5. Hiển thị lưới:

plt.grid(True): Bật chế độ hiển thị lưới cho đồ thị để dễ


dàng quan sát các điểm.

6. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.

Bổ sung
Có thể thêm các tùy chỉnh khác như màu sắc, kiểu đường,
kích thước của dấu chấm, v.v.

Tóm tắt:
Sử dụng thư viện Matplotlib để vẽ đồ thị đường.
Khởi tạo danh sách dữ liệu cho trục x và y.
Vẽ đồ thị đường với các tùy chỉnh cơ bản như tiêu đề, nhãn trục,
và lưới.

Chương trình này giúp bạn tạo và hiển thị một đồ thị đường đơn
giản với dữ liệu tùy ý sử dụng Matplotlib.
202 - Viết chương trình để vẽ đồ thị
cột bằng Matplotlib

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị cột (bar
chart) sử dụng thư viện Matplotlib. Chương trình sẽ hiển thị một đồ
thị cột với các dữ liệu đầu vào tùy ý.

Thuật toán:
Đầu vào:
Một danh sách các giá trị trục x (tên các cột).
Một danh sách các giá trị trục y (giá trị của các cột).
Đầu ra:
Một đồ thị cột thể hiện mối quan hệ giữa các giá trị x và y.
Các bước thực hiện:
1. Cài đặt thư viện Matplotlib.
2. Khởi tạo các danh sách dữ liệu cho trục x và y.
3. Sử dụng Matplotlib để vẽ đồ thị cột dựa trên các danh sách
dữ liệu này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục x và y, lưới).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Matplotlib (nếu chưa cài
đặt):
!pip install matplotlib
Code Python
import matplotlib.pyplot as plt

# Khởi tạo dữ liệu


x = ['A', 'B', 'C', 'D', 'E']
y = [5, 7, 3, 8, 4]

# Vẽ đồ thị cột
plt.bar(x, y, color='blue')

# Thêm tiêu đề và nhãn


plt.title('Đồ thị cột đơn giản')
plt.xlabel('Danh mục')
plt.ylabel('Giá trị')

# Hiển thị lưới


plt.grid(True, axis='y')

# Hiển thị đồ thị


plt.show()

Giải thích code


1. Import thư viện:

import matplotlib.pyplot as plt: Import thư viện


Matplotlib với alias là plt.

2. Khởi tạo dữ liệu:

x = ['A', 'B', 'C', 'D', 'E']: Danh sách các giá trị trục x
(tên các cột).
y = [5, 7, 3, 8, 4]: Danh sách các giá trị trục y tương
ứng với các cột.

3. Vẽ đồ thị cột:
plt.bar(x, y, color='blue'): Vẽ đồ thị cột với dữ liệu từ
các danh sách x và y. Sử dụng màu xanh dương cho các
cột.

4. Thêm tiêu đề và nhãn:

plt.title('Đồ thị cột đơn giản'): Thêm tiêu đề cho đồ


thị.
plt.xlabel('Danh mục'): Thêm nhãn cho trục x.
plt.ylabel('Giá trị'): Thêm nhãn cho trục y.

5. Hiển thị lưới:

plt.grid(True, axis='y'): Bật chế độ hiển thị lưới cho trục


y để dễ dàng quan sát các giá trị.

6. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.

Bổ sung
Có thể thêm các tùy chỉnh khác như màu sắc khác, kiểu cột,
thêm chú thích, v.v.

Tóm tắt:
Sử dụng thư viện Matplotlib để vẽ đồ thị cột.
Khởi tạo danh sách dữ liệu cho trục x và y.
Vẽ đồ thị cột với các tùy chỉnh cơ bản như tiêu đề, nhãn trục, và
lưới.

Chương trình này giúp bạn tạo và hiển thị một đồ thị cột đơn giản
với dữ liệu tùy ý sử dụng Matplotlib.
203 - Viết chương trình để vẽ đồ thị
tròn bằng Matplotlib

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị tròn (pie
chart) sử dụng thư viện Matplotlib. Chương trình sẽ hiển thị một đồ
thị tròn với các dữ liệu đầu vào tùy ý.

Thuật toán:
Đầu vào:
Một danh sách các nhãn cho các phần của đồ thị tròn.
Một danh sách các giá trị tương ứng với các nhãn.
Đầu ra:
Một đồ thị tròn thể hiện tỉ lệ của các giá trị đầu vào.
Các bước thực hiện:
1. Cài đặt thư viện Matplotlib.
2. Khởi tạo các danh sách dữ liệu cho nhãn và giá trị.
3. Sử dụng Matplotlib để vẽ đồ thị tròn dựa trên các danh sách
dữ liệu này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, hiển thị phần trăm).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Matplotlib (nếu chưa cài
đặt):
!pip install matplotlib
Code Python
import matplotlib.pyplot as plt

# Khởi tạo dữ liệu


labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['gold', 'yellowgreen', 'lightcoral',
'lightskyblue']
explode = (0.1, 0, 0, 0) # Đẩy phần đầu tiên ra

# Vẽ đồ thị tròn
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=140)

# Thêm tiêu đề
plt.title('Đồ thị tròn đơn giản')

# Hiển thị đồ thị


plt.axis('equal') # Đảm bảo đồ thị tròn
plt.show()

Giải thích code


1. Import thư viện:

import matplotlib.pyplot as plt: Import thư viện


Matplotlib với alias là plt.

2. Khởi tạo dữ liệu:

labels = ['A', 'B', 'C', 'D']: Danh sách các nhãn cho
các phần của đồ thị tròn.
sizes = [15, 30, 45, 10]: Danh sách các giá trị tương ứng
với các nhãn.
colors = ['gold', 'yellowgreen', 'lightcoral',
'lightskyblue']: Danh sách màu sắc cho các phần của đồ
thị tròn.
explode = (0.1, 0, 0, 0): Đẩy phần đầu tiên ra khỏi tâm
đồ thị để làm nổi bật.

3. Vẽ đồ thị tròn:

plt.pie(sizes, explode=explode, labels=labels,


colors=colors, autopct='%1.1f%%', shadow=True,
startangle=140): Vẽ đồ thị tròn với các giá trị và nhãn đã
khởi tạo. Các phần sẽ được tô màu theo danh sách colors,
hiển thị phần trăm với định dạng autopct, có bóng
shadow=True, và bắt đầu vẽ từ góc 140 độ.

4. Thêm tiêu đề:

plt.title('Đồ thị tròn đơn giản'): Thêm tiêu đề cho đồ


thị.

5. Hiển thị đồ thị:

plt.axis('equal'): Đảm bảo tỷ lệ của trục x và y bằng nhau


để đồ thị tròn thật sự là hình tròn.
plt.show(): Hiển thị đồ thị đã vẽ.

Bổ sung
Có thể thêm các tùy chỉnh khác như màu sắc khác, thêm
chú thích, v.v.

Tóm tắt:
Sử dụng thư viện Matplotlib để vẽ đồ thị tròn.
Khởi tạo danh sách dữ liệu cho nhãn và giá trị.
Vẽ đồ thị tròn với các tùy chỉnh cơ bản như tiêu đề, hiển thị phần
trăm, và bóng đổ.
Chương trình này giúp bạn tạo và hiển thị một đồ thị tròn đơn giản
với dữ liệu tùy ý sử dụng Matplotlib.
204 - Viết chương trình để vẽ đồ thị
tán xạ bằng Matplotlib

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị tán xạ
(scatter plot) sử dụng thư viện Matplotlib. Chương trình sẽ hiển thị
một đồ thị tán xạ với các dữ liệu đầu vào tùy ý.

Đồ thị tán xạ (scatter plot)


Đồ thị tán xạ (scatter plot) là một loại biểu đồ sử dụng các điểm dữ
liệu trên một hệ trục tọa độ để hiển thị giá trị của hai biến. Mỗi điểm
trên đồ thị tán xạ đại diện cho một quan sát hoặc một mẫu dữ liệu.

Đồ thị tán xạ thường được sử dụng để xác định mối quan hệ giữa
hai biến. Nếu các điểm dữ liệu tạo thành một hình dạng hoặc một
đường xu hướng rõ ràng, điều này có thể cho thấy một mối quan hệ
giữa hai biến.

Ví dụ, bạn có thể sử dụng đồ thị tán xạ để xem xét mối quan hệ giữa
tuổi và thu nhập, giữa chiều cao và cân nặng, hoặc giữa thời gian
học và điểm số, v.v.

Thuật toán:
Đầu vào:
Một danh sách các giá trị trục x.
Một danh sách các giá trị trục y tương ứng với giá trị trục x.
Đầu ra:
Một đồ thị tán xạ thể hiện mối quan hệ giữa các giá trị x và y.
Các bước thực hiện:
1. Cài đặt thư viện Matplotlib.
2. Khởi tạo các danh sách dữ liệu cho trục x và y.
3. Sử dụng Matplotlib để vẽ đồ thị tán xạ dựa trên các danh
sách dữ liệu này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục x và y).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Matplotlib (nếu chưa cài
đặt):
!pip install matplotlib

Code Python
import matplotlib.pyplot as plt

# Khởi tạo dữ liệu


x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
sizes = [20, 50, 100, 200, 500] # Kích thước của các điểm
colors = ['red', 'blue', 'green', 'orange', 'purple'] # Màu
sắc của các điểm

# Vẽ đồ thị tán xạ
plt.scatter(x, y, s=sizes, c=colors, alpha=0.5)

# Thêm tiêu đề và nhãn


plt.title('Đồ thị tán xạ đơn giản')
plt.xlabel('Trục X')
plt.ylabel('Trục Y')

# Hiển thị đồ thị


plt.show()
Giải thích code
1. Import thư viện:

import matplotlib.pyplot as plt: Import thư viện


Matplotlib với alias là plt.

2. Khởi tạo dữ liệu:

x = [1, 2, 3, 4, 5]:Danh sách các giá trị trục x.


y = [2, 3, 5, 7, 11]: Danh sách các giá trị trục y tương
ứng.
sizes = [20, 50, 100, 200, 500]: Danh sách kích thước
của các điểm.
colors = ['red', 'blue', 'green', 'orange', 'purple']:
Danh sách màu sắc của các điểm.

3. Vẽ đồ thị tán xạ:

plt.scatter(x, y, s=sizes, c=colors, alpha=0.5): Vẽ đồ


thị tán xạ với dữ liệu từ các danh sách x và y, kích thước và
màu sắc tương ứng của các điểm. alpha=0.5 để đặt độ trong
suốt cho các điểm.

4. Thêm tiêu đề và nhãn:

plt.title('Đồ thị tán xạ đơn giản'): Thêm tiêu đề cho


đồ thị.
plt.xlabel('Trục X'): Thêm nhãn cho trục x.
plt.ylabel('Trục Y'): Thêm nhãn cho trục y.

5. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.


Bổ sung
Có thể thêm các tùy chỉnh khác như hình dạng điểm, kích
thước khác nhau, chú thích, v.v.

Tóm tắt:
Sử dụng thư viện Matplotlib để vẽ đồ thị tán xạ.
Khởi tạo danh sách dữ liệu cho trục x và y.
Vẽ đồ thị tán xạ với các tùy chỉnh cơ bản như tiêu đề, nhãn trục,
kích thước và màu sắc điểm.

Chương trình này giúp bạn tạo và hiển thị một đồ thị tán xạ đơn giản
với dữ liệu tùy ý sử dụng Matplotlib.
205 - Viết chương trình để vẽ đồ thị
hộp bằng Matplotlib

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị hộp (box
plot) sử dụng thư viện Matplotlib. Chương trình sẽ hiển thị một đồ thị
hộp với các dữ liệu đầu vào tùy ý.

Thuật toán:
Đầu vào:
Một danh sách các giá trị.
Đầu ra:
Một đồ thị hộp thể hiện phân bố dữ liệu.
Các bước thực hiện:
1. Cài đặt thư viện Matplotlib.
2. Khởi tạo danh sách dữ liệu.
3. Sử dụng Matplotlib để vẽ đồ thị hộp dựa trên danh sách dữ
liệu này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Matplotlib (nếu chưa cài
đặt):
!pip install matplotlib
Code Python
import matplotlib.pyplot as plt

# Khởi tạo dữ liệu


data = [ [7, 8, 9, 4, 3, 6, 7, 9, 6, 5],
[3, 5, 6, 2, 3, 6, 4, 6, 5, 4],
[8, 9, 7, 8, 9, 5, 8, 9, 7, 6] ]

# Vẽ đồ thị hộp
plt.boxplot(data)

# Thêm tiêu đề và nhãn


plt.title('Đồ thị hộp đơn giản')
plt.xlabel('Nhóm')
plt.ylabel('Giá trị')

# Hiển thị đồ thị


plt.show()

Giải thích code


1. Import thư viện:

import matplotlib.pyplot as plt: Import thư viện


Matplotlib với alias là plt.

2. Khởi tạo dữ liệu:

data = [[7, 8, 9, 4, 3, 6, 7, 9, 6, 5], [3, 5, 6, 2,


3, 6, 4, 6, 5, 4], [8, 9, 7, 8, 9, 5, 8, 9, 7, 6]]:
Danh sách các danh sách giá trị. Mỗi danh sách con đại diện
cho một nhóm dữ liệu riêng biệt.

3. Vẽ đồ thị hộp:

plt.boxplot(data): Vẽ đồ thị hộp với dữ liệu từ danh sách


data.
4. Thêm tiêu đề và nhãn:

plt.title('Đồ thị hộp đơn giản'): Thêm tiêu đề cho đồ


thị.
plt.xlabel('Nhóm'):Thêm nhãn cho trục x.
plt.ylabel('Giá trị'): Thêm nhãn cho trục y.

5. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.

Bổ sung
Có thể thêm các tùy chỉnh khác như màu sắc, hiển thị các
giá trị ngoại lệ, v.v.

Tóm tắt:
Sử dụng thư viện Matplotlib để vẽ đồ thị hộp.
Khởi tạo danh sách dữ liệu cho các nhóm.
Vẽ đồ thị hộp với các tùy chỉnh cơ bản như tiêu đề, nhãn trục.

Chương trình này giúp bạn tạo và hiển thị một đồ thị hộp đơn giản
với dữ liệu tùy ý sử dụng Matplotlib.
206 - Viết chương trình để vẽ đồ thị
thanh ngang bằng Matplotlib

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị thanh
ngang (horizontal bar chart) sử dụng thư viện Matplotlib. Chương
trình sẽ hiển thị một đồ thị thanh ngang với các dữ liệu đầu vào ngẫu
nhiên.

Thuật toán:
Đầu vào:
Dữ liệu ngẫu nhiên cho các thanh của đồ thị.
Đầu ra:
Một đồ thị thanh ngang thể hiện giá trị ngẫu nhiên.
Các bước thực hiện:
1. Cài đặt thư viện Matplotlib và NumPy.
2. Tạo dữ liệu ngẫu nhiên cho đồ thị.
3. Sử dụng Matplotlib để vẽ đồ thị thanh ngang dựa trên dữ liệu
này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục x và y).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Matplotlib và NumPy (nếu
chưa cài đặt):
!pip install matplotlib numpy
Code Python
import matplotlib.pyplot as plt
import numpy as np

# Khởi tạo dữ liệu ngẫu nhiên


np.random.seed(0) # Đặt seed cho tính ngẫu nhiên
categories = ['A', 'B', 'C', 'D', 'E']
values = np.random.randint(1, 100, size=len(categories))

# Vẽ đồ thị thanh ngang


plt.barh(categories, values, color='skyblue')

# Thêm tiêu đề và nhãn


plt.title('Đồ thị thanh ngang với dữ liệu ngẫu nhiên')
plt.xlabel('Giá trị')
plt.ylabel('Danh mục')

# Hiển thị đồ thị


plt.show()

Giải thích code


1. Import thư viện:

import matplotlib.pyplot as plt: Import thư viện


Matplotlib với alias là plt.
import numpy as np: Import thư viện NumPy với alias là np.

2. Khởi tạo dữ liệu ngẫu nhiên:

np.random.seed(0): Đặt seed cho tính ngẫu nhiên để đảm


bảo kết quả có thể tái lập.
categories = ['A', 'B', 'C', 'D', 'E']: Danh sách các
danh mục cho trục y.
values = np.random.randint(1, 100,
size=len(categories)): Tạo một danh sách các giá trị ngẫu
nhiên từ 1 đến 100 với số lượng bằng số danh mục.

3. Vẽ đồ thị thanh ngang:

plt.barh(categories, values, color='skyblue'): Vẽ đồ thị


thanh ngang với dữ liệu từ các danh sách categories và
values. Các thanh được tô màu xanh da trời.

4. Thêm tiêu đề và nhãn:

plt.title('Đồ thị thanh ngang với dữ liệu ngẫu


nhiên'):Thêm tiêu đề cho đồ thị.
plt.xlabel('Giá trị'): Thêm nhãn cho trục x.
plt.ylabel('Danh mục'): Thêm nhãn cho trục y.

5. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.

Bổ sung
Có thể thêm các tùy chỉnh khác như màu sắc khác, thay đổi
kiểu thanh, thêm chú thích, v.v.

Tóm tắt:
Sử dụng thư viện Matplotlib và NumPy để vẽ đồ thị thanh ngang.
Khởi tạo danh sách dữ liệu ngẫu nhiên cho các danh mục.
Vẽ đồ thị thanh ngang với các tùy chỉnh cơ bản như tiêu đề,
nhãn trục.

Chương trình này giúp bạn tạo và hiển thị một đồ thị thanh ngang
đơn giản với dữ liệu ngẫu nhiên sử dụng Matplotlib.
207 - Viết chương trình để vẽ đồ thị
đường cong bằng Matplotlib

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị đường
cong (line plot) sử dụng thư viện Matplotlib. Chương trình sẽ hiển thị
một đồ thị đường cong với các dữ liệu đầu vào tùy ý.

Thuật toán:
Đầu vào:
Một danh sách các giá trị trục x.
Một danh sách các giá trị trục y tương ứng với giá trị trục x.
Đầu ra:
Một đồ thị đường cong thể hiện mối quan hệ giữa các giá trị
x và y.
Các bước thực hiện:
1. Cài đặt thư viện Matplotlib.
2. Khởi tạo các danh sách dữ liệu cho trục x và y.
3. Sử dụng Matplotlib để vẽ đồ thị đường cong dựa trên các
danh sách dữ liệu này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục x và y).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Matplotlib (nếu chưa cài
đặt):
!pip install matplotlib
Code Python
import matplotlib.pyplot as plt
import numpy as np

# Khởi tạo dữ liệu


x = np.linspace(0, 10, 100)
y = np.sin(x)

# Vẽ đồ thị đường cong


plt.plot(x, y, label='sin(x)')

# Thêm tiêu đề và nhãn


plt.title('Đồ thị đường cong của hàm sin')
plt.xlabel('Trục X')
plt.ylabel('Trục Y')

# Thêm chú thích


plt.legend()

# Hiển thị đồ thị


plt.show()

Giải thích code


1. Import thư viện:

import matplotlib.pyplot as plt: Import thư viện


Matplotlib với alias là plt.
import numpy as np: Import thư viện NumPy với alias là np.

2. Khởi tạo dữ liệu:

x = np.linspace(0, 10, 100): Tạo một mảng x từ 0 đến 10


với 100 điểm.
y = np.sin(x): Tạo một mảng y là giá trị sin của từng điểm
trong x.
3. Vẽ đồ thị đường cong:

plt.plot(x, y, label='sin(x)'): Vẽ đồ thị đường cong với


dữ liệu từ các mảng x và y, và gán nhãn ‘sin(x)’.

4. Thêm tiêu đề và nhãn:

plt.title('Đồ thị đường cong của hàm sin'): Thêm tiêu


đề cho đồ thị.
plt.xlabel('Trục X'): Thêm nhãn cho trục x.
plt.ylabel('Trục Y'): Thêm nhãn cho trục y.

5. Thêm chú thích:

plt.legend(): Hiển thị chú thích dựa trên nhãn đã gán ở


bước vẽ đồ thị.

6. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.

Bổ sung
Có thể thêm các tùy chỉnh khác như thay đổi màu sắc, kiểu
đường, thêm nhiều đường cong khác nhau, v.v.

Tóm tắt:
Sử dụng thư viện Matplotlib và NumPy để vẽ đồ thị đường cong.
Khởi tạo danh sách dữ liệu cho trục x và y.
Vẽ đồ thị đường cong với các tùy chỉnh cơ bản như tiêu đề,
nhãn trục, và chú thích.

Chương trình này giúp bạn tạo và hiển thị một đồ thị đường cong
đơn giản với dữ liệu tùy ý sử dụng Matplotlib.
208 - Viết chương trình để vẽ đồ thị
3D bằng Matplotlib

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị 3D sử
dụng thư viện Matplotlib. Chương trình sẽ hiển thị một đồ thị 3D với
ba loại dữ liệu khác nhau.

Thuật toán:
Đầu vào:
Ba bộ dữ liệu cho trục x, y, và z.
Đầu ra:
Một đồ thị 3D thể hiện mối quan hệ giữa các giá trị x, y và z.
Các bước thực hiện:
1. Cài đặt thư viện Matplotlib.
2. Khởi tạo các dữ liệu cho trục x, y và z.
3. Sử dụng Matplotlib để vẽ đồ thị 3D dựa trên các dữ liệu này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục x, y và z).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Matplotlib (nếu chưa cài
đặt):
!pip install matplotlib
Code Python
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# Khởi tạo dữ liệu ngẫu nhiên


np.random.seed(0)
x1 = np.random.rand(100)
y1 = np.random.rand(100)
z1 = np.random.rand(100)

x2 = np.random.rand(100)
y2 = np.random.rand(100)
z2 = np.random.rand(100)

x3 = np.random.rand(100)
y3 = np.random.rand(100)
z3 = np.random.rand(100)

# Tạo figure và 3D axes


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Vẽ các dữ liệu lên đồ thị 3D


ax.scatter(x1, y1, z1, c='r', marker='o', label='Dữ liệu 1')
ax.scatter(x2, y2, z2, c='g', marker='^', label='Dữ liệu 2')
ax.scatter(x3, y3, z3, c='b', marker='s', label='Dữ liệu 3')

# Thêm tiêu đề và nhãn trục


ax.set_title('Đồ thị 3D với ba loại dữ liệu khác nhau')
ax.set_xlabel('Trục X')
ax.set_ylabel('Trục Y')
ax.set_zlabel('Trục Z')

# Thêm chú thích


ax.legend()

# Hiển thị đồ thị


plt.show()
Giải thích code
1. Import thư viện:

import matplotlib.pyplot as plt: Import thư viện


Matplotlib với alias là plt.
from mpl_toolkits.mplot3d import Axes3D: Import công cụ
Axes3D để vẽ đồ thị 3D.
import numpy as np: Import thư viện NumPy với alias là np.

2. Khởi tạo dữ liệu ngẫu nhiên:

np.random.seed(0): Đặt seed cho tính ngẫu nhiên để đảm


bảo kết quả có thể tái lập.
x1, y1, z1, x2, y2, z2, x3, y3, z3: Tạo ba bộ dữ liệu ngẫu
nhiên cho trục x, y và z.

3. Tạo figure và 3D axes:

fig = plt.figure(): Tạo một figure mới.


ax = fig.add_subplot(111, projection='3d'): Thêm một
subplot với projection là 3D.

4. Vẽ các dữ liệu lên đồ thị 3D:

ax.scatter(x1, y1, z1, c='r', marker='o', label='Dữ


liệu 1'): Vẽ dữ liệu 1 với màu đỏ và marker là ‘o’.
ax.scatter(x2, y2, z2, c='g', marker='^', label='Dữ
liệu 2'): Vẽ dữ liệu 2 với màu xanh lá cây và marker là ‘^’.
ax.scatter(x3, y3, z3, c='b', marker='s', label='Dữ
liệu 3'): Vẽ dữ liệu 3 với màu xanh dương và marker là ‘s’.

5. Thêm tiêu đề và nhãn trục:

ax.set_title('Đồ thị 3D với ba loại dữ liệu khác


nhau'): Thêm tiêu đề cho đồ thị.
ax.set_xlabel('Trục X'): Thêm nhãn cho trục x.
ax.set_ylabel('Trục Y'): Thêm nhãn cho trục y.
ax.set_zlabel('Trục Z'): Thêm nhãn cho trục z.

6. Thêm chú thích:

ax.legend(): Hiển thị chú thích dựa trên nhãn đã gán ở


bước vẽ dữ liệu.

7. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.

Bổ sung
Có thể thêm các tùy chỉnh khác như thay đổi màu sắc, kiểu
marker, v.v.

Tóm tắt:
Sử dụng thư viện Matplotlib và NumPy để vẽ đồ thị 3D.
Khởi tạo ba bộ dữ liệu ngẫu nhiên cho trục x, y và z.
Vẽ đồ thị 3D với các tùy chỉnh cơ bản như tiêu đề, nhãn trục và
chú thích.

Chương trình này giúp bạn tạo và hiển thị một đồ thị 3D đơn giản
với ba loại dữ liệu khác nhau sử dụng Matplotlib.
209 - Viết chương trình để vẽ đồ thị
heatmap bằng Seaborn

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị heatmap
(bản đồ nhiệt) sử dụng thư viện Seaborn. Chương trình sẽ hiển thị
một heatmap với các dữ liệu đầu vào tùy ý.

Đồ thị heatmap (bản đồ nhiệt)


Đồ thị heatmap là một loại biểu đồ biểu diễn dữ liệu dạng số trong
dạng ma trận hoặc bảng, với màu sắc biểu diễn giá trị của dữ liệu.
Màu sắc càng đậm thì giá trị càng cao, và ngược lại, màu sắc càng
nhạt thì giá trị càng thấp.

Heatmap thường được sử dụng để hiển thị mối quan hệ giữa hai
biến hoặc để hiển thị sự phân phối của dữ liệu trên một không gian
hai chiều. Chúng rất hữu ích khi bạn muốn hiểu mối quan hệ giữa
các biến hoặc khi bạn muốn hiển thị một lượng lớn dữ liệu một cách
trực quan.

Thuật toán:
Đầu vào:
Một ma trận (matrix) hoặc DataFrame chứa các giá trị cần
hiển thị.
Đầu ra:
Một đồ thị heatmap thể hiện phân bố giá trị trong ma trận.
Các bước thực hiện:
1. Cài đặt thư viện Seaborn và Matplotlib.
2. Khởi tạo ma trận dữ liệu hoặc DataFrame.
3. Sử dụng Seaborn để vẽ đồ thị heatmap dựa trên dữ liệu này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục x và y).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Seaborn và Matplotlib
(nếu chưa cài đặt):
!pip install matplotlib

!pip install seaborn

Code Python
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# Khởi tạo dữ liệu ngẫu nhiên


np.random.seed(0)
data = np.random.rand(10, 12)

# Vẽ đồ thị heatmap
plt.figure(figsize=(10, 8))
sns.heatmap(data, annot=True, cmap='viridis')

# Thêm tiêu đề và nhãn


plt.title('Đồ thị Heatmap với dữ liệu ngẫu nhiên')
plt.xlabel('Trục X')
plt.ylabel('Trục Y')

# Hiển thị đồ thị


plt.show()
Giải thích code
1. Import thư viện:

import seaborn as sns: Import thư viện Seaborn với alias là


sns.
import matplotlib.pyplot as plt: Import thư viện
Matplotlib với alias là plt.
import numpy as np: Import thư viện NumPy với alias là np.

2. Khởi tạo dữ liệu ngẫu nhiên:

np.random.seed(0): Đặt seed cho tính ngẫu nhiên để đảm


bảo kết quả có thể tái lập.
data = np.random.rand(10, 12): Tạo một ma trận data
10x12 với các giá trị ngẫu nhiên từ 0 đến 1.

3. Vẽ đồ thị heatmap:

plt.figure(figsize=(10, 8)): Tạo figure mới với kích


thước 10x8 inch.
sns.heatmap(data, annot=True, cmap='viridis'): Vẽ đồ thị
heatmap với dữ liệu từ ma trận data. annot=True để hiển thị
giá trị trên từng ô, cmap='viridis' để sử dụng bảng màu
viridis.

4. Thêm tiêu đề và nhãn:

plt.title('Đồ thị Heatmap với dữ liệu ngẫu nhiên'):


Thêm tiêu đề cho đồ thị.
plt.xlabel('Trục X'): Thêm nhãn cho trục x.
plt.ylabel('Trục Y'): Thêm nhãn cho trục y.

5. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.


Bổ sung
Có thể thêm các tùy chỉnh khác như thay đổi bảng màu,
hiển thị thanh màu (color bar), thay đổi kích thước figure,
v.v.

Tóm tắt:
Sử dụng thư viện Seaborn và Matplotlib để vẽ đồ thị heatmap.
Khởi tạo ma trận dữ liệu ngẫu nhiên.
Vẽ đồ thị heatmap với các tùy chỉnh cơ bản như tiêu đề, nhãn
trục.

Chương trình này giúp bạn tạo và hiển thị một đồ thị heatmap đơn
giản với dữ liệu ngẫu nhiên sử dụng Seaborn.
210 - Viết chương trình để vẽ đồ thị
histogram bằng Seaborn

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để vẽ đồ thị histogram
(biểu đồ tần suất) sử dụng thư viện Seaborn. Chương trình sẽ hiển
thị một histogram với các dữ liệu đầu vào tùy ý.

Đồ thị histogram (biểu đồ tần suất)


Đồ thị histogram là một loại biểu đồ cột biểu diễn phân phối tần suất
của dữ liệu. Trục hoành (x-axis) của histogram biểu diễn các khoảng
giá trị (còn gọi là bin) và trục tung (y-axis) biểu diễn tần suất (số
lượng dữ liệu) rơi vào mỗi khoảng.

Histogram thường được sử dụng trong phân tích thống kê để hiển


thị phân phối của dữ liệu. Nó cho phép bạn nhanh chóng nhìn thấy
nơi phần lớn dữ liệu tập trung (cao), nơi dữ liệu thưa thớt (thấp), và
liệu dữ liệu có lệch về một phía (skew) hay không.

Thuật toán:
Đầu vào:
Một danh sách hoặc mảng các giá trị.
Đầu ra:
Một đồ thị histogram thể hiện phân bố các giá trị.
Các bước thực hiện:
1. Cài đặt thư viện Seaborn và Matplotlib.
2. Khởi tạo dữ liệu ngẫu nhiên hoặc dữ liệu mẫu.
3. Sử dụng Seaborn để vẽ đồ thị histogram dựa trên dữ liệu
này.
4. Tùy chỉnh đồ thị (thêm tiêu đề, nhãn trục x và y).
5. Hiển thị đồ thị.

Cài đặt thư viện


Để vẽ đồ thị, chúng ta cần cài đặt thư viện Seaborn và Matplotlib
(nếu chưa cài đặt):
!pip install seaborn matplotlib

Code Python
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# Khởi tạo dữ liệu ngẫu nhiên


np.random.seed(0)
data = np.random.randn(1000) # 1000 giá trị ngẫu nhiên theo
phân phối chuẩn

# Vẽ đồ thị histogram
plt.figure(figsize=(10, 6))
sns.histplot(data, bins=30, kde=True, color='blue')

# Thêm tiêu đề và nhãn


plt.title('Đồ thị Histogram với dữ liệu ngẫu nhiên')
plt.xlabel('Giá trị')
plt.ylabel('Tần suất')

# Hiển thị đồ thị


plt.show()

Giải thích code


1. Import thư viện:
import seaborn as sns: Import thư viện Seaborn với alias là
sns.
import matplotlib.pyplot as plt: Import thư viện
Matplotlib với alias là plt.
import numpy as np: Import thư viện NumPy với alias là np.

2. Khởi tạo dữ liệu ngẫu nhiên:

np.random.seed(0): Đặt seed cho tính ngẫu nhiên để đảm


bảo kết quả có thể tái lập.
data = np.random.randn(1000): Tạo một mảng data chứa
1000 giá trị ngẫu nhiên theo phân phối chuẩn.

3. Vẽ đồ thị histogram:

plt.figure(figsize=(10, 6)): Tạo figure mới với kích


thước 10x6 inch.
sns.histplot(data, bins=30, kde=True, color='blue'):
Vẽ đồ thị histogram với dữ liệu từ mảng data. bins=30 chỉ
định 30 bins, kde=True để hiển thị đường mật độ hạt nhân,
color='blue' để tô màu xanh cho histogram.

4. Thêm tiêu đề và nhãn:

plt.title('Đồ thị Histogram với dữ liệu ngẫu nhiên'):


Thêm tiêu đề cho đồ thị.
plt.xlabel('Giá trị'): Thêm nhãn cho trục x.
plt.ylabel('Tần suất'): Thêm nhãn cho trục y.

5. Hiển thị đồ thị:

plt.show(): Hiển thị đồ thị đã vẽ.


Bổ sung
Có thể thêm các tùy chỉnh khác như thay đổi số lượng bins,
màu sắc, thêm lưới (grid), v.v.

Tóm tắt:
Sử dụng thư viện Seaborn và Matplotlib để vẽ đồ thị histogram.
Khởi tạo dữ liệu ngẫu nhiên.
Vẽ đồ thị histogram với các tùy chỉnh cơ bản như tiêu đề, nhãn
trục, và đường mật độ hạt nhân.

Chương trình này giúp bạn tạo và hiển thị một đồ thị histogram đơn
giản với dữ liệu ngẫu nhiên sử dụng Seaborn.
Chương 22 : Bài tập với SQL
211. Viết chương trình để kết nối với cơ sở dữ liệu SQL.
212. Viết chương trình để tạo bảng trong cơ sở dữ liệu SQL.
213. Viết chương trình để chèn dữ liệu vào bảng trong cơ sở dữ liệu
SQL.
214. Viết chương trình để truy vấn dữ liệu từ bảng trong cơ sở dữ liệu
SQL.
215. Viết chương trình để cập nhật dữ liệu trong bảng trong cơ sở dữ
liệu SQL.
216. Viết chương trình để xóa dữ liệu trong bảng trong cơ sở dữ liệu
SQL.
217. Viết chương trình để tạo bảng quan hệ trong cơ sở dữ liệu SQL.
218. Viết chương trình để thực hiện join giữa hai bảng trong cơ sở dữ
liệu SQL.
219. Viết chương trình để thực hiện aggregate functions trong cơ sở
dữ liệu SQL.
220. Viết chương trình để thực hiện subquery trong cơ sở dữ liệu
SQL.
211 - Viết chương trình để kết nối với
cơ sở dữ liệu SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để kết nối và tương tác
với cơ sở dữ liệu SQLite. Chương trình sẽ bao gồm các bước từ cài
đặt thư viện cần thiết, thiết lập kết nối đến cơ sở dữ liệu, thực hiện
các thao tác cơ bản như tạo bảng, chèn dữ liệu và truy vấn dữ liệu.

Thuật toán:
Đầu vào:
Cơ sở dữ liệu SQLite (có thể là một file hoặc cơ sở dữ liệu
trong bộ nhớ).
Các lệnh SQL để thực hiện các thao tác trên cơ sở dữ liệu.
Đầu ra:
Kết quả của các lệnh SQL (ví dụ: dữ liệu được truy vấn từ cơ
sở dữ liệu).
Các bước thực hiện:
1. Cài đặt thư viện SQLite (nếu chưa có).
2. Kết nối tới cơ sở dữ liệu SQLite.
3. Tạo bảng mới trong cơ sở dữ liệu.
4. Chèn dữ liệu vào bảng.
5. Truy vấn dữ liệu từ bảng.
6. Đóng kết nối cơ sở dữ liệu.

Cài đặt thư viện


SQLite là một phần của thư viện chuẩn trong Python, nên không cần
cài đặt thêm bất kỳ thư viện nào. Chỉ cần import module sqlite3 là
đủ.
Code Python
import sqlite3

# Kết nối tới cơ sở dữ liệu SQLite


conn = sqlite3.connect('example.db')

# Tạo đối tượng cursor để tương tác với cơ sở dữ liệu


cursor = conn.cursor()

# Tạo bảng mới có tên là "students"


cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
)
''')

# Chèn dữ liệu vào bảng "students"


cursor.execute('''
INSERT INTO students (name, age, grade)
VALUES ('Alice', 21, 'A')
''')
cursor.execute('''
INSERT INTO students (name, age, grade)
VALUES ('Bob', 22, 'B')
''')
cursor.execute('''
INSERT INTO students (name, age, grade)
VALUES ('Charlie', 23, 'C')
''')

# Lưu các thay đổi


conn.commit()

# Truy vấn dữ liệu từ bảng "students"


cursor.execute('SELECT * FROM students')
rows = cursor.fetchall()
# Hiển thị kết quả truy vấn
for row in rows:
print(row)

# Đóng kết nối cơ sở dữ liệu


conn.close()

Giải thích code


1. Import thư viện:
import sqlite3: Import module sqlite3 để làm việc với
SQLite.
2. Kết nối tới cơ sở dữ liệu:
conn = sqlite3.connect('example.db'): Tạo kết nối tới file
cơ sở dữ liệu SQLite có tên là ‘example.db’.
3. Tạo đối tượng cursor:
cursor = conn.cursor(): Tạo đối tượng cursor để thực hiện
các lệnh SQL.
4. Tạo bảng mới:
cursor.execute('CREATE TABLE IF NOT EXISTS students
(...))`: Tạo bảng mới có tên là “students” nếu bảng chưa
tồn tại.
5. Chèn dữ liệu vào bảng:
cursor.execute('INSERT INTO students (...) VALUES
(...))`: Chèn dữ liệu vào bảng “students”.
6. Lưu các thay đổi:
conn.commit(): Lưu các thay đổi vào cơ sở dữ liệu.
7. Truy vấn dữ liệu:
cursor.execute('SELECT * FROM students'): Thực hiện truy
vấn để lấy tất cả dữ liệu từ bảng “students”.
rows = cursor.fetchall(): Lấy tất cả kết quả truy vấn và
lưu vào biến rows.
8. Hiển thị kết quả:
for row in rows: print(row): In từng hàng dữ liệu được
truy vấn.
9. Đóng kết nối:
conn.close(): Đóng kết nối tới cơ sở dữ liệu.

Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo bảng mới bằng CREATE TABLE IF NOT EXISTS.
Chèn dữ liệu vào bảng bằng INSERT INTO.
Truy vấn dữ liệu bằng SELECT.
Đóng kết nối bằng conn.close().

Chương trình này kết nối tới cơ sở dữ liệu SQLite, tạo bảng, chèn
dữ liệu và truy vấn dữ liệu cơ bản, minh họa cách làm việc với cơ sở
dữ liệu SQLite trong Python.
212 - Viết chương trình để tạo bảng
trong cơ sở dữ liệu SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một bảng trong
cơ sở dữ liệu SQLite với dữ liệu ban đầu. Nếu bảng đã tồn tại,
chương trình sẽ bỏ qua bước tạo bảng và chỉ thực hiện các thao tác
chèn dữ liệu và truy vấn dữ liệu.

Thuật toán:
Đầu vào:
Cơ sở dữ liệu SQLite.
Các lệnh SQL để tạo bảng và chèn dữ liệu ban đầu.
Đầu ra:
Kết quả của các lệnh SQL (ví dụ: dữ liệu được truy vấn từ cơ
sở dữ liệu).
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Tạo bảng mới nếu bảng chưa tồn tại.
3. Chèn dữ liệu ban đầu vào bảng.
4. Truy vấn dữ liệu từ bảng.
5. Đóng kết nối cơ sở dữ liệu.

Cài đặt thư viện


Không cần cài đặt thêm thư viện nào vì SQLite là một phần của thư
viện chuẩn trong Python.
Code Python
import sqlite3

# Kết nối tới cơ sở dữ liệu SQLite


conn = sqlite3.connect('example.db')

# Tạo đối tượng cursor để tương tác với cơ sở dữ liệu


cursor = conn.cursor()

# Tạo bảng mới có tên là "students" nếu bảng chưa tồn tại
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
)
''')

# Kiểm tra xem bảng đã tồn tại hay chưa


cursor.execute('SELECT count(name) FROM sqlite_master WHERE
type="table" AND name="students"')
if cursor.fetchone()[0] == 1:
print("Bảng 'students' đã tồn tại. Bỏ qua bước tạo
bảng.")

# Chèn dữ liệu vào bảng "students"


students_data = [
('Alice', 21, 'A'),
('Bob', 22, 'B'),
('Charlie', 23, 'C')
]

for student in students_data:


cursor.execute('''
INSERT INTO students (name, age, grade)
VALUES (?, ?, ?)
''', student)

# Lưu các thay đổi


conn.commit()

# Truy vấn dữ liệu từ bảng "students"


cursor.execute('SELECT * FROM students')
rows = cursor.fetchall()

# Hiển thị kết quả truy vấn


for row in rows:
print(row)

# Đóng kết nối cơ sở dữ liệu


conn.close()

Giải thích code


1. Import thư viện:
import sqlite3: Import module sqlite3 để làm việc với
SQLite.
2. Kết nối tới cơ sở dữ liệu:
conn = sqlite3.connect('example.db'): Tạo kết nối tới file
cơ sở dữ liệu SQLite có tên là ‘example.db’.
3. Tạo đối tượng cursor:
cursor = conn.cursor(): Tạo đối tượng cursor để thực hiện
các lệnh SQL.
4. Tạo bảng mới:
cursor.execute('CREATE TABLE IF NOT EXISTS students
(...))`: Tạo bảng mới có tên là “students” nếu bảng chưa
tồn tại.
5. Kiểm tra bảng đã tồn tại:
cursor.execute('SELECT count(name) FROM sqlite_master
WHERE type="table" AND name="students"'): Kiểm tra xem
bảng “students” đã tồn tại hay chưa.
if cursor.fetchone()[0] == 1: Nếu bảng đã tồn tại, in ra
thông báo và bỏ qua bước tạo bảng.
6. Chèn dữ liệu vào bảng:
Tạo danh sách dữ liệu students_data.
Lặp qua danh sách và chèn từng bản ghi vào bảng
“students”.
7. Lưu các thay đổi:
conn.commit(): Lưu các thay đổi vào cơ sở dữ liệu.
8. Truy vấn dữ liệu:
cursor.execute('SELECT * FROM students'): Thực hiện truy
vấn để lấy tất cả dữ liệu từ bảng “students”.
rows = cursor.fetchall(): Lấy tất cả kết quả truy vấn và
lưu vào biến rows.
9. Hiển thị kết quả:
for row in rows: print(row): In từng hàng dữ liệu được
truy vấn.
10. Đóng kết nối:
conn.close(): Đóng kết nối tới cơ sở dữ liệu.

Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo bảng mới bằng CREATE TABLE IF NOT EXISTS.
Kiểm tra sự tồn tại của bảng bằng truy vấn sqlite_master.
Chèn dữ liệu vào bảng bằng INSERT INTO.
Truy vấn dữ liệu bằng SELECT.
Đóng kết nối bằng conn.close().

Chương trình này kết nối tới cơ sở dữ liệu SQLite, tạo bảng nếu
chưa tồn tại, chèn dữ liệu ban đầu và truy vấn dữ liệu từ bảng
“students”.
213 - Viết chương trình để chèn dữ
liệu vào bảng trong cơ sở dữ liệu SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để chèn dữ liệu vào
bảng trong cơ sở dữ liệu SQLite. Nếu bảng đã tồn tại thì bỏ qua
bước tạo bảng. Chương trình sẽ cung cấp một menu để người dùng
có thể chọn nhập dữ liệu mới hoặc xem danh sách dữ liệu đã lưu
trong cơ sở dữ liệu.

Thuật toán:
Đầu vào:
Các lệnh SQL để tạo bảng (nếu chưa tồn tại) và chèn dữ
liệu.
Lựa chọn của người dùng từ menu.
Đầu ra:
Dữ liệu được lưu trữ trong bảng hoặc danh sách dữ liệu từ
cơ sở dữ liệu.
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Tạo bảng mới nếu bảng chưa tồn tại.
3. Hiển thị menu cho người dùng lựa chọn:
Nhập dữ liệu mới.
Xem danh sách dữ liệu đã lưu.
4. Thực hiện các thao tác tương ứng theo lựa chọn của người
dùng.
5. Đóng kết nối cơ sở dữ liệu.
Cài đặt thư viện
Không cần cài đặt thêm thư viện nào vì SQLite là một phần của thư
viện chuẩn trong Python.

Code Python
import sqlite3

def connect_to_db():
return sqlite3.connect('example.db')

def create_table_if_not_exists(cursor):
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
)
''')

def insert_data(cursor, name, age, grade):


cursor.execute('''
INSERT INTO students (name, age, grade)
VALUES (?, ?, ?)
''', (name, age, grade))

def display_data(cursor):
cursor.execute('SELECT * FROM students')
rows = cursor.fetchall()
for row in rows:
print(row)

def main():
conn = connect_to_db()
cursor = conn.cursor()

create_table_if_not_exists(cursor)
while True:
print("Menu:")
print("1. Nhập dữ liệu mới")
print("2. Xem danh sách dữ liệu")
print("3. Thoát")
choice = input("Chọn một tùy chọn (1/2/3): ")

if choice == '1':
name = input("Nhập tên: ")
age = input("Nhập tuổi: ")
grade = input("Nhập xếp hạng: ")
insert_data(cursor, name, age, grade)
conn.commit()
print("Đã thêm dữ liệu thành công!")
elif choice == '2':
display_data(cursor)
elif choice == '3':
break
else:
print("Lựa chọn không hợp lệ, vui lòng thử lại.")

conn.close()

if __name__ == "__main__":
main()

Giải thích code


1. Kết nối tới cơ sở dữ liệu:
Hàm connect_to_db(): Kết nối tới cơ sở dữ liệu SQLite và
trả về đối tượng kết nối.
2. Tạo bảng mới:
Hàm create_table_if_not_exists(cursor): Tạo bảng mới
có tên là “students” nếu bảng chưa tồn tại.
3. Chèn dữ liệu vào bảng:
Hàm insert_data(cursor, name, age, grade): Chèn dữ
liệu vào bảng “students”.
4. Hiển thị dữ liệu từ bảng:
Hàm display_data(cursor): Truy vấn và hiển thị dữ liệu từ
bảng “students”.
5. Menu và xử lý lựa chọn của người dùng:
Hàm main(): Kết nối tới cơ sở dữ liệu, tạo bảng nếu chưa
tồn tại, và hiển thị menu cho người dùng. Thực hiện các thao
tác tương ứng theo lựa chọn của người dùng:
Nhập dữ liệu mới.
Xem danh sách dữ liệu đã lưu.
Thoát chương trình.
Sử dụng vòng lặp while True để hiển thị menu liên tục cho
đến khi người dùng chọn thoát.

Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo bảng mới bằng CREATE TABLE IF NOT EXISTS.
Chèn dữ liệu vào bảng bằng INSERT INTO.
Truy vấn dữ liệu bằng SELECT.
Menu cho người dùng với các lựa chọn để nhập dữ liệu mới
hoặc xem danh sách dữ liệu đã lưu.
Đóng kết nối bằng conn.close().

Chương trình này cung cấp một giao diện đơn giản để người dùng
có thể nhập dữ liệu mới vào bảng “students” hoặc xem danh sách
dữ liệu đã lưu trong cơ sở dữ liệu SQLite.
214 - Viết chương trình để truy vấn dữ
liệu từ bảng trong cơ sở dữ liệu SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để truy vấn dữ liệu từ
bảng trong cơ sở dữ liệu SQLite. Nếu bảng đã tồn tại thì bỏ qua
bước tạo bảng. Chương trình sẽ cung cấp một menu để người dùng
có thể chọn xem dữ liệu trong bảng với nhiều tiêu chí khác nhau.

Thuật toán:
Đầu vào:
Các lệnh SQL để tạo bảng (nếu chưa tồn tại) và truy vấn dữ
liệu.
Lựa chọn của người dùng từ menu.
Đầu ra:
Dữ liệu được truy vấn từ bảng dựa trên tiêu chí người dùng
chọn.
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Tạo bảng mới nếu bảng chưa tồn tại.
3. Hiển thị menu cho người dùng lựa chọn tiêu chí truy vấn dữ
liệu:
Xem tất cả dữ liệu.
Xem dữ liệu theo tên.
Xem dữ liệu theo tuổi.
Xem dữ liệu theo xếp hạng.
Thoát chương trình.
4. Thực hiện các truy vấn dữ liệu tương ứng theo lựa chọn của
người dùng.
5. Đóng kết nối cơ sở dữ liệu.
Cài đặt thư viện
Không cần cài đặt thêm thư viện nào vì SQLite là một phần của thư
viện chuẩn trong Python.

Code Python
import sqlite3

def connect_to_db():
return sqlite3.connect('example.db')

def create_table_if_not_exists(cursor):
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
)
''')

def display_all_data(cursor):
cursor.execute('SELECT * FROM students')
rows = cursor.fetchall()
for row in rows:
print(row)

def display_data_by_name(cursor, name):


cursor.execute('SELECT * FROM students WHERE name = ?',
(name,))
rows = cursor.fetchall()
for row in rows:
print(row)

def display_data_by_age(cursor, age):


cursor.execute('SELECT * FROM students WHERE age = ?',
(age,))
rows = cursor.fetchall()
for row in rows:
print(row)

def display_data_by_grade(cursor, grade):


cursor.execute('SELECT * FROM students WHERE grade = ?',
(grade,))
rows = cursor.fetchall()
for row in rows:
print(row)

def main():
conn = connect_to_db()
cursor = conn.cursor()

create_table_if_not_exists(cursor)

while True:
print("Menu:")
print("1. Xem tất cả dữ liệu")
print("2. Xem dữ liệu theo tên")
print("3. Xem dữ liệu theo tuổi")
print("4. Xem dữ liệu theo xếp hạng")
print("5. Thoát")
choice = input("Chọn một tùy chọn (1/2/3/4/5): ")

if choice == '1':
display_all_data(cursor)
elif choice == '2':
name = input("Nhập tên: ")
display_data_by_name(cursor, name)
elif choice == '3':
age = input("Nhập tuổi: ")
display_data_by_age(cursor, age)
elif choice == '4':
grade = input("Nhập xếp hạng: ")
display_data_by_grade(cursor, grade)
elif choice == '5':
break
else:
print("Lựa chọn không hợp lệ, vui lòng thử lại.")
conn.close()

if __name__ == "__main__":
main()

Giải thích code


1. Kết nối tới cơ sở dữ liệu:
Hàm connect_to_db(): Kết nối tới cơ sở dữ liệu SQLite và
trả về đối tượng kết nối.
2. Tạo bảng mới:
Hàm create_table_if_not_exists(cursor): Tạo bảng mới
có tên là “students” nếu bảng chưa tồn tại.
3. Hiển thị dữ liệu từ bảng:
Hàm display_all_data(cursor): Truy vấn và hiển thị tất cả
dữ liệu từ bảng “students”.
Hàm display_data_by_name(cursor, name): Truy vấn và
hiển thị dữ liệu từ bảng “students” theo tên.
Hàm display_data_by_age(cursor, age): Truy vấn và hiển
thị dữ liệu từ bảng “students” theo tuổi.
Hàm display_data_by_grade(cursor, grade): Truy vấn và
hiển thị dữ liệu từ bảng “students” theo xếp hạng.
4. Menu và xử lý lựa chọn của người dùng:
Hàm main(): Kết nối tới cơ sở dữ liệu, tạo bảng nếu chưa
tồn tại, và hiển thị menu cho người dùng. Thực hiện các thao
tác truy vấn dữ liệu tương ứng theo lựa chọn của người
dùng:
Xem tất cả dữ liệu.
Xem dữ liệu theo tên.
Xem dữ liệu theo tuổi.
Xem dữ liệu theo xếp hạng.
Thoát chương trình.
Sử dụng vòng lặp while True để hiển thị menu liên tục cho
đến khi người dùng chọn thoát.
Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo bảng mới bằng CREATE TABLE IF NOT EXISTS.
Truy vấn dữ liệu bằng các hàm SELECT.
Menu cho người dùng với các lựa chọn để xem dữ liệu theo
nhiều tiêu chí khác nhau.
Đóng kết nối bằng conn.close().

Chương trình này cung cấp một giao diện đơn giản để người dùng
có thể truy vấn và xem dữ liệu từ bảng “students” trong cơ sở dữ
liệu SQLite theo nhiều tiêu chí khác nhau.
215 - Viết chương trình để cập nhật
dữ liệu trong bảng trong cơ sở dữ
liệu SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để cập nhật dữ liệu
trong bảng của cơ sở dữ liệu SQLite. Nếu bảng đã tồn tại thì bỏ qua
bước tạo bảng. Chương trình sẽ cung cấp một menu để người dùng
có thể xem toàn bộ dữ liệu và cập nhật dữ liệu.

Thuật toán:
Đầu vào:
Các lệnh SQL để tạo bảng (nếu chưa tồn tại) và cập nhật dữ
liệu.
Lựa chọn của người dùng từ menu.
Đầu ra:
Dữ liệu được cập nhật trong bảng hoặc danh sách dữ liệu từ
cơ sở dữ liệu.
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Tạo bảng mới nếu bảng chưa tồn tại.
3. Hiển thị menu cho người dùng lựa chọn:
Xem toàn bộ dữ liệu.
Cập nhật dữ liệu theo ID.
Thoát chương trình.
4. Thực hiện các thao tác tương ứng theo lựa chọn của người
dùng.
5. Đóng kết nối cơ sở dữ liệu.
Cài đặt thư viện
Không cần cài đặt thêm thư viện nào vì SQLite là một phần của thư
viện chuẩn trong Python.

Code Python
import sqlite3

def connect_to_db():
return sqlite3.connect('example.db')

def create_table_if_not_exists(cursor):
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
)
''')

def display_all_data(cursor):
cursor.execute('SELECT * FROM students')
rows = cursor.fetchall()
for row in rows:
print(row)

def update_data_by_id(cursor, student_id, name, age, grade):


cursor.execute('''
UPDATE students
SET name = ?, age = ?, grade = ?
WHERE id = ?
''', (name, age, grade, student_id))

def main():
conn = connect_to_db()
cursor = conn.cursor()
create_table_if_not_exists(cursor)

while True:
print("Menu:")
print("1. Xem toàn bộ dữ liệu")
print("2. Cập nhật dữ liệu theo ID")
print("3. Thoát")
choice = input("Chọn một tùy chọn (1/2/3): ")

if choice == '1':
display_all_data(cursor)
elif choice == '2':
student_id = input("Nhập ID của sinh viên cần cập
nhật: ")
name = input("Nhập tên mới: ")
age = input("Nhập tuổi mới: ")
grade = input("Nhập xếp hạng mới: ")
update_data_by_id(cursor, student_id, name, age,
grade)
conn.commit()
print("Dữ liệu đã được cập nhật thành công!")
elif choice == '3':
break
else:
print("Lựa chọn không hợp lệ, vui lòng thử lại.")

conn.close()

if __name__ == "__main__":
main()

Giải thích code


1. Kết nối tới cơ sở dữ liệu:
Hàm connect_to_db(): Kết nối tới cơ sở dữ liệu SQLite và
trả về đối tượng kết nối.
2. Tạo bảng mới:
Hàm create_table_if_not_exists(cursor): Tạo bảng mới
có tên là “students” nếu bảng chưa tồn tại.
3. Hiển thị dữ liệu từ bảng:
Hàm display_all_data(cursor): Truy vấn và hiển thị tất cả
dữ liệu từ bảng “students”.
4. Cập nhật dữ liệu trong bảng:
Hàm update_data_by_id(cursor, student_id, name, age,
grade): Cập nhật dữ liệu trong bảng “students” theo ID của
sinh viên.
5. Menu và xử lý lựa chọn của người dùng:
Hàm main(): Kết nối tới cơ sở dữ liệu, tạo bảng nếu chưa
tồn tại, và hiển thị menu cho người dùng. Thực hiện các thao
tác tương ứng theo lựa chọn của người dùng:
Xem toàn bộ dữ liệu.
Cập nhật dữ liệu theo ID.
Thoát chương trình.
Sử dụng vòng lặp while True để hiển thị menu liên tục cho
đến khi người dùng chọn thoát.

Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo bảng mới bằng CREATE TABLE IF NOT EXISTS.
Truy vấn dữ liệu bằng SELECT.
Cập nhật dữ liệu bằng UPDATE.
Menu cho người dùng với các lựa chọn để xem toàn bộ dữ liệu
hoặc cập nhật dữ liệu theo ID.
Đóng kết nối bằng conn.close().

Chương trình này cung cấp một giao diện đơn giản để người dùng
có thể xem toàn bộ dữ liệu hoặc cập nhật dữ liệu trong bảng
“students” của cơ sở dữ liệu SQLite.
216 - Viết chương trình để xóa dữ liệu
trong bảng trong cơ sở dữ liệu SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để xóa dữ liệu trong
bảng của cơ sở dữ liệu SQLite. Chương trình sẽ cung cấp một
menu để người dùng có thể xem toàn bộ dữ liệu và xóa dữ liệu theo
ID hoặc xóa toàn bộ dữ liệu.

Thuật toán:
Đầu vào:
Các lệnh SQL để tạo bảng (nếu chưa tồn tại) và xóa dữ liệu.
Lựa chọn của người dùng từ menu.
Đầu ra:
Dữ liệu được xóa khỏi bảng hoặc danh sách dữ liệu từ cơ
sở dữ liệu.
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Tạo bảng mới nếu bảng chưa tồn tại.
3. Hiển thị menu cho người dùng lựa chọn:
Xem toàn bộ dữ liệu.
Xóa dữ liệu theo ID.
Xóa toàn bộ dữ liệu.
Thoát chương trình.
4. Thực hiện các thao tác tương ứng theo lựa chọn của người
dùng.
5. Đóng kết nối cơ sở dữ liệu.
Cài đặt thư viện
Không cần cài đặt thêm thư viện nào vì SQLite là một phần của thư
viện chuẩn trong Python.

Code Python
import sqlite3

def connect_to_db():
return sqlite3.connect('example.db')

def create_table_if_not_exists(cursor):
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
)
''')

def display_all_data(cursor):
cursor.execute('SELECT * FROM students')
rows = cursor.fetchall()
for row in rows:
print(row)

def delete_data_by_id(cursor, student_id):


cursor.execute('''
DELETE FROM students WHERE id = ?
''', (student_id,))

def delete_all_data(cursor):
cursor.execute('DELETE FROM students')

def main():
conn = connect_to_db()
cursor = conn.cursor()
create_table_if_not_exists(cursor)

while True:
print("Menu:")
print("1. Xem toàn bộ dữ liệu")
print("2. Xóa dữ liệu theo ID")
print("3. Xóa toàn bộ dữ liệu")
print("4. Thoát")
choice = input("Chọn một tùy chọn (1/2/3/4): ")

if choice == '1':
display_all_data(cursor)
elif choice == '2':
student_id = input("Nhập ID của sinh viên cần
xóa: ")
delete_data_by_id(cursor, student_id)
conn.commit()
print(f"Dữ liệu có ID {student_id} đã được xóa
thành công!")
elif choice == '3':
delete_all_data(cursor)
conn.commit()
print("Toàn bộ dữ liệu đã được xóa thành công!")
elif choice == '4':
break
else:
print("Lựa chọn không hợp lệ, vui lòng thử lại.")

conn.close()

if __name__ == "__main__":
main()

Giải thích code


1. Kết nối tới cơ sở dữ liệu:
Hàm connect_to_db(): Kết nối tới cơ sở dữ liệu SQLite và
trả về đối tượng kết nối.
2. Tạo bảng mới:
Hàm create_table_if_not_exists(cursor): Tạo bảng mới
có tên là “students” nếu bảng chưa tồn tại.
3. Hiển thị dữ liệu từ bảng:
Hàm display_all_data(cursor): Truy vấn và hiển thị tất cả
dữ liệu từ bảng “students”.
4. Xóa dữ liệu trong bảng:
Hàm delete_data_by_id(cursor, student_id): Xóa dữ liệu
trong bảng “students” theo ID của sinh viên.
Hàm delete_all_data(cursor): Xóa toàn bộ dữ liệu trong
bảng “students”.
5. Menu và xử lý lựa chọn của người dùng:
Hàm main(): Kết nối tới cơ sở dữ liệu, tạo bảng nếu chưa
tồn tại, và hiển thị menu cho người dùng. Thực hiện các thao
tác tương ứng theo lựa chọn của người dùng:
Xem toàn bộ dữ liệu.
Xóa dữ liệu theo ID.
Xóa toàn bộ dữ liệu.
Thoát chương trình.
Sử dụng vòng lặp while True để hiển thị menu liên tục cho
đến khi người dùng chọn thoát.

Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo bảng mới bằng CREATE TABLE IF NOT EXISTS.
Truy vấn dữ liệu bằng SELECT.
Xóa dữ liệu bằng DELETE.
Menu cho người dùng với các lựa chọn để xem toàn bộ dữ liệu,
xóa dữ liệu theo ID hoặc xóa toàn bộ dữ liệu.
Đóng kết nối bằng conn.close().

Chương trình này cung cấp một giao diện đơn giản để người dùng
có thể xem toàn bộ dữ liệu, xóa dữ liệu theo ID hoặc xóa toàn bộ dữ
liệu trong bảng “students” của cơ sở dữ liệu SQLite.
217 - Viết chương trình để tạo bảng
quan hệ trong cơ sở dữ liệu SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo các bảng quan
hệ trong cơ sở dữ liệu SQLite. Cụ thể, cần tạo ba bảng: Học Sinh,
Lớp Học, và Môn Học.

Thuật toán:
Đầu vào:
Các lệnh SQL để tạo các bảng Học Sinh, Lớp Học và Môn
Học.
Đầu ra:
Các bảng được tạo thành công trong cơ sở dữ liệu SQLite.
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Tạo bảng Học Sinh (nếu chưa tồn tại).
3. Tạo bảng Lớp Học (nếu chưa tồn tại).
4. Tạo bảng Môn Học (nếu chưa tồn tại).
5. Đóng kết nối cơ sở dữ liệu.

Cài đặt thư viện


Không cần cài đặt thêm thư viện nào vì SQLite là một phần của thư
viện chuẩn trong Python.

Code Python
import sqlite3
def connect_to_db():
return sqlite3.connect('example.db')

def create_tables(cursor):
cursor.execute('''
CREATE TABLE IF NOT EXISTS Students (
student_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
class_id INTEGER,
FOREIGN KEY (class_id) REFERENCES
Classes(class_id)
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS Classes (
class_id INTEGER PRIMARY KEY AUTOINCREMENT,
class_name TEXT NOT NULL
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS Subjects (
subject_id INTEGER PRIMARY KEY AUTOINCREMENT,
subject_name TEXT NOT NULL,
student_id INTEGER,
FOREIGN KEY (student_id) REFERENCES
Students(student_id)
)
''')

def main():
conn = connect_to_db()
cursor = conn.cursor()

create_tables(cursor)

conn.commit()
conn.close()
print("Các bảng đã được tạo thành công trong cơ sở dữ
liệu!")

if __name__ == "__main__":
main()

Giải thích code


1. Kết nối tới cơ sở dữ liệu:
Hàm connect_to_db(): Kết nối tới cơ sở dữ liệu SQLite và
trả về đối tượng kết nối.
2. Tạo các bảng:
Hàm create_tables(cursor): Tạo các bảng “Students”,
“Classes”, và “Subjects” với các mối quan hệ ngoại khóa
giữa các bảng.
Bảng “Students” có các cột: student_id, name, age, và
class_id. class_id là khóa ngoại tham chiếu tới
class_id trong bảng “Classes”.
Bảng “Classes” có các cột: class_id và class_name.
Bảng “Subjects” có các cột: subject_id, subject_name,
và student_id. student_id là khóa ngoại tham chiếu tới
student_id trong bảng “Students”.
3. Thực hiện và đóng kết nối:
Hàm main(): Kết nối tới cơ sở dữ liệu, tạo các bảng nếu
chưa tồn tại, và đóng kết nối sau khi hoàn thành.

Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo các bảng mới với các mối quan hệ ngoại khóa bằng CREATE
TABLE IF NOT EXISTS.
Đóng kết nối bằng conn.close().

Chương trình này cung cấp một cách để tạo các bảng Học Sinh,
Lớp Học, và Môn Học trong cơ sở dữ liệu SQLite, cùng với các mối
quan hệ khóa ngoại giữa chúng.
218 - Viết chương trình để thực hiện
join giữa hai bảng trong cơ sở dữ liệu
SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để thực hiện phép join
giữa hai bảng trong cơ sở dữ liệu SQLite. Chương trình sẽ cung cấp
một menu để người dùng có thể xem dữ liệu từng bảng và dữ liệu
join.

Thuật toán:
Đầu vào:
Các lệnh SQL để tạo bảng, chèn dữ liệu và thực hiện phép
join.
Lựa chọn của người dùng từ menu.
Đầu ra:
Dữ liệu từ các bảng hoặc kết quả phép join.
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Tạo bảng Học Sinh và Lớp Học nếu chưa tồn tại.
3. Cung cấp menu để người dùng lựa chọn:
Xem dữ liệu từ bảng Học Sinh.
Xem dữ liệu từ bảng Lớp Học.
Xem dữ liệu từ phép join giữa hai bảng.
Thoát chương trình.
4. Thực hiện các thao tác tương ứng theo lựa chọn của người
dùng.
5. Đóng kết nối cơ sở dữ liệu.
Cài đặt thư viện
Không cần cài đặt thêm thư viện nào vì SQLite là một phần của thư
viện chuẩn trong Python.

Code Python
import sqlite3

def connect_to_db():
return sqlite3.connect('example.db')

def create_tables(cursor):
cursor.execute('''
CREATE TABLE IF NOT EXISTS Students (
student_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
class_id INTEGER,
FOREIGN KEY (class_id) REFERENCES
Classes(class_id)
)
''')

cursor.execute('''
CREATE TABLE IF NOT EXISTS Classes (
class_id INTEGER PRIMARY KEY AUTOINCREMENT,
class_name TEXT NOT NULL
)
''')

def insert_sample_data(cursor):
# Thêm dữ liệu mẫu vào bảng Classes
cursor.execute('INSERT INTO Classes (class_name) VALUES
("Class A")')
cursor.execute('INSERT INTO Classes (class_name) VALUES
("Class B")')

# Thêm dữ liệu mẫu vào bảng Students


cursor.execute('INSERT INTO Students (name, age,
class_id) VALUES ("Alice", 20, 1)')
cursor.execute('INSERT INTO Students (name, age,
class_id) VALUES ("Bob", 22, 2)')
cursor.execute('INSERT INTO Students (name, age,
class_id) VALUES ("Charlie", 23, 1)')

def display_all_data_from_students(cursor):
cursor.execute('SELECT * FROM Students')
rows = cursor.fetchall()
for row in rows:
print(row)

def display_all_data_from_classes(cursor):
cursor.execute('SELECT * FROM Classes')
rows = cursor.fetchall()
for row in rows:
print(row)

def display_joined_data(cursor):
cursor.execute('''
SELECT Students.student_id, Students.name,
Students.age, Classes.class_name
FROM Students
JOIN Classes ON Students.class_id = Classes.class_id
''')
rows = cursor.fetchall()
for row in rows:
print(row)

def main():
conn = connect_to_db()
cursor = conn.cursor()

create_tables(cursor)
insert_sample_data(cursor)
conn.commit()

while True:
print("Menu:")
print("1. Xem dữ liệu từ bảng Học Sinh")
print("2. Xem dữ liệu từ bảng Lớp Học")
print("3. Xem dữ liệu từ phép join giữa hai bảng")
print("4. Thoát")
choice = input("Chọn một tùy chọn (1/2/3/4): ")

if choice == '1':
display_all_data_from_students(cursor)
elif choice == '2':
display_all_data_from_classes(cursor)
elif choice == '3':
display_joined_data(cursor)
elif choice == '4':
break
else:
print("Lựa chọn không hợp lệ, vui lòng thử lại.")

conn.close()

if __name__ == "__main__":
main()

Giải thích code


1. Kết nối tới cơ sở dữ liệu:
Hàm connect_to_db(): Kết nối tới cơ sở dữ liệu SQLite và
trả về đối tượng kết nối.
2. Tạo các bảng:
Hàm create_tables(cursor): Tạo các bảng “Students” và
“Classes” với các mối quan hệ ngoại khóa giữa các bảng.
3. Chèn dữ liệu mẫu:
Hàm insert_sample_data(cursor): Chèn dữ liệu mẫu vào
các bảng “Students” và “Classes” để có dữ liệu để hiển thị.
4. Hiển thị dữ liệu từ các bảng:
Hàm display_all_data_from_students(cursor): Truy vấn và
hiển thị tất cả dữ liệu từ bảng “Students”.
Hàm display_all_data_from_classes(cursor): Truy vấn và
hiển thị tất cả dữ liệu từ bảng “Classes”.
5. Hiển thị dữ liệu từ phép join:
Hàm display_joined_data(cursor): Thực hiện phép join
giữa hai bảng “Students” và “Classes” và hiển thị kết quả.
6. Menu và xử lý lựa chọn của người dùng:
Hàm main(): Kết nối tới cơ sở dữ liệu, tạo các bảng nếu
chưa tồn tại, chèn dữ liệu mẫu, và hiển thị menu cho người
dùng. Thực hiện các thao tác tương ứng theo lựa chọn của
người dùng:
Xem dữ liệu từ bảng Học Sinh.
Xem dữ liệu từ bảng Lớp Học.
Xem dữ liệu từ phép join giữa hai bảng.
Thoát chương trình.
Sử dụng vòng lặp while True để hiển thị menu liên tục cho
đến khi người dùng chọn thoát.

Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo các bảng mới với các mối quan hệ ngoại khóa bằng CREATE
TABLE IF NOT EXISTS.
Chèn dữ liệu mẫu vào các bảng để có dữ liệu để hiển thị.
Truy vấn dữ liệu bằng SELECT.
Thực hiện phép join giữa các bảng bằng JOIN.
Menu cho người dùng với các lựa chọn để xem dữ liệu từ từng
bảng hoặc từ phép join giữa hai bảng.
Đóng kết nối bằng conn.close().

Chương trình này cung cấp một cách để tạo các bảng, chèn dữ liệu
mẫu, và hiển thị dữ liệu từ từng bảng hoặc từ phép join giữa hai
bảng trong cơ sở dữ liệu SQLite.
219 - Viết chương trình để thực hiện
aggregate functions trong cơ sở dữ
liệu SQL

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để thực hiện các
aggregate functions (các hàm tổng hợp) trong cơ sở dữ liệu SQLite.
Chương trình sẽ cung cấp một menu để người dùng có thể chọn và
xem kết quả của các hàm tổng hợp này.

Thuật toán:
Đầu vào:
Các lệnh SQL để tạo bảng, chèn dữ liệu và thực hiện các
hàm tổng hợp.
Lựa chọn của người dùng từ menu.
Đầu ra:
Kết quả của các hàm tổng hợp từ cơ sở dữ liệu.
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Tạo bảng Học Sinh nếu chưa tồn tại.
3. Chèn dữ liệu mẫu vào bảng.
4. Cung cấp menu để người dùng lựa chọn:
Xem tổng số học sinh.
Xem tuổi trung bình của học sinh.
Xem tuổi lớn nhất của học sinh.
Xem tuổi nhỏ nhất của học sinh.
Thoát chương trình.
5. Thực hiện các thao tác tương ứng theo lựa chọn của người
dùng.
6. Đóng kết nối cơ sở dữ liệu.
Cài đặt thư viện
Không cần cài đặt thêm thư viện nào vì SQLite là một phần của thư
viện chuẩn trong Python.

Code Python
import sqlite3

def connect_to_db():
return sqlite3.connect('example.db')

def create_table(cursor):
cursor.execute('''
CREATE TABLE IF NOT EXISTS Students (
student_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)
''')

def insert_sample_data(cursor):
cursor.execute('INSERT INTO Students (name, age) VALUES
("Alice", 20)')
cursor.execute('INSERT INTO Students (name, age) VALUES
("Bob", 22)')
cursor.execute('INSERT INTO Students (name, age) VALUES
("Charlie", 23)')
cursor.execute('INSERT INTO Students (name, age) VALUES
("David", 21)')
cursor.execute('INSERT INTO Students (name, age) VALUES
("Eve", 22)')

def get_total_students(cursor):
cursor.execute('SELECT COUNT(*) FROM Students')
return cursor.fetchone()[0]

def get_average_age(cursor):
cursor.execute('SELECT AVG(age) FROM Students')
return cursor.fetchone()[0]

def get_max_age(cursor):
cursor.execute('SELECT MAX(age) FROM Students')
return cursor.fetchone()[0]

def get_min_age(cursor):
cursor.execute('SELECT MIN(age) FROM Students')
return cursor.fetchone()[0]

def main():
conn = connect_to_db()
cursor = conn.cursor()

create_table(cursor)
insert_sample_data(cursor)
conn.commit()

while True:
print("Menu:")
print("1. Xem tổng số học sinh")
print("2. Xem tuổi trung bình của học sinh")
print("3. Xem tuổi lớn nhất của học sinh")
print("4. Xem tuổi nhỏ nhất của học sinh")
print("5. Thoát")
choice = input("Chọn một tùy chọn (1/2/3/4/5): ")

if choice == '1':
total_students = get_total_students(cursor)
print(f"Tổng số học sinh: {total_students}")
elif choice == '2':
average_age = get_average_age(cursor)
print(f"Tuổi trung bình của học sinh:
{average_age:.2f}")
elif choice == '3':
max_age = get_max_age(cursor)
print(f"Tuổi lớn nhất của học sinh: {max_age}")
elif choice == '4':
min_age = get_min_age(cursor)
print(f"Tuổi nhỏ nhất của học sinh: {min_age}")
elif choice == '5':
break
else:
print("Lựa chọn không hợp lệ, vui lòng thử lại.")

conn.close()

if __name__ == "__main__":
main()

Giải thích code


1. Kết nối tới cơ sở dữ liệu:
Hàm connect_to_db(): Kết nối tới cơ sở dữ liệu SQLite và
trả về đối tượng kết nối.
2. Tạo bảng:
Hàm create_table(cursor): Tạo bảng “Students” nếu bảng
chưa tồn tại.
3. Chèn dữ liệu mẫu:
Hàm insert_sample_data(cursor): Chèn dữ liệu mẫu vào
bảng “Students”.
4. Thực hiện các hàm tổng hợp:
Hàm get_total_students(cursor): Truy vấn và trả về tổng
số học sinh từ bảng “Students”.
Hàm get_average_age(cursor): Truy vấn và trả về tuổi trung
bình của học sinh từ bảng “Students”.
Hàm get_max_age(cursor): Truy vấn và trả về tuổi lớn nhất
của học sinh từ bảng “Students”.
Hàm get_min_age(cursor): Truy vấn và trả về tuổi nhỏ nhất
của học sinh từ bảng “Students”.
5. Menu và xử lý lựa chọn của người dùng:
Hàm main(): Kết nối tới cơ sở dữ liệu, tạo bảng nếu chưa
tồn tại, chèn dữ liệu mẫu, và hiển thị menu cho người dùng.
Thực hiện các thao tác tương ứng theo lựa chọn của người
dùng:
Xem tổng số học sinh.
Xem tuổi trung bình của học sinh.
Xem tuổi lớn nhất của học sinh.
Xem tuổi nhỏ nhất của học sinh.
Thoát chương trình.
Sử dụng vòng lặp while True để hiển thị menu liên tục cho
đến khi người dùng chọn thoát.

Bổ sung
Không có cách giải khác cho bài toán này.

Tóm tắt:
import sqlite3 để làm việc với SQLite.
Kết nối tới cơ sở dữ liệu bằng sqlite3.connect.
Tạo bảng mới bằng CREATE TABLE IF NOT EXISTS.
Chèn dữ liệu mẫu vào bảng để có dữ liệu để hiển thị.
Thực hiện các hàm tổng hợp như COUNT, AVG, MAX, MIN.
Menu cho người dùng với các lựa chọn để xem kết quả của các
hàm tổng hợp.
Đóng kết nối bằng conn.close().

Chương trình này cung cấp một cách để tạo bảng, chèn dữ liệu
mẫu, và hiển thị kết quả của các hàm tổng hợp từ bảng “Students”
trong cơ sở dữ liệu SQLite.
220 - Viết chương trình để thực hiện
subquery trong cơ sở dữ liệu SQL

Giải thích đề bài


Bài tập yêu cầu viết một chương trình Python để thực hiện các truy
vấn phụ (subquery) trên cơ sở dữ liệu SQLite. Chương trình sẽ có
một menu để người dùng chọn và hiển thị kết quả của các truy vấn
chính và truy vấn phụ.

Thuật toán
Đầu vào:
Cơ sở dữ liệu SQLite.
Menu cho phép người dùng chọn các truy vấn.
Đầu ra:
Kết quả của các truy vấn được hiển thị trên màn hình.
Các bước thực hiện:
1. Kết nối tới cơ sở dữ liệu SQLite.
2. Hiển thị menu cho phép người dùng chọn các truy vấn.
3. Thực hiện truy vấn dựa trên lựa chọn của người dùng.
4. Hiển thị kết quả của truy vấn hoặc truy vấn phụ.

Cài đặt thư viện


import sqlite3

Code Python
import sqlite3

def create_database():
# Tạo cơ sở dữ liệu SQLite và bảng mẫu
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# Tạo bảng Employees


cursor.execute('''CREATE TABLE IF NOT EXISTS Employees (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
department TEXT NOT NULL,
salary REAL NOT NULL)''')

# Tạo bảng Departments


cursor.execute('''CREATE TABLE IF NOT EXISTS Departments
(
department_id INTEGER PRIMARY KEY,
department_name TEXT NOT NULL)''')

# Thêm dữ liệu mẫu


cursor.execute("INSERT INTO Employees (name, department,
salary) VALUES ('Alice', 'HR', 50000)")
cursor.execute("INSERT INTO Employees (name, department,
salary) VALUES ('Bob', 'IT', 60000)")
cursor.execute("INSERT INTO Employees (name, department,
salary) VALUES ('Charlie', 'IT', 70000)")
cursor.execute("INSERT INTO Employees (name, department,
salary) VALUES ('David', 'HR', 55000)")

cursor.execute("INSERT INTO Departments (department_name)


VALUES ('HR')")
cursor.execute("INSERT INTO Departments (department_name)
VALUES ('IT')")
cursor.execute("INSERT INTO Departments (department_name)
VALUES ('Finance')")

conn.commit()
conn.close()

def execute_query(query):
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute(query)
rows = cursor.fetchall()
conn.close()
return rows

def menu():
while True:
print("\nMenu:")
print("1. Xem tất cả nhân viên")
print("2. Xem tất cả phòng ban")
print("3. Xem nhân viên với mức lương cao nhất trong
từng phòng ban (subquery)")
print("4. Thoát")
choice = input("Chọn một tùy chọn: ")

if choice == '1':
query = "SELECT * FROM Employees"
rows = execute_query(query)
print("\nTất cả nhân viên:")
for row in rows:
print(row)

elif choice == '2':


query = "SELECT * FROM Departments"
rows = execute_query(query)
print("\nTất cả phòng ban:")
for row in rows:
print(row)

elif choice == '3':


query = """
SELECT name, department, salary
FROM Employees
WHERE salary = (
SELECT MAX(salary)
FROM Employees AS e2
WHERE e2.department = Employees.department
)
"""
rows = execute_query(query)
print("\nNhân viên với mức lương cao nhất trong
từng phòng ban:")
for row in rows:
print(row)

elif choice == '4':


print("Thoát chương trình.")
break

else:
print("Tùy chọn không hợp lệ, vui lòng chọn
lại.")

# Tạo cơ sở dữ liệu và bảng mẫu


create_database()

# Chạy menu chương trình


menu()

Giải thích code


1. Khởi tạo và kết nối cơ sở dữ liệu:

Sử dụng sqlite3.connect để tạo và kết nối tới cơ sở dữ liệu


SQLite có tên ‘example.db’.
Hàm create_database tạo bảng và thêm dữ liệu mẫu nếu
chúng chưa tồn tại.

2. Tạo bảng và thêm dữ liệu mẫu:

Tạo hai bảng là Employees và Departments.


Chèn các bản ghi mẫu vào hai bảng này để có dữ liệu cho
các truy vấn.

3. Thực hiện truy vấn:

Hàm execute_query nhận một câu truy vấn SQL, thực hiện
nó và trả về kết quả.

4. Menu chương trình:


Hiển thị các tùy chọn cho người dùng.
Thực hiện truy vấn SQL tương ứng dựa trên lựa chọn của
người dùng.
Tùy chọn bao gồm: xem tất cả nhân viên, xem tất cả phòng
ban, và xem nhân viên có mức lương cao nhất trong từng
phòng ban (subquery).
Lựa chọn ‘Thoát’ cho phép người dùng kết thúc chương
trình.

Tóm tắt:
Kết nối SQLite: Sử dụng sqlite3.connect để kết nối và thao
tác với cơ sở dữ liệu SQLite.
Tạo bảng và chèn dữ liệu: Sử dụng câu lệnh SQL để tạo bảng
và chèn dữ liệu mẫu.
Thực hiện truy vấn: Sử dụng cursor.execute và fetchall để
thực hiện và lấy kết quả của các truy vấn SQL.
Menu điều hướng: Sử dụng vòng lặp và điều kiện để điều
hướng qua các tùy chọn của người dùng và thực hiện các truy
vấn tương ứng.

Chương trình cho phép người dùng xem dữ liệu từ cơ sở dữ liệu


SQLite và thực hiện các truy vấn phụ để lấy thông tin chi tiết.
Chương 23 : Xử lý dữ liệu cơ
bản
221. Viết chương trình để đọc dữ liệu từ tệp CSV.
222. Viết chương trình để ghi dữ liệu vào tệp CSV.
223. Viết chương trình để đọc dữ liệu từ tệp Excel.
224. Viết chương trình để ghi dữ liệu vào tệp Excel.
225. Viết chương trình để đọc dữ liệu từ tệp JSON.
226. Viết chương trình để ghi dữ liệu vào tệp JSON.
227. Viết chương trình để phân tích dữ liệu từ tệp CSV.
228. Viết chương trình để phân tích dữ liệu từ tệp Excel.
229. Viết chương trình để phân tích dữ liệu từ tệp JSON.
230. Viết chương trình để tạo báo cáo dữ liệu đơn giản.
221 - Viết chương trình để đọc dữ liệu
từ tệp CSV

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để đọc dữ liệu từ tệp
CSV. Chương trình cần thực hiện việc mở và đọc nội dung của tệp
CSV, sau đó xử lý và hiển thị dữ liệu.

Thuật toán:
Đầu vào: Một tệp CSV chứa dữ liệu.
Đầu ra: Nội dung của tệp CSV được đọc và hiển thị.
Các bước thực hiện:
1. Mở tệp CSV.
2. Đọc nội dung tệp CSV.
3. Hiển thị nội dung tệp CSV.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện csv của Python để thực hiện việc đọc
tệp CSV.

Code Python
import csv

# Đường dẫn đến tệp CSV


file_path = 'path_to_your_csv_file.csv'

# Đọc và hiển thị nội dung tệp CSV


with open(file_path, newline='', encoding='utf-8') as
csvfile:
csvreader = csv.reader(csvfile)
for row in csvreader:
print(row)

Giải thích code


1. import csv
Thư viện csv được import để sử dụng các hàm liên quan đến
việc xử lý tệp CSV.
2. file_path = ‘path_to_your_csv_file.csv’
Biến file_path chứa đường dẫn đến tệp CSV cần đọc.
3. with open(file_path, newline=’‘, encoding=’utf-8’) as csvfile
Mở tệp CSV trong chế độ đọc ('r') với mã hóa UTF-8.
Sử dụng newline='' để tránh việc thêm dòng trống khi đọc
tệp CSV.
4. csvreader = csv.reader(csvfile)
Sử dụng csv.reader để đọc nội dung tệp CSV.
5. for row in csvreader: print(row)
Lặp qua từng dòng trong tệp CSV và in ra nội dung của từng
dòng.

Bổ sung
Có thể sử dụng thư viện pandas để đọc tệp CSV và hiển thị dữ
liệu dưới dạng DataFrame.

Tóm tắt:
Sử dụng thư viện csv để đọc tệp CSV.
Sử dụng cú pháp with open để mở tệp một cách an toàn.
Sử dụng csv.reader để đọc nội dung tệp CSV.
Lặp qua từng dòng trong tệp CSV và in ra nội dung.
Chương trình đọc nội dung từ tệp CSV và hiển thị nội dung đó.
222 - Viết chương trình để ghi dữ liệu
vào tệp CSV

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để ghi dữ liệu vào tệp
CSV. Chương trình sẽ tạo và ghi dữ liệu vào một tệp CSV mới.

Thuật toán:
Đầu vào: Dữ liệu cần ghi vào tệp CSV.
Đầu ra: Một tệp CSV chứa dữ liệu đã được ghi.
Các bước thực hiện:
1. Mở (hoặc tạo mới) tệp CSV.
2. Ghi dữ liệu vào tệp CSV.
3. Đóng tệp CSV.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện csv của Python để thực hiện việc ghi
dữ liệu vào tệp CSV.

Code Python
import csv

# Dữ liệu cần ghi vào tệp CSV


data = [
['Name', 'Age', 'City'],
['Alice', 30, 'New York'],
['Bob', 25, 'Los Angeles'],
['Charlie', 35, 'Chicago']
]
# Đường dẫn đến tệp CSV
file_path = 'output.csv'

# Ghi dữ liệu vào tệp CSV


with open(file_path, mode='w', newline='', encoding='utf-8')
as csvfile:
csvwriter = csv.writer(csvfile)
for row in data:
csvwriter.writerow(row)

Giải thích code


1. import csv
Thư viện csv được import để sử dụng các hàm liên quan đến
việc xử lý tệp CSV.
2. data = [[‘Name’, ‘Age’, ‘City’], …]
Biến data chứa dữ liệu cần ghi vào tệp CSV, dưới dạng
danh sách các danh sách.
3. file_path = ‘output.csv’
Biến file_path chứa đường dẫn đến tệp CSV sẽ được tạo
hoặc ghi.
4. with open(file_path, mode=‘w’, newline=’‘, encoding=’utf-8’)
as csvfile
Mở (hoặc tạo mới) tệp CSV trong chế độ ghi ('w') với mã
hóa UTF-8.
Sử dụng newline='' để tránh việc thêm dòng trống khi ghi
vào tệp CSV.
5. csvwriter = csv.writer(csvfile)
Sử dụng csv.writer để tạo đối tượng ghi vào tệp CSV.
6. for row in data: csvwriter.writerow(row)
Lặp qua từng dòng trong data và ghi vào tệp CSV bằng
phương thức writerow.
Bổ sung
Có thể sử dụng thư viện pandas để ghi dữ liệu vào tệp CSV.

Tóm tắt:
Sử dụng thư viện csv để ghi tệp CSV.
Sử dụng cú pháp with open để mở hoặc tạo mới tệp một cách
an toàn.
Sử dụng csv.writer để ghi nội dung vào tệp CSV.
Lặp qua từng dòng trong dữ liệu và ghi vào tệp CSV.
Chương trình tạo và ghi dữ liệu vào một tệp CSV mới.
223 - Viết chương trình để đọc dữ liệu
từ tệp Excel

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để đọc dữ liệu từ tệp
Excel. Chương trình sẽ mở và đọc nội dung của tệp Excel, sau đó
hiển thị dữ liệu.

Thuật toán:
Đầu vào: Một tệp Excel chứa dữ liệu.
Đầu ra: Nội dung của tệp Excel được đọc và hiển thị.
Các bước thực hiện:
1. Mở tệp Excel.
2. Lấy sheet cần đọc dữ liệu.
3. Đọc dữ liệu từ các ô trong sheet.
4. Hiển thị dữ liệu.

Cài đặt thư viện openpyxl


Chúng ta sẽ sử dụng thư viện openpyxl của Python để thực hiện
việc đọc dữ liệu từ tệp Excel.

Nếu bạn chưa cài đặt thư viện openpyxl, bạn có thể cài đặt bằng
lệnh sau:
pip install openpyxl
Code Python
import openpyxl

# Đường dẫn đến tệp Excel


file_path = 'path_to_your_excel_file.xlsx'

# Mở tệp Excel
workbook = openpyxl.load_workbook(file_path)

# Chọn sheet cần đọc (ví dụ: sheet đầu tiên)


sheet = workbook.active

# Đọc và hiển thị nội dung của sheet


for row in sheet.iter_rows(values_only=True):
print(row)

Giải thích code


1. import openpyxl
Thư viện openpyxl được import để sử dụng các hàm liên
quan đến việc xử lý tệp Excel.
2. file_path = ‘path_to_your_excel_file.xlsx’
Biến file_path chứa đường dẫn đến tệp Excel cần đọc.
3. workbook = openpyxl.load_workbook(file_path)
Mở tệp Excel và tải workbook.
4. sheet = workbook.active
Lấy sheet đang hoạt động (mặc định là sheet đầu tiên).
5. for row in sheet.iter_rows(values_only=True): print(row)
Sử dụng phương thức iter_rows để lặp qua từng dòng trong
sheet và in ra nội dung của từng dòng.

Bổ sung
Có thể sử dụng thư viện pandas để đọc dữ liệu từ tệp Excel.
Tóm tắt:
Sử dụng thư viện openpyxl để đọc tệp Excel.
Mở tệp Excel và lấy workbook.
Chọn sheet cần đọc.
Sử dụng iter_rows để lặp qua từng dòng trong sheet và hiển thị
nội dung.
Chương trình mở và đọc nội dung từ tệp Excel và hiển thị dữ liệu
đó.
224 - Viết chương trình để ghi dữ liệu
vào tệp Excel

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để ghi dữ liệu vào tệp
Excel. Chương trình sẽ tạo và ghi dữ liệu vào một tệp Excel mới.

Thuật toán:
Đầu vào: Dữ liệu cần ghi vào tệp Excel.
Đầu ra: Một tệp Excel chứa dữ liệu đã được ghi.
Các bước thực hiện:
1. Tạo một workbook mới.
2. Thêm một sheet mới vào workbook.
3. Ghi dữ liệu vào các ô trong sheet.
4. Lưu workbook dưới dạng tệp Excel.

Cài đặt thư viện openpyxl


Chúng ta sẽ sử dụng thư viện openpyxl của Python để thực hiện
việc ghi dữ liệu vào tệp Excel.

Nếu bạn chưa cài đặt thư viện openpyxl, bạn có thể cài đặt bằng
lệnh sau:
pip install openpyxl

Code Python
import openpyxl
# Dữ liệu cần ghi vào tệp Excel
data = [
['Name', 'Age', 'City'],
['Alice', 30, 'New York'],
['Bob', 25, 'Los Angeles'],
['Charlie', 35, 'Chicago']
]

# Tạo workbook mới


workbook = openpyxl.Workbook()
sheet = workbook.active

# Ghi dữ liệu vào sheet


for row in data:
sheet.append(row)

# Đường dẫn đến tệp Excel


file_path = 'output.xlsx'

# Lưu workbook vào tệp Excel


workbook.save(file_path)

Giải thích code


1. import openpyxl
Thư viện openpyxl được import để sử dụng các hàm liên
quan đến việc xử lý tệp Excel.
2. data = [[‘Name’, ‘Age’, ‘City’], …]
Biến data chứa dữ liệu cần ghi vào tệp Excel, dưới dạng
danh sách các danh sách.
3. workbook = openpyxl.Workbook()
Tạo một workbook mới.
4. sheet = workbook.active
Lấy sheet đang hoạt động (mặc định là sheet đầu tiên).
5. for row in data: sheet.append(row)
Lặp qua từng dòng trong data và thêm vào sheet bằng
phương thức append.
6. file_path = ‘output.xlsx’
Biến file_path chứa đường dẫn đến tệp Excel sẽ được tạo
hoặc ghi.
7. workbook.save(file_path)
Lưu workbook vào tệp Excel.

Bổ sung
Có thể sử dụng thư viện pandas kết hợp với openpyxl để ghi dữ liệu
vào tệp Excel.

Tóm tắt:
Sử dụng thư viện openpyxl để ghi tệp Excel.
Tạo workbook và sheet mới.
Sử dụng phương thức append để thêm dữ liệu vào sheet.
Lưu workbook vào tệp Excel.
Chương trình tạo và ghi dữ liệu vào một tệp Excel mới.
225 - Viết chương trình để đọc dữ liệu
từ tệp JSON

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để đọc dữ liệu từ tệp
JSON. Chương trình sẽ mở và đọc nội dung của tệp JSON, sau đó
hiển thị dữ liệu.

Thuật toán:
Đầu vào: Một tệp JSON chứa dữ liệu.
Đầu ra: Nội dung của tệp JSON được đọc và hiển thị.
Các bước thực hiện:
1. Mở tệp JSON.
2. Đọc dữ liệu từ tệp JSON.
3. Hiển thị dữ liệu.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện json của Python để thực hiện việc
đọc dữ liệu từ tệp JSON.

Code Python
import json

# Đường dẫn đến tệp JSON


file_path = 'students.json'

# Đọc dữ liệu từ tệp JSON


with open(file_path, 'r', encoding='utf-8') as jsonfile:
data = json.load(jsonfile)
# Hiển thị dữ liệu
print(data)

Giải thích code


1. import json
Thư viện json được import để sử dụng các hàm liên quan
đến việc xử lý tệp JSON.
2. file_path = ‘students.json’
Biến file_path chứa đường dẫn đến tệp JSON cần đọc.
3. with open(file_path, ‘r’, encoding=‘utf-8’) as jsonfile
Mở tệp JSON trong chế độ đọc ('r') với mã hóa UTF-8.
4. data = json.load(jsonfile)
Sử dụng json.load để đọc dữ liệu từ tệp JSON và lưu trữ
vào biến data.
5. print(data)
Hiển thị dữ liệu được đọc từ tệp JSON.

Bổ sung
Có thể sử dụng thư viện pandas để đọc dữ liệu từ tệp JSON và hiển
thị dưới dạng DataFrame.

Tóm tắt:
Sử dụng thư viện json để đọc tệp JSON.
Mở tệp JSON trong chế độ đọc.
Sử dụng json.load để đọc nội dung từ tệp JSON.
Hiển thị dữ liệu được đọc từ tệp JSON.
Chương trình mở và đọc nội dung từ tệp JSON và hiển thị dữ liệu
đó.
226 - Viết chương trình để ghi dữ liệu
vào tệp JSON

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để ghi dữ liệu vào tệp
JSON. Dữ liệu sẽ là một danh sách học sinh, mỗi học sinh có các
thông tin như tên, tuổi và thành phố. Chương trình sẽ tạo và ghi dữ
liệu vào một tệp JSON mới.

Thuật toán:
Đầu vào: Dữ liệu học sinh cần ghi vào tệp JSON.
Đầu ra: Một tệp JSON chứa dữ liệu đã được ghi.
Các bước thực hiện:
1. Tạo dữ liệu học sinh.
2. Mở (hoặc tạo mới) tệp JSON.
3. Ghi dữ liệu vào tệp JSON.
4. Đóng tệp JSON.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện json của Python để thực hiện việc ghi
dữ liệu vào tệp JSON.

Code Python
import json

# Dữ liệu giả về danh sách học sinh


students = [
{"name": "Alice", "age": 30, "city": "New York"},
{"name": "Bob", "age": 25, "city": "Los Angeles"},
{"name": "Charlie", "age": 35, "city": "Chicago"}
]

# Đường dẫn đến tệp JSON


file_path = 'students.json'

# Ghi dữ liệu vào tệp JSON


with open(file_path, 'w', encoding='utf-8') as jsonfile:
json.dump(students, jsonfile, ensure_ascii=False,
indent=4)

Giải thích code


1. import json
Thư viện json được import để sử dụng các hàm liên quan
đến việc xử lý tệp JSON.
2. students = […]
Biến students chứa dữ liệu giả về danh sách học sinh, mỗi
học sinh có các thuộc tính name, age, và city.
3. file_path = ‘students.json’
Biến file_path chứa đường dẫn đến tệp JSON sẽ được tạo
hoặc ghi.
4. with open(file_path, ‘w’, encoding=‘utf-8’) as jsonfile
Mở (hoặc tạo mới) tệp JSON trong chế độ ghi ('w') với mã
hóa UTF-8.
5. json.dump(students, jsonfile, ensure_ascii=False, indent=4)
Sử dụng json.dump để ghi dữ liệu vào tệp JSON.
ensure_ascii=False để đảm bảo rằng dữ liệu được ghi dưới
dạng UTF-8.
indent=4 để định dạng tệp JSON với khoảng cách thụt lề là
4 khoảng trắng.
Bổ sung
Có thể sử dụng thư viện pandas để ghi dữ liệu vào tệp JSON nhưng
phương pháp trên với json là đơn giản và hiệu quả nhất cho dữ liệu
không cấu trúc như danh sách học sinh.

Tóm tắt:
Sử dụng thư viện json để ghi tệp JSON.
Tạo dữ liệu học sinh dưới dạng danh sách các từ điển.
Mở hoặc tạo mới tệp JSON trong chế độ ghi.
Sử dụng json.dump để ghi nội dung vào tệp JSON với định dạng
UTF-8 và thụt lề 4 khoảng trắng.
Chương trình tạo và ghi dữ liệu danh sách học sinh vào một tệp
JSON mới.
227 - Viết chương trình để phân tích
dữ liệu từ tệp CSV

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để phân tích dữ liệu từ
tệp CSV và chuyển đổi dữ liệu đó thành một mảng các đối tượng
của một lớp tương ứng. Chương trình cần thực hiện việc mở và đọc
nội dung của tệp CSV, sau đó tạo các đối tượng từ dữ liệu đọc được
và lưu trữ chúng trong một danh sách.

Thuật toán:
Đầu vào: Một tệp CSV chứa dữ liệu.
Đầu ra: Một danh sách các đối tượng được tạo từ dữ liệu trong
tệp CSV.
Các bước thực hiện:
1. Định nghĩa lớp tương ứng với dữ liệu trong tệp CSV.
2. Mở tệp CSV và đọc nội dung.
3. Tạo các đối tượng từ dữ liệu đọc được và thêm vào danh
sách.
4. Hiển thị danh sách các đối tượng.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện csv của Python để đọc dữ liệu từ tệp
CSV.
Code Python

Định nghĩa lớp Học Sinh


class Student:
def __init__(self, name, age, city):
self.name = name
self.age = age
self.city = city

def __repr__(self):
return f"Student(name={self.name}, age={self.age},
city={self.city})"

Đọc và phân tích dữ liệu từ tệp CSV


import csv

# Đường dẫn đến tệp CSV


file_path = 'students.csv'

# Danh sách để lưu trữ các đối tượng Student


students = []

# Đọc dữ liệu từ tệp CSV và tạo các đối tượng Student


with open(file_path, newline='', encoding='utf-8') as
csvfile:
csvreader = csv.reader(csvfile)
header = next(csvreader) # Đọc dòng tiêu đề
for row in csvreader:
# Tạo đối tượng Student và thêm vào danh sách
student = Student(name=row[0], age=int(row[1]),
city=row[2])
students.append(student)

# Hiển thị danh sách các đối tượng Student


for student in students:
print(student)
Giải thích code
1. class Student:
Định nghĩa lớp Student với các thuộc tính name, age, và city.
Hàm khởi tạo (__init__) để gán giá trị cho các thuộc tính khi
tạo đối tượng.
Hàm __repr__ để trả về chuỗi đại diện cho đối tượng
Student.
2. import csv
Thư viện csv được import để sử dụng các hàm liên quan đến
việc xử lý tệp CSV.
3. file_path = ‘students.csv’
Biến file_path chứa đường dẫn đến tệp CSV cần đọc.
4. students = []
Danh sách students để lưu trữ các đối tượng Student.
5. with open(file_path, newline=’‘, encoding=’utf-8’) as csvfile
Mở tệp CSV trong chế độ đọc ('r') với mã hóa UTF-8.
6. csvreader = csv.reader(csvfile)
Sử dụng csv.reader để đọc nội dung tệp CSV.
7. header = next(csvreader)
Đọc dòng tiêu đề từ tệp CSV.
8. for row in csvreader:
Lặp qua từng dòng trong tệp CSV.
9. student = Student(name=row[0], age=int(row[1]),
city=row[2])
Tạo đối tượng Student từ dữ liệu trong dòng và thêm vào
danh sách students.
10. students.append(student)
Thêm đối tượng Student vào danh sách students.
11. for student in students: print(student)
Hiển thị danh sách các đối tượng Student.
Bổ sung
Có thể sử dụng thư viện pandas để đọc dữ liệu từ tệp CSV và
chuyển đổi thành các đối tượng.

Tóm tắt:
Định nghĩa lớp Student với các thuộc tính name, age, và city.
Sử dụng thư viện csv để đọc tệp CSV.
Tạo danh sách các đối tượng Student từ dữ liệu trong tệp CSV.
Hiển thị danh sách các đối tượng Student.
Chương trình đọc dữ liệu từ tệp CSV và chuyển đổi dữ liệu đó thành
một danh sách các đối tượng Student.
228 - Viết chương trình để phân tích
dữ liệu từ tệp Excel

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để phân tích dữ liệu từ
tệp Excel và chuyển đổi dữ liệu đó thành một mảng các đối tượng
của một lớp tương ứng. Chương trình cần thực hiện việc mở và đọc
nội dung của tệp Excel, sau đó tạo các đối tượng từ dữ liệu đọc
được và lưu trữ chúng trong một danh sách.

Thuật toán:
Đầu vào: Một tệp Excel chứa dữ liệu.
Đầu ra: Một danh sách các đối tượng được tạo từ dữ liệu trong
tệp Excel.
Các bước thực hiện:
1. Định nghĩa lớp tương ứng với dữ liệu trong tệp Excel.
2. Mở tệp Excel và đọc nội dung.
3. Tạo các đối tượng từ dữ liệu đọc được và thêm vào danh
sách.
4. Hiển thị danh sách các đối tượng.

Cài đặt thư viện openpyxl


Chúng ta sẽ sử dụng thư viện openpyxl của Python để đọc dữ liệu
từ tệp Excel.

Nếu bạn chưa cài đặt thư viện openpyxl, bạn có thể cài đặt bằng
lệnh sau:
pip install openpyxl
Code Python

Định nghĩa lớp Học Sinh


class Student:
def __init__(self, name, age, city):
self.name = name
self.age = age
self.city = city

def __repr__(self):
return f"Student(name={self.name}, age={self.age},
city={self.city})"

Đọc và phân tích dữ liệu từ tệp Excel


import openpyxl

# Đường dẫn đến tệp Excel


file_path = 'students.xlsx'

# Danh sách để lưu trữ các đối tượng Student


students = []

# Mở tệp Excel và đọc nội dung


workbook = openpyxl.load_workbook(file_path)
sheet = workbook.active

# Đọc dữ liệu từ sheet và tạo các đối tượng Student


for row in sheet.iter_rows(min_row=2, values_only=True): #
Bỏ qua dòng tiêu đề
name, age, city = row
student = Student(name=name, age=age, city=city)
students.append(student)

# Hiển thị danh sách các đối tượng Student


for student in students:
print(student)
Giải thích code
1. class Student:
Định nghĩa lớp Student với các thuộc tính name, age, và city.
Hàm khởi tạo (__init__) để gán giá trị cho các thuộc tính khi
tạo đối tượng.
Hàm __repr__ để trả về chuỗi đại diện cho đối tượng
Student.
2. import openpyxl
Thư viện openpyxl được import để sử dụng các hàm liên
quan đến việc xử lý tệp Excel.
3. file_path = ‘students.xlsx’
Biến file_path chứa đường dẫn đến tệp Excel cần đọc.
4. students = []
Danh sách students để lưu trữ các đối tượng Student.
5. workbook = openpyxl.load_workbook(file_path)
Mở tệp Excel và tải workbook.
6. sheet = workbook.active
Lấy sheet đang hoạt động (mặc định là sheet đầu tiên).
7. for row in sheet.iter_rows(min_row=2, values_only=True):
Sử dụng phương thức iter_rows để lặp qua từng dòng trong
sheet, bắt đầu từ dòng thứ 2 để bỏ qua dòng tiêu đề.
values_only=True để chỉ lấy giá trị của các ô mà không lấy
các đối tượng ô.
8. name, age, city = row
Tách các giá trị trong dòng thành các biến name, age, và city.
9. student = Student(name=name, age=age, city=city)
Tạo đối tượng Student từ dữ liệu trong dòng và thêm vào
danh sách students.
10. students.append(student)
Thêm đối tượng Student vào danh sách students.
11. for student in students: print(student)
Hiển thị danh sách các đối tượng Student.
Bổ sung
Có thể sử dụng thư viện pandas để đọc dữ liệu từ tệp Excel và
chuyển đổi thành các đối tượng.

Tóm tắt:
Định nghĩa lớp Student với các thuộc tính name, age, và city.
Sử dụng thư viện openpyxl để đọc tệp Excel.
Mở tệp Excel và lấy workbook.
Sử dụng iter_rows để lặp qua từng dòng trong sheet, bắt đầu từ
dòng thứ 2 để bỏ qua dòng tiêu đề.
Tạo danh sách các đối tượng Student từ dữ liệu trong tệp Excel.
Hiển thị danh sách các đối tượng Student.
Chương trình đọc dữ liệu từ tệp Excel và chuyển đổi dữ liệu đó
thành một danh sách các đối tượng Student.
229 - Viết chương trình để phân tích
dữ liệu từ tệp JSON

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để phân tích dữ liệu từ
tệp JSON và chuyển đổi dữ liệu đó thành một mảng các đối tượng
của một lớp tương ứng. Chương trình cần thực hiện việc mở và đọc
nội dung của tệp JSON, sau đó tạo các đối tượng từ dữ liệu đọc
được và lưu trữ chúng trong một danh sách.

Thuật toán:
Đầu vào: Một tệp JSON chứa dữ liệu.
Đầu ra: Một danh sách các đối tượng được tạo từ dữ liệu trong
tệp JSON.
Các bước thực hiện:
1. Định nghĩa lớp tương ứng với dữ liệu trong tệp JSON.
2. Mở tệp JSON và đọc nội dung.
3. Tạo các đối tượng từ dữ liệu đọc được và thêm vào danh
sách.
4. Hiển thị danh sách các đối tượng.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện json của Python để đọc dữ liệu từ tệp
JSON.
Code Python

Định nghĩa lớp Học Sinh


class Student:
def __init__(self, name, age, city):
self.name = name
self.age = age
self.city = city

def __repr__(self):
return f"Student(name={self.name}, age={self.age},
city={self.city})"

Đọc và phân tích dữ liệu từ tệp JSON


import json

# Đường dẫn đến tệp JSON


file_path = 'students.json'

# Đọc dữ liệu từ tệp JSON


with open(file_path, 'r', encoding='utf-8') as jsonfile:
data = json.load(jsonfile)

# Danh sách để lưu trữ các đối tượng Student


students = []

# Tạo các đối tượng Student từ dữ liệu đọc được


for item in data:
student = Student(name=item['name'], age=item['age'],
city=item['city'])
students.append(student)

# Hiển thị danh sách các đối tượng Student


for student in students:
print(student)
Giải thích code
1. class Student:
Định nghĩa lớp Student với các thuộc tính name, age, và city.
Hàm khởi tạo (__init__) để gán giá trị cho các thuộc tính khi
tạo đối tượng.
Hàm __repr__ để trả về chuỗi đại diện cho đối tượng
Student.
2. import json
Thư viện json được import để sử dụng các hàm liên quan
đến việc xử lý tệp JSON.
3. file_path = ‘students.json’
Biến file_path chứa đường dẫn đến tệp JSON cần đọc.
4. with open(file_path, ‘r’, encoding=‘utf-8’) as jsonfile
Mở tệp JSON trong chế độ đọc ('r') với mã hóa UTF-8.
5. data = json.load(jsonfile)
Sử dụng json.load để đọc dữ liệu từ tệp JSON và lưu trữ
vào biến data.
6. students = []
Danh sách students để lưu trữ các đối tượng Student.
7. for item in data:
Lặp qua từng phần tử trong danh sách data.
8. student = Student(name=item[‘name’], age=item[‘age’],
city=item[‘city’])
Tạo đối tượng Student từ dữ liệu trong từng phần tử của
danh sách data và thêm vào danh sách students.
9. students.append(student)
Thêm đối tượng Student vào danh sách students.
10. for student in students: print(student)
Hiển thị danh sách các đối tượng Student.
Bổ sung
Có thể sử dụng thư viện pandas để đọc dữ liệu từ tệp JSON và
chuyển đổi thành các đối tượng.

Tóm tắt:
Định nghĩa lớp Student với các thuộc tính name, age, và city.
Sử dụng thư viện json để đọc tệp JSON.
Mở tệp JSON và đọc nội dung vào biến data.
Tạo danh sách các đối tượng Student từ dữ liệu trong tệp
JSON.
Hiển thị danh sách các đối tượng Student.
Chương trình đọc dữ liệu từ tệp JSON và chuyển đổi dữ liệu đó
thành một danh sách các đối tượng Student.
230 - Viết chương trình để tạo báo cáo
dữ liệu đơn giản

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo báo cáo dữ liệu
đơn giản. Chương trình sẽ đọc dữ liệu từ một nguồn (tệp CSV,
JSON, hoặc Excel), phân tích dữ liệu, và tạo một báo cáo đơn giản
dưới dạng văn bản.

Thuật toán:
Đầu vào: Dữ liệu từ tệp CSV, JSON, hoặc Excel.
Đầu ra: Một báo cáo đơn giản dưới dạng văn bản.
Các bước thực hiện:
1. Đọc dữ liệu từ tệp.
2. Phân tích dữ liệu.
3. Tạo báo cáo từ dữ liệu phân tích được.
4. Hiển thị hoặc lưu báo cáo dưới dạng văn bản.

Cài đặt thư viện pandas và openpyxl


Chúng ta sẽ sử dụng thư viện pandas để đọc và phân tích dữ liệu, và
json hoặc openpyxl nếu cần.

Nếu bạn chưa cài đặt các thư viện pandas và openpyxl, bạn có thể
cài đặt bằng lệnh sau:
pip install pandas openpyxl
Code Python

Định nghĩa hàm đọc dữ liệu


import pandas as pd
import json
import openpyxl

def read_csv(file_path):
return pd.read_csv(file_path)

def read_json(file_path):
with open(file_path, 'r', encoding='utf-8') as jsonfile:
data = json.load(jsonfile)
return pd.DataFrame(data)

def read_excel(file_path):
return pd.read_excel(file_path)

Định nghĩa hàm phân tích dữ liệu


def analyze_data(df):
report = {}
report['total_rows'] = len(df)
report['columns'] = list(df.columns)
report['summary'] = df.describe(include='all').to_dict()
return report

Định nghĩa hàm tạo báo cáo


def create_report(report):
report_text = []
report_text.append(f"Total rows: {report['total_rows']}")
report_text.append("Columns:")
for column in report['columns']:
report_text.append(f" - {column}")
report_text.append("Summary statistics:")
for col, stats in report['summary'].items():
report_text.append(f"Column: {col}")
for stat, value in stats.items():
report_text.append(f" {stat}: {value}")
return "\n".join(report_text)

Định nghĩa hàm chính để tạo báo cáo từ tệp


def generate_report(file_path, file_type):
if file_type == 'csv':
df = read_csv(file_path)
elif file_type == 'json':
df = read_json(file_path)
elif file_type == 'excel':
df = read_excel(file_path)
else:
raise ValueError("Unsupported file type")

report = analyze_data(df)
report_text = create_report(report)
return report_text

Sử dụng hàm chính để tạo báo cáo


file_path = 'students.csv' # Thay đổi đường dẫn và kiểu tệp
theo nhu cầu
file_type = 'csv' # 'csv', 'json', hoặc 'excel'

report_text = generate_report(file_path, file_type)


print(report_text)

Giải thích code


1. import pandas as pd, json, openpyxl
Thư viện pandas để đọc và phân tích dữ liệu.
Thư viện json để đọc tệp JSON.
Thư viện openpyxl để đọc tệp Excel.
2. read_csv(file_path), read_json(file_path),
read_excel(file_path)
Các hàm để đọc dữ liệu từ các định dạng tệp khác nhau và
chuyển thành DataFrame.
3. analyze_data(df)
Hàm để phân tích dữ liệu và tạo ra một báo cáo đơn giản
dưới dạng từ điển.
4. create_report(report)
Hàm để tạo báo cáo văn bản từ báo cáo dạng từ điển.
5. generate_report(file_path, file_type)
Hàm chính để đọc tệp, phân tích dữ liệu và tạo báo cáo.
6. Sử dụng hàm chính để tạo báo cáo
Đặt đường dẫn tệp và kiểu tệp, sau đó tạo báo cáo và hiển
thị nó.

Tóm tắt:
Đọc dữ liệu từ tệp CSV, JSON, hoặc Excel.
Phân tích dữ liệu và tạo báo cáo thống kê đơn giản.
Hiển thị báo cáo dưới dạng văn bản.
Chương trình đọc dữ liệu từ tệp, phân tích và tạo báo cáo thống kê
đơn giản dưới dạng văn bản.
Chương 24 : Thực hành lập
trình mạng cơ bản
231. Viết chương trình để tải xuống một tệp từ internet.
232. Viết chương trình để kiểm tra kết nối internet.
233. Viết chương trình để kiểm tra tốc độ internet.
234. Viết chương trình để gửi email.
235. Viết chương trình để nhận email.
236. Viết chương trình để phân giải tên miền.
237. Viết chương trình để tạo một máy chủ TCP đơn giản.
238. Viết chương trình để tạo một máy khách TCP đơn giản.
239. Viết chương trình để tạo một máy chủ UDP đơn giản.
240. Viết chương trình để tạo một máy khách UDP đơn giản.
231 - Viết chương trình để tải xuống
một tệp từ internet

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tải xuống một tệp từ
internet. Chương trình này cần phải lấy URL của tệp từ người dùng,
sau đó tải tệp đó về và lưu vào hệ thống tệp cục bộ.

Thuật toán
Đầu vào: URL của tệp cần tải xuống.
Đầu ra: Tệp được tải xuống và lưu vào thư mục cục bộ.
Các bước thực hiện:
1. Nhận URL của tệp từ người dùng.
2. Tạo tên tệp cục bộ để lưu tệp tải xuống.
3. Sử dụng thư viện requests để tải nội dung từ URL.
4. Ghi nội dung tải về vào tệp cục bộ.
5. Thông báo kết quả cho người dùng.

Cài đặt thư viện


Cài đặt thư viện requests nếu chưa có:
pip install requests

Code Python
import requests

def download_file(url, local_filename):


# Gửi yêu cầu HTTP GET đến URL
with requests.get(url, stream=True) as r:
# Kiểm tra mã trạng thái của phản hồi
r.raise_for_status()
# Mở tệp cục bộ để ghi
with open(local_filename, 'wb') as f:
# Ghi dữ liệu vào tệp theo từng khối (chunk)
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
return local_filename

# Nhận URL từ người dùng


url = input("Nhập URL của tệp cần tải xuống: ")
local_filename = url.split('/')[-1] # Tạo tên tệp cục bộ từ
URL

# Gọi hàm để tải tệp xuống


try:
download_file(url, local_filename)
print(f"Tệp đã được tải xuống thành công và lưu tại:
{local_filename}")
except Exception as e:
print(f"Có lỗi xảy ra: {e}")

Giải thích code


1. Import thư viện:

requests: Sử dụng để gửi yêu cầu HTTP.

2. Định nghĩa hàm download_file:

Tham số:
url: URL của tệp cần tải xuống.
local_filename: Tên tệp cục bộ để lưu tệp tải xuống.
Tạo yêu cầu GET: Sử dụng requests.get(url,
stream=True) để tải nội dung từ URL.
Kiểm tra mã trạng thái: Sử dụng raise_for_status() để
kiểm tra phản hồi HTTP.
Ghi dữ liệu vào tệp cục bộ:
Mở tệp cục bộ bằng chế độ ghi nhị phân ('wb').
Ghi dữ liệu vào tệp theo từng khối (chunk) để tránh tiêu
tốn bộ nhớ.

3. Nhận URL từ người dùng:

Sử dụng input() để nhận URL từ người dùng.


Tạo tên tệp cục bộ bằng cách lấy phần cuối của URL.

4. Gọi hàm download_file:

Gọi hàm download_file với URL và tên tệp cục bộ.


Xử lý lỗi bằng cách sử dụng khối try-except.

Tóm tắt
Sử dụng thư viện requests để gửi yêu cầu HTTP và tải xuống
nội dung từ URL.
Sử dụng input() để nhận đầu vào từ người dùng.
Sử dụng khối try-except để xử lý ngoại lệ và đảm bảo chương
trình không bị dừng đột ngột.
Đọc và ghi dữ liệu bằng cách sử dụng with để đảm bảo tài
nguyên được giải phóng đúng cách.

Chương trình này tải xuống một tệp từ URL được cung cấp bởi
người dùng và lưu tệp đó vào hệ thống tệp cục bộ.
232 - Viết chương trình để kiểm tra kết
nối internet

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để kiểm tra xem máy
tính có kết nối internet hay không. Chương trình này cần gửi yêu
cầu đến một máy chủ đáng tin cậy (ví dụ: Google) và xác định xem
có thể nhận được phản hồi hay không.

Thuật toán
Đầu vào: Không có đầu vào từ người dùng.
Đầu ra: Thông báo cho biết máy tính có kết nối internet hay
không.
Các bước thực hiện:
1. Gửi yêu cầu HTTP GET đến một URL đáng tin cậy (ví dụ:
http://www.google.com).
2. Kiểm tra mã trạng thái của phản hồi để xác định xem kết nối
có thành công hay không.
3. Thông báo kết quả cho người dùng.

Cài đặt thư viện


Cài đặt thư viện requests nếu chưa có:
pip install requests

Code Python
import requests
def check_internet_connection():
url = "http://www.google.com"
timeout = 5
try:
# Gửi yêu cầu GET đến URL và thiết lập thời gian chờ
response = requests.get(url, timeout=timeout)
# Kiểm tra mã trạng thái của phản hồi
if response.status_code == 200:
print("Kết nối internet hoạt động bình thường.")
else:
print("Không thể kết nối internet.")
except requests.ConnectionError:
print("Không thể kết nối internet.")
except requests.Timeout:
print("Yêu cầu kết nối internet đã bị quá thời gian
chờ.")

# Gọi hàm kiểm tra kết nối internet


check_internet_connection()

Giải thích code


1. Import thư viện:

requests: Sử dụng để gửi yêu cầu HTTP.

2. Định nghĩa hàm check_internet_connection:

URL: Chọn http://www.google.com làm URL để kiểm tra kết


nối vì đây là một trang web rất đáng tin cậy.
Thời gian chờ: Đặt thời gian chờ là 5 giây để tránh việc chờ
đợi quá lâu.
Gửi yêu cầu GET: Sử dụng requests.get(url,
timeout=timeout) để gửi yêu cầu GET đến URL với thời
gian chờ đã thiết lập.
Kiểm tra mã trạng thái: Kiểm tra mã trạng thái của phản hồi
để xác định xem kết nối có thành công hay không.
Xử lý ngoại lệ:
requests.ConnectionError: Xảy ra khi không thể kết nối
internet.
requests.Timeout: Xảy ra khi yêu cầu bị quá thời gian
chờ.

3. Gọi hàm check_internet_connection:

Gọi hàm để kiểm tra kết nối internet và in ra kết quả.

Tóm tắt
Sử dụng thư viện requests để gửi yêu cầu HTTP và kiểm tra kết
nối internet.
Kiểm tra mã trạng thái của phản hồi để xác định xem kết nối có
thành công hay không.
Xử lý ngoại lệ để xác định các trường hợp không thể kết nối
hoặc bị quá thời gian chờ.
Thông báo kết quả cho người dùng dựa trên phản hồi từ máy
chủ.

Chương trình này kiểm tra xem máy tính có kết nối internet bằng
cách gửi yêu cầu đến http://www.google.com và xác định phản hồi.
233 - Viết chương trình để kiểm tra tốc
độ internet

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để kiểm tra tốc độ
internet. Chương trình này cần đo lường tốc độ tải xuống, tốc độ tải
lên và độ trễ (ping).

Thuật toán
Đầu vào: Không có đầu vào từ người dùng.
Đầu ra: Tốc độ tải xuống (download speed), tốc độ tải lên
(upload speed) và độ trễ (ping).
Các bước thực hiện:
1. Sử dụng thư viện speedtest-cli để đo lường tốc độ internet.
2. Lấy kết quả của tốc độ tải xuống, tốc độ tải lên và độ trễ.
3. In kết quả ra màn hình.

Cài đặt thư viện


Cài đặt thư viện speedtest-cli nếu chưa có:
pip install speedtest-cli

Code Python
import speedtest

def check_internet_speed():
# Khởi tạo đối tượng Speedtest
st = speedtest.Speedtest()
# Chọn máy chủ tốt nhất dựa trên ping
st.get_best_server()

# Đo tốc độ tải xuống


download_speed = st.download()

# Đo tốc độ tải lên


upload_speed = st.upload()

# Đo độ trễ (ping)
ping = st.results.ping

# Chuyển đổi tốc độ từ bps sang Mbps


download_speed_mbps = download_speed / 1_000_000
upload_speed_mbps = upload_speed / 1_000_000

# In kết quả
print(f"Tốc độ tải xuống: {download_speed_mbps:.2f}
Mbps")
print(f"Tốc độ tải lên: {upload_speed_mbps:.2f} Mbps")
print(f"Độ trễ (ping): {ping:.2f} ms")

# Gọi hàm kiểm tra tốc độ internet


check_internet_speed()

Giải thích code


1. Import thư viện:

speedtest: Sử dụng để đo lường tốc độ internet.

2. Định nghĩa hàm check_internet_speed:

Khởi tạo đối tượng Speedtest: Tạo đối tượng Speedtest


để thực hiện các phép đo.
Chọn máy chủ tốt nhất: Sử dụng st.get_best_server() để
chọn máy chủ tốt nhất dựa trên độ trễ (ping).
Đo tốc độ tải xuống: Sử dụng st.download() để đo tốc độ
tải xuống.
Đo tốc độ tải lên: Sử dụng st.upload() để đo tốc độ tải lên.
Đo độ trễ (ping): Sử dụng st.results.ping để lấy giá trị
ping.
Chuyển đổi tốc độ từ bps sang Mbps: Chuyển đổi kết quả
đo từ bits per second (bps) sang megabits per second
(Mbps).
In kết quả: In kết quả đo lường tốc độ tải xuống, tốc độ tải
lên và độ trễ ra màn hình.

3. Gọi hàm check_internet_speed:

Gọi hàm để đo lường và in kết quả tốc độ internet.

Tóm tắt
Sử dụng thư viện speedtest-cli để đo lường tốc độ internet.
Khởi tạo đối tượng Speedtest và chọn máy chủ tốt nhất dựa trên
độ trễ (ping).
Đo tốc độ tải xuống và tải lên, sau đó chuyển đổi từ bps sang
Mbps.
Lấy và in kết quả độ trễ (ping).
In kết quả tốc độ tải xuống, tải lên và độ trễ ra màn hình.

Chương trình này kiểm tra tốc độ internet bằng cách đo tốc độ tải
xuống, tải lên và độ trễ (ping), sau đó in kết quả ra màn hình.
234 - Viết chương trình để gửi email

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để gửi email. Chương
trình này cần sử dụng giao thức SMTP để gửi email từ một tài khoản
email đến một tài khoản khác. Người dùng cần cung cấp thông tin
đăng nhập email, địa chỉ người nhận, tiêu đề và nội dung email.

Thuật toán
Đầu vào:

Địa chỉ email người gửi


Mật khẩu của tài khoản email người gửi
Địa chỉ email người nhận
Tiêu đề email
Nội dung email

Đầu ra: Email được gửi đi thành công hoặc thông báo lỗi nếu
có.

Các bước thực hiện:

1. Lấy thông tin đăng nhập của người gửi và thông tin email.
2. Kết nối đến máy chủ SMTP của nhà cung cấp dịch vụ email
(ví dụ: Gmail).
3. Đăng nhập vào tài khoản email của người gửi.
4. Tạo nội dung email.
5. Gửi email đến người nhận.
6. Kiểm tra và thông báo kết quả.
Cài đặt thư viện
Thư viện smtplib và email là thư viện chuẩn của Python nên không
cần cài đặt thêm. Tuy nhiên, để tạo nội dung email dễ dàng hơn,
chúng ta sẽ sử dụng các module MIMEMultipart và MIMEText từ thư
viện email.

Code Python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_email(sender_email, sender_password,


recipient_email, subject, body):
# Tạo đối tượng MIMEMultipart
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = recipient_email
msg['Subject'] = subject

# Gắn phần nội dung email vào đối tượng MIMEText


msg.attach(MIMEText(body, 'plain'))

try:
# Kết nối đến máy chủ SMTP của Gmail
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()

# Đăng nhập vào tài khoản email của người gửi


server.login(sender_email, sender_password)

# Gửi email
text = msg.as_string()
server.sendmail(sender_email, recipient_email, text)

# Đóng kết nối đến máy chủ SMTP


server.quit()
print("Email đã được gửi thành công.")
except Exception as e:
print(f"Có lỗi xảy ra khi gửi email: {e}")

# Lấy thông tin từ người dùng


sender_email = input("Nhập địa chỉ email người gửi: ")
sender_password = input("Nhập mật khẩu của tài khoản email
người gửi: ")
recipient_email = input("Nhập địa chỉ email người nhận: ")
subject = input("Nhập tiêu đề email: ")
body = input("Nhập nội dung email: ")

# Gọi hàm để gửi email


send_email(sender_email, sender_password, recipient_email,
subject, body)

Giải thích code


1. Import thư viện:

smtplib: Sử dụng để kết nối đến máy chủ SMTP và gửi


email.
email.mime.multipart.MIMEMultipart và
email.mime.text.MIMEText: Sử dụng để tạo và định dạng
email.

2. Định nghĩa hàm send_email:

Tham số:
sender_email: Địa chỉ email người gửi.
sender_password: Mật khẩu của tài khoản email người
gửi.
recipient_email: Địa chỉ email người nhận.
subject: Tiêu đề email.
body: Nội dung email.
Tạo đối tượng MIMEMultipart: Để gắn các thành phần
email (tiêu đề, người gửi, người nhận, nội dung).
Gắn nội dung email: Sử dụng MIMEText để định dạng nội
dung email dưới dạng văn bản thuần (plain text).
Kết nối và đăng nhập vào máy chủ SMTP: Sử dụng
smtplib.SMTP để kết nối đến máy chủ Gmail và starttls()
để bắt đầu phiên mã hóa TLS.
Gửi email: Sử dụng sendmail để gửi email.
Đóng kết nối: Sử dụng quit() để đóng kết nối đến máy chủ
SMTP.

3. Lấy thông tin từ người dùng:

Sử dụng input() để nhận địa chỉ email người gửi, mật khẩu,
địa chỉ email người nhận, tiêu đề và nội dung email từ người
dùng.

4. Gọi hàm send_email:

Gọi hàm với các tham số được nhập bởi người dùng để gửi
email.

Vấn đề đăng nhập Gmail


Có thể xảy ra lỗi do Gmail không chấp nhận tên đăng nhập và mật
khẩu bạn cung cấp. Điều này có thể xảy ra do một số lý do:

1. Mật khẩu không chính xác: Đảm bảo bạn đã nhập đúng mật
khẩu cho tài khoản Gmail của mình.

2. Bảo mật hai yếu tố: Nếu bạn đã bật xác thực hai yếu tố cho tài
khoản Gmail của mình, bạn cần sử dụng một mật khẩu ứng
dụng thay vì mật khẩu thông thường của bạn để đăng nhập qua
SMTP.

3. Quyền truy cập của ứng dụng kém an toàn: Google có thể
chặn đăng nhập từ các ứng dụng mà nó coi là kém an toàn, bao
gồm cả các script hoặc ứng dụng sử dụng SMTP để gửi email.
Bạn có thể cần phải cho phép truy cập của ứng dụng kém an
toàn trong cài đặt bảo mật của tài khoản Google của mình. Tuy
nhiên, lưu ý rằng việc này có thể làm tăng rủi ro bảo mật cho tài
khoản của bạn.

Để giải quyết vấn đề này:

Nếu bạn đã bật xác thực hai yếu tố: Truy cập vào tài khoản
Google của bạn, tìm phần mật khẩu ứng dụng (trong phần bảo
mật), và tạo một mật khẩu ứng dụng mới. Sử dụng mật khẩu
này thay vì mật khẩu thông thường của bạn trong script.

Nếu bạn chưa bật xác thực hai yếu tố và không muốn sử
dụng mật khẩu ứng dụng: Bạn cần phải cho phép truy cập của
ứng dụng kém an toàn. Điều này có thể được thực hiện trong
phần bảo mật của cài đặt tài khoản Google của bạn. Tuy nhiên,
hãy cân nhắc rủi ro bảo mật khi thực hiện điều này.

Sau khi thực hiện các bước trên, hãy thử lại việc gửi email bằng
script của bạn.

Tóm tắt
Sử dụng thư viện smtplib để kết nối đến máy chủ SMTP và gửi
email.
Sử dụng email.mime.multipart.MIMEMultipart và
email.mime.text.MIMEText để tạo và định dạng email.
Gửi email từ tài khoản email của người gửi đến tài khoản email
người nhận.
Nhận thông tin đăng nhập và thông tin email từ người dùng.

Chương trình này gửi email từ tài khoản của người gửi đến người
nhận bằng cách sử dụng giao thức SMTP và thông tin đăng nhập
email của người gửi.
235 - Viết chương trình để nhận email

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để nhận email từ một
hộp thư đến. Chương trình này cần sử dụng giao thức IMAP để kết
nối đến máy chủ email và truy xuất email từ hộp thư đến của người
dùng.

Thuật toán
Đầu vào:

Địa chỉ email


Mật khẩu của tài khoản email

Đầu ra:

Danh sách các email nhận được từ hộp thư đến

Các bước thực hiện:

1. Lấy thông tin đăng nhập của người dùng.


2. Kết nối đến máy chủ IMAP của nhà cung cấp dịch vụ email
(ví dụ: Gmail).
3. Đăng nhập vào tài khoản email của người dùng.
4. Chọn hộp thư đến (Inbox).
5. Truy xuất các email từ hộp thư đến.
6. In nội dung của các email hoặc các thông tin cần thiết.

Cài đặt thư viện


Thư viện imaplib và email là thư viện chuẩn của Python nên không
cần cài đặt thêm.
Code Python
import imaplib
import email
from email.header import decode_header

def receive_email(email_user, email_pass):


# Kết nối đến máy chủ IMAP của Gmail
mail = imaplib.IMAP4_SSL("imap.gmail.com")

# Đăng nhập vào tài khoản email của người dùng


try:
mail.login(email_user, email_pass)
except imaplib.IMAP4.error as e:
print(f"Lỗi đăng nhập: {e}")
return

# Chọn hộp thư đến (INBOX)


mail.select("inbox")

# Tìm kiếm tất cả các email trong hộp thư đến


status, messages = mail.search(None, "ALL")

# Chuyển đổi danh sách email ID thành một danh sách các
số nguyên
email_ids = messages[0].split()

# Giới hạn số lượng email cần lấy (ví dụ: 10 email gần
nhất)
num_emails = 10
latest_email_ids = email_ids[-num_emails:]

for e_id in latest_email_ids:


# Lấy dữ liệu email
status, data = mail.fetch(e_id, "(RFC822)")

for response_part in data:


if isinstance(response_part, tuple):
msg =
email.message_from_bytes(response_part[1])
# Lấy thông tin từ email
subject, encoding =
decode_header(msg["Subject"])[0]
if isinstance(subject, bytes):
subject = subject.decode(encoding if
encoding else "utf-8")

from_ = msg.get("From")
date_ = msg.get("Date")

print(f"Subject: {subject}")
print(f"From: {from_}")
print(f"Date: {date_}")
print("="*50)

# Nếu email có nhiều phần (multi-part), duyệt


qua từng phần
if msg.is_multipart():
for part in msg.walk():
content_type =
part.get_content_type()
content_disposition =
str(part.get("Content-Disposition"))

try:
# Lấy nội dung của phần hiện tại
body =
part.get_payload(decode=True).decode()
except:
pass

# In nội dung của email


if content_type == "text/plain" and
"attachment" not in content_disposition:
print("Body:", body)
elif "attachment" in
content_disposition:
print("Email có tệp đính kèm.")
else:
content_type = msg.get_content_type()
body =
msg.get_payload(decode=True).decode()
if content_type == "text/plain":
print("Body:", body)

# Đóng kết nối với máy chủ


mail.logout()

# Lấy thông tin từ người dùng


email_user = input("Nhập địa chỉ email của bạn: ")
email_pass = input("Nhập mật khẩu của tài khoản email: ")

# Gọi hàm để nhận email


receive_email(email_user, email_pass)

Giải thích code


1. Import thư viện:

imaplib:Sử dụng để kết nối và tương tác với máy chủ IMAP.
email: Sử dụng để xử lý các nội dung email.
decode_header: Sử dụng để giải mã tiêu đề email.

2. Định nghĩa hàm receive_email:

Tham số:
email_user: Địa chỉ email của người dùng.
email_pass: Mật khẩu của tài khoản email.
Kết nối đến máy chủ IMAP: Sử dụng imaplib.IMAP4_SSL để
kết nối đến máy chủ IMAP của Gmail.
Đăng nhập vào tài khoản email: Sử dụng
mail.login(email_user, email_pass) để đăng nhập.
Chọn hộp thư đến: Sử dụng mail.select("inbox") để
chọn hộp thư đến.
Tìm kiếm tất cả các email: Sử dụng mail.search(None,
"ALL") để tìm kiếm tất cả các email trong hộp thư đến.
Duyệt qua danh sách email: Lấy danh sách các email ID và
duyệt qua các email gần nhất.
Lấy và giải mã thông tin từ email: Sử dụng
email.message_from_bytes để chuyển đổi dữ liệu email và
decode_header để giải mã tiêu đề.
Kiểm tra và in nội dung email: Kiểm tra nếu email có nhiều
phần (multi-part) và in nội dung phù hợp.
Đóng kết nối: Sử dụng mail.logout() để đóng kết nối với
máy chủ.

3. Lấy thông tin từ người dùng:

Sử dụng input() để nhận địa chỉ email và mật khẩu từ


người dùng.

4. Gọi hàm receive_email:

Gọi hàm với các tham số được nhập bởi người dùng để
nhận email.

Tóm tắt
Sử dụng thư viện imaplib để kết nối đến máy chủ IMAP và nhận
email.
Sử dụng thư viện email để xử lý và giải mã nội dung email.
Nhận thông tin đăng nhập từ người dùng và kết nối đến hộp thư
đến.
Truy xuất và in thông tin của các email gần nhất.

Chương trình này kết nối đến hộp thư đến của người dùng thông
qua giao thức IMAP, lấy và in thông tin của các email gần nhất.
236 - Viết chương trình để phân giải
tên miền

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để phân giải tên miền
(DNS resolution). Chương trình này sẽ nhận vào một tên miền và trả
về địa chỉ IP tương ứng của tên miền đó.

Thuật toán
Đầu vào: Tên miền cần phân giải.
Đầu ra: Địa chỉ IP tương ứng với tên miền đó.
Các bước thực hiện:
1. Nhận tên miền từ người dùng.
2. Sử dụng thư viện socket để phân giải tên miền thành địa chỉ
IP.
3. Trả về và in địa chỉ IP.

Cài đặt thư viện


Thư viện socket là thư viện chuẩn của Python nên không cần cài đặt
thêm.

Code Python
import socket

def resolve_domain(domain):
try:
# Phân giải tên miền thành địa chỉ IP
ip_address = socket.gethostbyname(domain)
return ip_address
except socket.gaierror as e:
return f"Không thể phân giải tên miền: {e}"

# Lấy tên miền từ người dùng


domain = input("Nhập tên miền cần phân giải: ")

# Gọi hàm để phân giải tên miền


ip_address = resolve_domain(domain)
print(f"Địa chỉ IP của tên miền {domain} là: {ip_address}")

Giải thích code


1. Import thư viện:

socket: Sử dụng để thực hiện phân giải tên miền.

2. Định nghĩa hàm resolve_domain:

Tham số:
domain: Tên miền cần phân giải.
Phân giải tên miền: Sử dụng
socket.gethostbyname(domain) để phân giải tên miền thành
địa chỉ IP.
Xử lý ngoại lệ: Sử dụng try-except để bắt và xử lý lỗi nếu
không thể phân giải tên miền.

3. Lấy tên miền từ người dùng:

Sử dụng input() để nhận tên miền từ người dùng.

4. Gọi hàm resolve_domain:

Gọi hàm với tên miền được nhập bởi người dùng để phân
giải tên miền và in kết quả.
Tóm tắt
Sử dụng thư viện socket để phân giải tên miền thành địa chỉ IP.
Nhận tên miền từ người dùng và gọi hàm resolve_domain để
thực hiện phân giải.
Xử lý ngoại lệ khi không thể phân giải tên miền.

Chương trình này phân giải tên miền (DNS resolution) bằng cách
nhận tên miền từ người dùng và sử dụng thư viện socket để trả về
địa chỉ IP tương ứng.
237 - Viết chương trình để tạo một
máy chủ TCP đơn giản

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một máy chủ
TCP đơn giản. Máy chủ này sẽ lắng nghe các kết nối từ các máy
khách, nhận và phản hồi các thông điệp từ máy khách.

Thuật toán
Đầu vào: Không có đầu vào từ người dùng.
Đầu ra: Máy chủ TCP chạy và lắng nghe các kết nối từ máy
khách.
Các bước thực hiện:
1. Tạo một socket TCP.
2. Gán socket đến một địa chỉ IP và một cổng.
3. Đặt socket ở trạng thái lắng nghe các kết nối đến.
4. Chấp nhận kết nối từ máy khách.
5. Nhận dữ liệu từ máy khách và phản hồi.
6. Đóng kết nối.

Cài đặt thư viện


Thư viện socket là thư viện chuẩn của Python nên không cần cài đặt
thêm.

Code Python
import socket

def start_tcp_server(host='127.0.0.1', port=65432):


# Tạo một socket TCP
server_socket = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)

# Gán socket đến một địa chỉ IP và một cổng


server_socket.bind((host, port))

# Đặt socket ở trạng thái lắng nghe các kết nối đến
server_socket.listen()
print(f"Máy chủ TCP đang lắng nghe tại {host}:{port}...")

while True:
# Chấp nhận kết nối từ máy khách
client_socket, client_address =
server_socket.accept()
print(f"Đã kết nối với {client_address}")

with client_socket:
while True:
# Nhận dữ liệu từ máy khách
data = client_socket.recv(1024)
if not data:
break
print(f"Nhận được từ {client_address}:
{data.decode()}")

# Phản hồi lại cho máy khách


client_socket.sendall(data)

# Bắt đầu máy chủ TCP


start_tcp_server()

Giải thích code


1. Import thư viện:

socket: Sử dụng để tạo và quản lý socket.

2. Định nghĩa hàm start_tcp_server:


Tham số:
host: Địa chỉ IP của máy chủ (mặc định là 127.0.0.1).
port: Cổng của máy chủ (mặc định là 65432).
Tạo socket TCP: Sử dụng socket.socket(socket.AF_INET,
socket.SOCK_STREAM) để tạo socket TCP.
Gán socket đến địa chỉ IP và cổng: Sử dụng
server_socket.bind((host, port)).
Đặt socket ở trạng thái lắng nghe: Sử dụng
server_socket.listen() để đặt socket ở trạng thái lắng
nghe các kết nối đến.
Vòng lặp chấp nhận kết nối:
Sử dụng server_socket.accept() để chấp nhận kết nối
từ máy khách.
In ra thông báo kết nối.
Vòng lặp nhận và gửi dữ liệu:
Sử dụng client_socket.recv(1024) để nhận dữ liệu
từ máy khách.
Nếu không nhận được dữ liệu, thoát khỏi vòng lặp.
In ra dữ liệu nhận được.
Sử dụng client_socket.sendall(data) để gửi lại dữ
liệu nhận được cho máy khách.

3. Bắt đầu máy chủ TCP:

Gọi hàm start_tcp_server() để khởi động máy chủ TCP với


các tham số mặc định.

Tóm tắt
Sử dụng thư viện socket để tạo một máy chủ TCP.
Tạo một socket TCP, gán nó đến một địa chỉ IP và cổng.
Đặt socket ở trạng thái lắng nghe và chấp nhận kết nối từ máy
khách.
Nhận dữ liệu từ máy khách và phản hồi lại.
In ra dữ liệu nhận được và thông tin kết nối.
Chương trình này tạo một máy chủ TCP đơn giản, lắng nghe các kết
nối từ máy khách, nhận và phản hồi lại các thông điệp từ máy
khách.
238 - Viết chương trình để tạo một
máy khách TCP đơn giản

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một máy khách
TCP đơn giản. Máy khách này sẽ kết nối tới một máy chủ TCP, gửi
thông điệp đến máy chủ và nhận phản hồi từ máy chủ.

Thuật toán
Đầu vào:

Địa chỉ IP và cổng của máy chủ


Thông điệp cần gửi đến máy chủ

Đầu ra:

Phản hồi từ máy chủ

Các bước thực hiện:

1. Tạo một socket TCP.


2. Kết nối đến máy chủ với địa chỉ IP và cổng cụ thể.
3. Gửi thông điệp đến máy chủ.
4. Nhận phản hồi từ máy chủ.
5. Đóng kết nối.

Cài đặt thư viện


Thư viện socket là thư viện chuẩn của Python nên không cần cài đặt
thêm.
Code Python
import socket

def start_tcp_client(host='127.0.0.1', port=65432,


message="Hello, Server!"):
# Tạo một socket TCP
client_socket = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)

# Kết nối đến máy chủ với địa chỉ IP và cổng cụ thể
client_socket.connect((host, port))
print(f"Kết nối đến máy chủ {host}:{port}")

try:
# Gửi thông điệp đến máy chủ
client_socket.sendall(message.encode())
print(f"Đã gửi: {message}")

# Nhận phản hồi từ máy chủ


data = client_socket.recv(1024)
print(f"Phản hồi từ máy chủ: {data.decode()}")
except Exception as e:
print(f"Có lỗi xảy ra: {e}")
finally:
# Đóng kết nối
client_socket.close()
print("Đã đóng kết nối")

# Lấy địa chỉ IP, cổng và thông điệp từ người dùng


host = input("Nhập địa chỉ IP của máy chủ: ")
port = int(input("Nhập cổng của máy chủ: "))
message = input("Nhập thông điệp cần gửi: ")

# Gọi hàm để bắt đầu máy khách TCP


start_tcp_client(host, port, message)
Giải thích code
1. Import thư viện:

socket: Sử dụng để tạo và quản lý socket.

2. Định nghĩa hàm start_tcp_client:

Tham số:
host: Địa chỉ IP của máy chủ (mặc định là 127.0.0.1).
port: Cổng của máy chủ (mặc định là 65432).
message: Thông điệp cần gửi đến máy chủ (mặc định là
“Hello, Server!”).
Tạo socket TCP: Sử dụng socket.socket(socket.AF_INET,
socket.SOCK_STREAM) để tạo socket TCP.
Kết nối đến máy chủ: Sử dụng
client_socket.connect((host, port)) để kết nối đến máy
chủ.
Gửi thông điệp: Sử dụng
client_socket.sendall(message.encode()) để gửi thông
điệp đến máy chủ.
Nhận phản hồi: Sử dụng client_socket.recv(1024) để
nhận phản hồi từ máy chủ.
Xử lý ngoại lệ: Sử dụng try-except để xử lý các lỗi xảy ra
trong quá trình gửi và nhận dữ liệu.
Đóng kết nối: Sử dụng client_socket.close() để đóng kết
nối đến máy chủ.

3. Lấy địa chỉ IP, cổng và thông điệp từ người dùng:

Sử dụng input() để nhận địa chỉ IP, cổng và thông điệp từ


người dùng.

4. Gọi hàm start_tcp_client:


Gọi hàm với các tham số được nhập bởi người dùng để bắt
đầu máy khách TCP.

Tóm tắt
Sử dụng thư viện socket để tạo một máy khách TCP.
Tạo một socket TCP và kết nối đến máy chủ với địa chỉ IP và
cổng cụ thể.
Gửi thông điệp đến máy chủ và nhận phản hồi từ máy chủ.
Đóng kết nối sau khi nhận phản hồi.

Chương trình này tạo một máy khách TCP đơn giản, kết nối đến một
máy chủ TCP, gửi thông điệp và nhận phản hồi từ máy chủ, sau đó
đóng kết nối.
239 - Viết chương trình để tạo một
máy chủ UDP đơn giản

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một máy chủ
UDP đơn giản. Máy chủ này sẽ lắng nghe các gói tin từ các máy
khách và phản hồi lại.

Thuật toán
Đầu vào: Không có đầu vào từ người dùng.
Đầu ra: Máy chủ UDP chạy và lắng nghe các gói tin từ máy
khách.
Các bước thực hiện:
1. Tạo một socket UDP.
2. Gán socket đến một địa chỉ IP và một cổng.
3. Đặt socket ở trạng thái lắng nghe các gói tin đến.
4. Nhận dữ liệu từ máy khách và phản hồi.
5. Lặp lại quá trình nhận và phản hồi cho đến khi dừng máy
chủ.

Cài đặt thư viện


Thư viện socket là thư viện chuẩn của Python nên không cần cài đặt
thêm.

Code Python
import socket

def start_udp_server(host='127.0.0.1', port=65432):


# Tạo một socket UDP
server_socket = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)

# Gán socket đến một địa chỉ IP và một cổng


server_socket.bind((host, port))
print(f"Máy chủ UDP đang lắng nghe tại {host}:{port}...")

while True:
# Nhận dữ liệu từ máy khách
data, client_address = server_socket.recvfrom(1024)
print(f"Nhận được từ {client_address}:
{data.decode()}")

# Phản hồi lại cho máy khách


response = f"Đã nhận được: {data.decode()}"
server_socket.sendto(response.encode(),
client_address)

# Bắt đầu máy chủ UDP


start_udp_server()

Giải thích code


1. Import thư viện:

socket: Sử dụng để tạo và quản lý socket.

2. Định nghĩa hàm start_udp_server:

Tham số:
host: Địa chỉ IP của máy chủ (mặc định là 127.0.0.1).
port: Cổng của máy chủ (mặc định là 65432).
Tạo socket UDP: Sử dụng socket.socket(socket.AF_INET,
socket.SOCK_DGRAM) để tạo socket UDP.
Gán socket đến địa chỉ IP và cổng: Sử dụng
server_socket.bind((host, port)).
Vòng lặp nhận và phản hồi dữ liệu:
Sử dụng server_socket.recvfrom(1024) để nhận dữ liệu
từ máy khách và lấy địa chỉ của máy khách.
In ra dữ liệu nhận được và địa chỉ máy khách.
Sử dụng server_socket.sendto(response.encode(),
client_address) để gửi phản hồi lại cho máy khách.

3. Bắt đầu máy chủ UDP:

Gọi hàm start_udp_server() để khởi động máy chủ UDP


với các tham số mặc định.

Tóm tắt
Sử dụng thư viện socket để tạo một máy chủ UDP.
Tạo một socket UDP và gán nó đến một địa chỉ IP và cổng cụ
thể.
Đặt socket ở trạng thái lắng nghe và nhận dữ liệu từ máy khách.
Gửi phản hồi lại cho máy khách sau khi nhận dữ liệu.
Lặp lại quá trình nhận và phản hồi dữ liệu.

Chương trình này tạo một máy chủ UDP đơn giản, lắng nghe các gói
tin từ máy khách, nhận và phản hồi lại các gói tin đó.
240 - Viết chương trình để tạo một
máy khách UDP đơn giản

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tạo một máy khách
UDP đơn giản. Máy khách này sẽ gửi gói tin đến máy chủ UDP và
nhận phản hồi từ máy chủ.

Thuật toán
Đầu vào:

Địa chỉ IP và cổng của máy chủ


Thông điệp cần gửi đến máy chủ

Đầu ra:

Phản hồi từ máy chủ

Các bước thực hiện:

1. Tạo một socket UDP.


2. Gửi gói tin đến máy chủ với địa chỉ IP và cổng cụ thể.
3. Nhận phản hồi từ máy chủ.
4. Đóng kết nối.

Cài đặt thư viện


Thư viện socket là thư viện chuẩn của Python nên không cần cài đặt
thêm.
Code Python
import socket

def start_udp_client(host='127.0.0.1', port=65432,


message="Hello, Server!"):
# Tạo một socket UDP
client_socket = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)

try:
# Gửi thông điệp đến máy chủ
client_socket.sendto(message.encode(), (host, port))
print(f"Đã gửi: {message} đến {host}:{port}")

# Nhận phản hồi từ máy chủ


data, server = client_socket.recvfrom(1024)
print(f"Phản hồi từ máy chủ: {data.decode()}")
except Exception as e:
print(f"Có lỗi xảy ra: {e}")
finally:
# Đóng kết nối
client_socket.close()
print("Đã đóng kết nối")

# Lấy địa chỉ IP, cổng và thông điệp từ người dùng


host = input("Nhập địa chỉ IP của máy chủ: ")
port = int(input("Nhập cổng của máy chủ: "))
message = input("Nhập thông điệp cần gửi: ")

# Gọi hàm để bắt đầu máy khách UDP


start_udp_client(host, port, message)

Giải thích code


1. Import thư viện:

socket: Sử dụng để tạo và quản lý socket.


2. Định nghĩa hàm start_udp_client:

Tham số:
host: Địa chỉ IP của máy chủ (mặc định là 127.0.0.1).
port: Cổng của máy chủ (mặc định là 65432).
message: Thông điệp cần gửi đến máy chủ (mặc định là
“Hello, Server!”).
Tạo socket UDP: Sử dụng socket.socket(socket.AF_INET,
socket.SOCK_DGRAM) để tạo socket UDP.
Gửi thông điệp: Sử dụng
client_socket.sendto(message.encode(), (host, port))
để gửi thông điệp đến máy chủ.
Nhận phản hồi: Sử dụng client_socket.recvfrom(1024) để
nhận phản hồi từ máy chủ.
Xử lý ngoại lệ: Sử dụng try-except để xử lý các lỗi xảy ra
trong quá trình gửi và nhận dữ liệu.
Đóng kết nối: Sử dụng client_socket.close() để đóng kết
nối đến máy chủ.

3. Lấy địa chỉ IP, cổng và thông điệp từ người dùng:

Sử dụng input() để nhận địa chỉ IP, cổng và thông điệp từ


người dùng.

4. Gọi hàm start_udp_client:

Gọi hàm với các tham số được nhập bởi người dùng để bắt
đầu máy khách UDP.

Tóm tắt
Sử dụng thư viện socket để tạo một máy khách UDP.
Tạo một socket UDP và gửi gói tin đến máy chủ với địa chỉ IP và
cổng cụ thể.
Nhận phản hồi từ máy chủ.
Đóng kết nối sau khi nhận phản hồi.

Chương trình này tạo một máy khách UDP đơn giản, gửi gói tin đến
máy chủ UDP và nhận phản hồi từ máy chủ, sau đó đóng kết nối.
Chương 25 : Bài tập với API cơ
bản
241. Viết chương trình để gửi yêu cầu GET đến API và lấy dữ liệu.
242. Viết chương trình để gửi yêu cầu POST đến API và lấy dữ liệu.
243. Viết chương trình để phân tích dữ liệu JSON từ API.
244. Viết chương trình để gửi yêu cầu PUT đến API và cập nhật dữ
liệu.
245. Viết chương trình để gửi yêu cầu DELETE đến API và xóa dữ
liệu.
246. Viết chương trình để xử lý lỗi khi gọi API.
247. Viết chương trình để kiểm tra trạng thái của API.
248. Viết chương trình để xác thực người dùng khi gọi API.
249. Viết chương trình để lấy dữ liệu thời tiết từ API.
250. Viết chương trình để lấy dữ liệu tỷ giá hối đoái từ API.
241 - Viết chương trình để gửi yêu cầu
GET đến API và lấy dữ liệu

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để gửi yêu cầu GET
đến một API và lấy dữ liệu từ API đó.

Thuật toán
Đầu vào:
URL của API (endpoint)
Các thông tin cấu hình thêm nếu cần (headers, parameters)
Đầu ra:
Dữ liệu nhận được từ API (thường ở dạng JSON)
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa URL của API.
3. Gửi yêu cầu GET đến API.
4. Nhận và xử lý dữ liệu trả về từ API.
5. Hiển thị dữ liệu hoặc thực hiện các bước xử lý tiếp theo.

Cài đặt thư viện


pip install requests

Code Python
import requests

# Bước 2: Định nghĩa URL của API


api_url = "https://api.example.com/data"
# Bước 3: Gửi yêu cầu GET đến API
response = requests.get(api_url)

# Bước 4: Nhận và xử lý dữ liệu trả về từ API


if response.status_code == 200:
data = response.json()
else:
data = None
print(f"Lỗi khi gửi yêu cầu GET: {response.status_code}")

# Bước 5: Hiển thị dữ liệu


if data:
print("Dữ liệu nhận được từ API:")
print(data)
else:
print("Không nhận được dữ liệu từ API.")

Giải thích code


1. Import thư viện requests:
Thư viện requests được sử dụng để gửi các yêu cầu HTTP
trong Python.
2. Định nghĩa URL của API:
api_url là biến lưu trữ URL của API mà chúng ta sẽ gửi yêu
cầu GET đến.
3. Gửi yêu cầu GET đến API:
requests.get(api_url) gửi yêu cầu GET đến URL được
định nghĩa.
response là đối tượng lưu trữ phản hồi từ API.
4. Nhận và xử lý dữ liệu trả về từ API:
Kiểm tra mã trạng thái của phản hồi (response.status_code).
Nếu mã trạng thái là 200 (yêu cầu thành công), dữ liệu
JSON từ API được lưu trữ trong biến data.
Nếu mã trạng thái không phải là 200, đặt data là None và in
ra thông báo lỗi.
5. Hiển thị dữ liệu:
Nếu data không phải là None, in ra dữ liệu nhận được từ API.
Nếu data là None, in ra thông báo rằng không nhận được dữ
liệu.

Tóm tắt:
Import thư viện requests để gửi các yêu cầu HTTP.
Định nghĩa URL của API để xác định điểm đến của yêu cầu
GET.
Gửi yêu cầu GET và nhận phản hồi từ API.
Kiểm tra mã trạng thái của phản hồi để xác định xem yêu cầu
có thành công không.
Xử lý và hiển thị dữ liệu JSON nhận được từ API.
Chương trình này gửi một yêu cầu GET đến một API, nhận dữ liệu
JSON từ phản hồi và hiển thị dữ liệu nếu yêu cầu thành công.
242 - Viết chương trình để gửi yêu cầu
POST đến API và lấy dữ liệu

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để gửi yêu cầu POST
đến một API và lấy dữ liệu từ API đó.

Thuật toán
Đầu vào:
URL của API (endpoint)
Dữ liệu gửi kèm theo yêu cầu POST (body data)
Các thông tin cấu hình thêm nếu cần (headers, parameters)
Đầu ra:
Dữ liệu nhận được từ API (thường ở dạng JSON)
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa URL của API và dữ liệu gửi kèm.
3. Gửi yêu cầu POST đến API.
4. Nhận và xử lý dữ liệu trả về từ API.
5. Hiển thị dữ liệu hoặc thực hiện các bước xử lý tiếp theo.

Cài đặt thư viện


pip install requests

Code Python
import requests

# Bước 2: Định nghĩa URL của API và dữ liệu gửi kèm


api_url = "https://api.example.com/data"
payload = {
"key1": "value1",
"key2": "value2"
}
headers = {
"Content-Type": "application/json"
}

# Bước 3: Gửi yêu cầu POST đến API


response = requests.post(api_url, json=payload,
headers=headers)

# Bước 4: Nhận và xử lý dữ liệu trả về từ API


if response.status_code == 200:
data = response.json()
else:
data = None
print(f"Lỗi khi gửi yêu cầu POST:
{response.status_code}")

# Bước 5: Hiển thị dữ liệu


if data:
print("Dữ liệu nhận được từ API:")
print(data)
else:
print("Không nhận được dữ liệu từ API.")

Giải thích code


1. Import thư viện requests:
Thư viện requests được sử dụng để gửi các yêu cầu HTTP
trong Python.
2. Định nghĩa URL của API và dữ liệu gửi kèm:
api_url là biến lưu trữ URL của API mà chúng ta sẽ gửi yêu
cầu POST đến.
payload là dữ liệu được gửi kèm theo yêu cầu POST, được
định nghĩa dưới dạng từ điển (dictionary).
headers là thông tin cấu hình tiêu đề HTTP của yêu cầu, xác
định loại dữ liệu gửi đi (trong trường hợp này là JSON).
3. Gửi yêu cầu POST đến API:
requests.post(api_url, json=payload, headers=headers)
gửi yêu cầu POST đến URL được định nghĩa, kèm theo dữ
liệu và tiêu đề.
response là đối tượng lưu trữ phản hồi từ API.
4. Nhận và xử lý dữ liệu trả về từ API:
Kiểm tra mã trạng thái của phản hồi (response.status_code).
Nếu mã trạng thái là 200 (yêu cầu thành công), dữ liệu
JSON từ API được lưu trữ trong biến data.
Nếu mã trạng thái không phải là 200, đặt data là None và in
ra thông báo lỗi.
5. Hiển thị dữ liệu:
Nếu data không phải là None, in ra dữ liệu nhận được từ API.
Nếu data là None, in ra thông báo rằng không nhận được dữ
liệu.

Tóm tắt:
Import thư viện requests để gửi các yêu cầu HTTP.
Định nghĩa URL của API, dữ liệu gửi kèm theo yêu cầu POST
và tiêu đề HTTP.
Gửi yêu cầu POST và nhận phản hồi từ API.
Kiểm tra mã trạng thái của phản hồi để xác định xem yêu cầu
có thành công không.
Xử lý và hiển thị dữ liệu JSON nhận được từ API.
Chương trình này gửi một yêu cầu POST đến một API với dữ liệu
kèm theo, nhận dữ liệu JSON từ phản hồi và hiển thị dữ liệu nếu yêu
cầu thành công.
243 - Viết chương trình để phân tích
dữ liệu JSON từ API

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để phân tích dữ liệu
JSON nhận được từ API. Điều này bao gồm gửi yêu cầu đến API,
nhận dữ liệu JSON và sau đó xử lý dữ liệu này theo một cách cụ
thể.

Thuật toán
Đầu vào:
URL của API (endpoint)
Các thông tin cấu hình thêm nếu cần (headers, parameters)
Đầu ra:
Dữ liệu đã được phân tích và xử lý từ JSON
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa URL của API và các cấu hình khác.
3. Gửi yêu cầu GET đến API.
4. Nhận và xử lý dữ liệu JSON từ API.
5. Phân tích và xử lý dữ liệu JSON theo yêu cầu cụ thể.
6. Hiển thị kết quả phân tích.

Cài đặt thư viện


pip install requests
Code Python
import requests
import json

# Bước 2: Định nghĩa URL của API và các cấu hình khác
api_url = "https://api.example.com/data"
headers = {
"Accept": "application/json"
}

# Bước 3: Gửi yêu cầu GET đến API


response = requests.get(api_url, headers=headers)

# Bước 4: Nhận và xử lý dữ liệu JSON từ API


if response.status_code == 200:
data = response.json()
else:
data = None
print(f"Lỗi khi gửi yêu cầu GET: {response.status_code}")

# Bước 5: Phân tích và xử lý dữ liệu JSON


def analyze_data(data):
if data:
# Ví dụ: tính tổng giá trị của một trường cụ thể
total_value = 0
for item in data['items']:
total_value += item['value']
return total_value
return None

# Bước 6: Hiển thị kết quả phân tích


if data:
result = analyze_data(data)
if result is not None:
print(f"Tổng giá trị của trường 'value' là:
{result}")
else:
print("Dữ liệu không hợp lệ hoặc không có trường
'value'")
else:
print("Không nhận được dữ liệu từ API.")

Giải thích code


1. Import thư viện requests và json:
requests để gửi các yêu cầu HTTP.
json để xử lý dữ liệu JSON nếu cần.
2. Định nghĩa URL của API và các cấu hình khác:
api_url là biến lưu trữ URL của API.
headers xác định tiêu đề HTTP của yêu cầu, yêu cầu dữ liệu
dạng JSON.
3. Gửi yêu cầu GET đến API:
requests.get(api_url, headers=headers) gửi yêu cầu GET
đến URL với các tiêu đề được định nghĩa.
response là đối tượng lưu trữ phản hồi từ API.
4. Nhận và xử lý dữ liệu JSON từ API:
Kiểm tra mã trạng thái của phản hồi (response.status_code).
Nếu mã trạng thái là 200 (yêu cầu thành công), dữ liệu
JSON từ API được lưu trữ trong biến data.
Nếu mã trạng thái không phải là 200, đặt data là None và in
ra thông báo lỗi.
5. Phân tích và xử lý dữ liệu JSON:
Hàm analyze_data(data) được định nghĩa để phân tích dữ
liệu JSON.
Trong ví dụ này, hàm tính tổng giá trị của trường ‘value’ trong
danh sách items của dữ liệu JSON.
6. Hiển thị kết quả phân tích:
Nếu data không phải là None, gọi hàm analyze_data(data)
để phân tích dữ liệu.
In ra kết quả phân tích hoặc thông báo lỗi nếu dữ liệu không
hợp lệ hoặc không có trường cần thiết.
Tóm tắt:
Import thư viện requests và json để gửi yêu cầu HTTP và xử
lý dữ liệu JSON.
Định nghĩa URL của API và cấu hình tiêu đề HTTP.
Gửi yêu cầu GET và nhận phản hồi từ API.
Kiểm tra mã trạng thái của phản hồi để xác định xem yêu cầu
có thành công không.
Phân tích dữ liệu JSON bằng cách định nghĩa hàm phân tích
cụ thể.
Hiển thị kết quả phân tích hoặc thông báo lỗi.
Chương trình này gửi một yêu cầu GET đến một API, nhận dữ liệu
JSON từ phản hồi, phân tích dữ liệu JSON và hiển thị kết quả phân
tích.
244 - Viết chương trình để gửi yêu cầu
PUT đến API và cập nhật dữ liệu

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để gửi yêu cầu PUT
đến một API và cập nhật dữ liệu trên server. Chương trình cần gửi
dữ liệu mới đến API để thay thế dữ liệu hiện có.

Thuật toán
Đầu vào:
URL của API (endpoint)
Dữ liệu gửi kèm theo yêu cầu PUT (body data)
Các thông tin cấu hình thêm nếu cần (headers)
Đầu ra:
Phản hồi từ API sau khi cập nhật dữ liệu
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa URL của API và dữ liệu gửi kèm.
3. Gửi yêu cầu PUT đến API.
4. Nhận và xử lý phản hồi từ API.
5. Hiển thị kết quả phản hồi.

Cài đặt thư viện


pip install requests

Code Python
import requests
# Bước 2: Định nghĩa URL của API và dữ liệu gửi kèm
api_url = "https://api.example.com/data/1"
payload = {
"key1": "new_value1",
"key2": "new_value2"
}
headers = {
"Content-Type": "application/json"
}

# Bước 3: Gửi yêu cầu PUT đến API


response = requests.put(api_url, json=payload,
headers=headers)

# Bước 4: Nhận và xử lý phản hồi từ API


if response.status_code == 200:
updated_data = response.json()
print("Cập nhật dữ liệu thành công.")
print("Dữ liệu đã cập nhật:")
print(updated_data)
else:
print(f"Lỗi khi gửi yêu cầu PUT: {response.status_code}")
print("Phản hồi từ API:")
print(response.text)

Giải thích code


1. Import thư viện requests:
Thư viện requests được sử dụng để gửi các yêu cầu HTTP
trong Python.
2. Định nghĩa URL của API và dữ liệu gửi kèm:
api_url là biến lưu trữ URL của API mà chúng ta sẽ gửi yêu
cầu PUT đến.
payload là dữ liệu được gửi kèm theo yêu cầu PUT, được
định nghĩa dưới dạng từ điển (dictionary).
headers là thông tin cấu hình tiêu đề HTTP của yêu cầu, xác
định loại dữ liệu gửi đi (trong trường hợp này là JSON).
3. Gửi yêu cầu PUT đến API:
requests.put(api_url, json=payload, headers=headers)
gửi yêu cầu PUT đến URL được định nghĩa, kèm theo dữ
liệu và tiêu đề.
response là đối tượng lưu trữ phản hồi từ API.
4. Nhận và xử lý phản hồi từ API:
Kiểm tra mã trạng thái của phản hồi (response.status_code).
Nếu mã trạng thái là 200 (yêu cầu thành công), dữ liệu
JSON cập nhật từ API được lưu trữ trong biến updated_data.
Nếu mã trạng thái không phải là 200, in ra thông báo lỗi và
nội dung phản hồi từ API.
5. Hiển thị kết quả phản hồi:
Nếu yêu cầu thành công, in ra thông báo cập nhật thành
công và dữ liệu đã cập nhật.
Nếu yêu cầu không thành công, in ra mã lỗi và nội dung
phản hồi từ API.

Tóm tắt:
Import thư viện requests để gửi các yêu cầu HTTP.
Định nghĩa URL của API, dữ liệu gửi kèm theo yêu cầu PUT và
tiêu đề HTTP.
Gửi yêu cầu PUT và nhận phản hồi từ API.
Kiểm tra mã trạng thái của phản hồi để xác định xem yêu cầu
có thành công không.
Hiển thị kết quả phản hồi hoặc thông báo lỗi.
Chương trình này gửi một yêu cầu PUT đến một API, cập nhật dữ
liệu trên server, nhận phản hồi từ API và hiển thị kết quả cập nhật
hoặc thông báo lỗi nếu yêu cầu không thành công.
245 - Viết chương trình để gửi yêu cầu
DELETE đến API và xóa dữ liệu

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để gửi yêu cầu
DELETE đến một API và xóa dữ liệu trên server. Chương trình cần
gửi yêu cầu đến API để xóa một tài nguyên cụ thể.

Thuật toán
Đầu vào:
URL của API (endpoint)
Các thông tin cấu hình thêm nếu cần (headers)
Đầu ra:
Phản hồi từ API sau khi xóa dữ liệu
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa URL của API.
3. Gửi yêu cầu DELETE đến API.
4. Nhận và xử lý phản hồi từ API.
5. Hiển thị kết quả phản hồi.

Cài đặt thư viện


pip install requests

Code Python
import requests

# Bước 2: Định nghĩa URL của API


api_url = "https://api.example.com/data/1"
headers = {
"Accept": "application/json"
}

# Bước 3: Gửi yêu cầu DELETE đến API


response = requests.delete(api_url, headers=headers)

# Bước 4: Nhận và xử lý phản hồi từ API


if response.status_code == 200:
print("Xóa dữ liệu thành công.")
print("Phản hồi từ API:")
print(response.json())
elif response.status_code == 204:
print("Xóa dữ liệu thành công nhưng không có nội dung trả
về.")
else:
print(f"Lỗi khi gửi yêu cầu DELETE:
{response.status_code}")
print("Phản hồi từ API:")
print(response.text)

Giải thích code


1. Import thư viện requests:
Thư viện requests được sử dụng để gửi các yêu cầu HTTP
trong Python.
2. Định nghĩa URL của API:
api_url là biến lưu trữ URL của API mà chúng ta sẽ gửi yêu
cầu DELETE đến.
headers là thông tin cấu hình tiêu đề HTTP của yêu cầu, yêu
cầu dữ liệu dạng JSON.
3. Gửi yêu cầu DELETE đến API:
requests.delete(api_url, headers=headers) gửi yêu cầu
DELETE đến URL được định nghĩa với các tiêu đề được xác
định.
response là đối tượng lưu trữ phản hồi từ API.
4. Nhận và xử lý phản hồi từ API:
Kiểm tra mã trạng thái của phản hồi (response.status_code).
Nếu mã trạng thái là 200 (yêu cầu thành công và có nội dung
trả về), in ra thông báo và dữ liệu JSON từ API.
Nếu mã trạng thái là 204 (yêu cầu thành công nhưng không
có nội dung trả về), in ra thông báo thành công mà không có
nội dung.
Nếu mã trạng thái không phải là 200 hoặc 204, in ra thông
báo lỗi và nội dung phản hồi từ API.
5. Hiển thị kết quả phản hồi:
Nếu yêu cầu thành công, in ra thông báo xóa thành công và
dữ liệu trả về nếu có.
Nếu yêu cầu không thành công, in ra mã lỗi và nội dung
phản hồi từ API.

Tóm tắt:
Import thư viện requests để gửi các yêu cầu HTTP.
Định nghĩa URL của API và cấu hình tiêu đề HTTP.
Gửi yêu cầu DELETE và nhận phản hồi từ API.
Kiểm tra mã trạng thái của phản hồi để xác định xem yêu cầu
có thành công không.
Hiển thị kết quả phản hồi hoặc thông báo lỗi.
Chương trình này gửi một yêu cầu DELETE đến một API, xóa dữ
liệu trên server, nhận phản hồi từ API và hiển thị kết quả xóa hoặc
thông báo lỗi nếu yêu cầu không thành công.
246 - Viết chương trình để xử lý lỗi khi
gọi API

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để xử lý lỗi khi gọi API.
Chương trình cần gửi yêu cầu HTTP (GET, POST, PUT, DELETE)
đến API và xử lý các lỗi có thể xảy ra trong quá trình này, chẳng hạn
như lỗi kết nối, lỗi thời gian chờ, lỗi phản hồi không thành công (4xx,
5xx).

Thuật toán
Đầu vào:
URL của API (endpoint)
Phương thức HTTP (GET, POST, PUT, DELETE)
Các thông tin cấu hình thêm nếu cần (headers, parameters,
data)
Đầu ra:
Phản hồi từ API hoặc thông báo lỗi chi tiết
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa hàm để gửi yêu cầu HTTP và xử lý lỗi.
3. Định nghĩa URL của API và các cấu hình khác.
4. Gửi yêu cầu đến API và xử lý phản hồi.
5. Hiển thị kết quả hoặc thông báo lỗi.

Code Python
import requests
from requests.exceptions import HTTPError, Timeout,
RequestException
# Bước 2: Định nghĩa hàm để gửi yêu cầu HTTP và xử lý lỗi
def send_request(method, url, **kwargs):
try:
if method.upper() == 'GET':
response = requests.get(url, **kwargs)
elif method.upper() == 'POST':
response = requests.post(url, **kwargs)
elif method.upper() == 'PUT':
response = requests.put(url, **kwargs)
elif method.upper() == 'DELETE':
response = requests.delete(url, **kwargs)
else:
raise ValueError("Phương thức HTTP không hợp lệ")

# Kiểm tra mã trạng thái HTTP


response.raise_for_status()

# Trả về nội dung phản hồi JSON nếu có


if response.content:
return response.json()
return {"message": "Thành công nhưng không có nội
dung trả về."}

except HTTPError as http_err:


return {"error": f"HTTP error occurred: {http_err}"}
except Timeout as timeout_err:
return {"error": f"Timeout error occurred:
{timeout_err}"}
except RequestException as req_err:
return {"error": f"Request error occurred:
{req_err}"}
except ValueError as val_err:
return {"error": f"Value error occurred: {val_err}"}
except Exception as err:
return {"error": f"An error occurred: {err}"}

# Bước 3: Định nghĩa URL của API và các cấu hình khác
api_url = "https://api.example.com/data/1"
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
payload = {
"key1": "value1",
"key2": "value2"
}

# Bước 4: Gửi yêu cầu đến API và xử lý phản hồi


method = 'PUT' # Hoặc 'GET', 'POST', 'DELETE'
response = send_request(method, api_url, headers=headers,
json=payload)

# Bước 5: Hiển thị kết quả hoặc thông báo lỗi


print(response)

Giải thích code


1. Import thư viện requests và các ngoại lệ:
requests để gửi các yêu cầu HTTP.
HTTPError, Timeout, RequestException để xử lý các ngoại lệ
liên quan đến HTTP, thời gian chờ và yêu cầu.
2. Định nghĩa hàm send_request để gửi yêu cầu HTTP và xử lý
lỗi:
Hàm nhận các tham số method (phương thức HTTP), url
(URL của API) và các tham số tùy chọn khác (kwargs).
Gửi yêu cầu HTTP tương ứng dựa trên phương thức.
Kiểm tra mã trạng thái HTTP
(response.raise_for_status()).
Trả về nội dung phản hồi JSON nếu có, hoặc thông báo
thành công mà không có nội dung.
3. Định nghĩa URL của API và các cấu hình khác:
api_url là biến lưu trữ URL của API.
headers là thông tin cấu hình tiêu đề HTTP của yêu cầu.
payload là dữ liệu được gửi kèm theo yêu cầu (dành cho
POST và PUT).
4. Gửi yêu cầu đến API và xử lý phản hồi:
method là phương thức HTTP (GET, POST, PUT, DELETE).
Gọi hàm send_request với các tham số tương ứng và lưu trữ
phản hồi trong biến response.
5. Hiển thị kết quả hoặc thông báo lỗi:
In ra phản hồi từ hàm send_request, có thể là dữ liệu JSON
hoặc thông báo lỗi.

Tóm tắt:
Import thư viện requests và các ngoại lệ để gửi yêu cầu
HTTP và xử lý lỗi.
Định nghĩa hàm send_request để gửi yêu cầu HTTP và xử lý
lỗi.
Định nghĩa URL của API, cấu hình tiêu đề HTTP và dữ liệu.
Gửi yêu cầu HTTP và nhận phản hồi từ API.
Kiểm tra mã trạng thái của phản hồi để xác định xem yêu cầu
có thành công không.
Hiển thị kết quả hoặc thông báo lỗi.
Chương trình này gửi một yêu cầu HTTP đến API, xử lý các lỗi có
thể xảy ra và hiển thị kết quả hoặc thông báo lỗi chi tiết.
247 - Viết chương trình để kiểm tra
trạng thái của API

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để kiểm tra trạng thái
của API. Chương trình cần gửi yêu cầu đến API và kiểm tra mã
trạng thái HTTP để xác định xem API có hoạt động bình thường hay
không.

Thuật toán
Đầu vào:
URL của API (endpoint)
Các thông tin cấu hình thêm nếu cần (headers)
Đầu ra:
Trạng thái của API (hoạt động bình thường hoặc gặp sự cố)
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa URL của API.
3. Gửi yêu cầu GET đến API.
4. Nhận và kiểm tra mã trạng thái HTTP từ phản hồi.
5. Hiển thị trạng thái của API.

Code Python
import requests
from requests.exceptions import HTTPError, Timeout,
RequestException

# Bước 2: Định nghĩa URL của API


api_url = "https://api.example.com/health"
headers = {
"Accept": "application/json"
}

# Bước 3: Gửi yêu cầu GET đến API và xử lý lỗi


def check_api_status(url, headers=None):
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
return {
"status": "success",
"status_code": response.status_code,
"message": "API is working normally."
}
except HTTPError as http_err:
return {
"status": "error",
"status_code": response.status_code if response
else None,
"message": f"HTTP error occurred: {http_err}"
}
except Timeout as timeout_err:
return {
"status": "error",
"message": f"Timeout error occurred:
{timeout_err}"
}
except RequestException as req_err:
return {
"status": "error",
"message": f"Request error occurred: {req_err}"
}
except Exception as err:
return {
"status": "error",
"message": f"An error occurred: {err}"
}

# Bước 4: Gửi yêu cầu đến API và kiểm tra trạng thái
result = check_api_status(api_url, headers=headers)
# Bước 5: Hiển thị trạng thái của API
print(result)

Giải thích code


1. Import thư viện requests và các ngoại lệ:
Thư viện requests được sử dụng để gửi các yêu cầu HTTP.
HTTPError, Timeout, RequestException để xử lý các ngoại lệ
liên quan đến HTTP, thời gian chờ và yêu cầu.
2. Định nghĩa URL của API:
api_url là biến lưu trữ URL của API mà chúng ta sẽ kiểm
tra.
headers là thông tin cấu hình tiêu đề HTTP của yêu cầu.
3. Định nghĩa hàm check_api_status để gửi yêu cầu GET và xử lý
lỗi:
Hàm nhận các tham số url (URL của API) và headers (tiêu
đề HTTP).
Gửi yêu cầu GET đến URL được định nghĩa với các tiêu đề.
Kiểm tra mã trạng thái HTTP
(response.raise_for_status()).
Trả về trạng thái thành công nếu yêu cầu thành công.
Bắt các ngoại lệ và trả về thông báo lỗi tương ứng.
4. Gửi yêu cầu đến API và kiểm tra trạng thái:
Gọi hàm check_api_status với các tham số tương ứng và
lưu trữ kết quả trong biến result.
5. Hiển thị trạng thái của API:
In ra kết quả từ hàm check_api_status, có thể là trạng thái
thành công hoặc thông báo lỗi chi tiết.

Tóm tắt:
Import thư viện requests và các ngoại lệ để gửi yêu cầu
HTTP và xử lý lỗi.
Định nghĩa URL của API và cấu hình tiêu đề HTTP.
Định nghĩa hàm check_api_status để gửi yêu cầu GET và xử
lý lỗi.
Gửi yêu cầu GET và nhận phản hồi từ API.
Kiểm tra mã trạng thái của phản hồi để xác định xem API có
hoạt động bình thường không.
Hiển thị trạng thái của API hoặc thông báo lỗi.
Chương trình này gửi một yêu cầu GET đến API, kiểm tra mã trạng
thái HTTP để xác định xem API có hoạt động bình thường không, và
hiển thị trạng thái của API hoặc thông báo lỗi chi tiết nếu có sự cố.
248 - Viết chương trình để xác thực
người dùng khi gọi API

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để xác thực người
dùng khi gọi API. Chương trình cần gửi yêu cầu HTTP (GET, POST,
PUT, DELETE) đến API và bao gồm thông tin xác thực trong yêu cầu
để đảm bảo rằng chỉ người dùng hợp lệ mới có thể truy cập vào API.

Thuật toán
Đầu vào:
URL của API (endpoint)
Phương thức HTTP (GET, POST, PUT, DELETE)
Thông tin xác thực (ví dụ: token, username/password)
Các thông tin cấu hình thêm nếu cần (headers, parameters,
data)
Đầu ra:
Phản hồi từ API hoặc thông báo lỗi chi tiết
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa hàm để gửi yêu cầu HTTP và xác thực người
dùng.
3. Định nghĩa URL của API, thông tin xác thực và các cấu hình
khác.
4. Gửi yêu cầu đến API và xử lý phản hồi.
5. Hiển thị kết quả hoặc thông báo lỗi.
Thư viện sử dụng
import requests
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
from requests.exceptions import HTTPError, Timeout,
RequestException

Code Python
import requests
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
from requests.exceptions import HTTPError, Timeout,
RequestException

# Bước 2: Định nghĩa hàm để gửi yêu cầu HTTP và xác thực
người dùng
def send_authenticated_request(method, url, auth=None,
**kwargs):
try:
if method.upper() == 'GET':
response = requests.get(url, auth=auth, **kwargs)
elif method.upper() == 'POST':
response = requests.post(url, auth=auth,
**kwargs)
elif method.upper() == 'PUT':
response = requests.put(url, auth=auth, **kwargs)
elif method.upper() == 'DELETE':
response = requests.delete(url, auth=auth,
**kwargs)
else:
raise ValueError("Phương thức HTTP không hợp lệ")

# Kiểm tra mã trạng thái HTTP


response.raise_for_status()

# Trả về nội dung phản hồi JSON nếu có


if response.content:
return response.json()
return {"message": "Thành công nhưng không có nội
dung trả về."}

except HTTPError as http_err:


return {"error": f"HTTP error occurred: {http_err}"}
except Timeout as timeout_err:
return {"error": f"Timeout error occurred:
{timeout_err}"}
except RequestException as req_err:
return {"error": f"Request error occurred:
{req_err}"}
except ValueError as val_err:
return {"error": f"Value error occurred: {val_err}"}
except Exception as err:
return {"error": f"An error occurred: {err}"}

# Bước 3: Định nghĩa URL của API, thông tin xác thực và các
cấu hình khác
api_url = "https://api.example.com/data"
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
payload = {
"key1": "value1",
"key2": "value2"
}
# Xác thực cơ bản (Basic Authentication)
auth = HTTPBasicAuth('username', 'password')

# Bước 4: Gửi yêu cầu đến API và xử lý phản hồi


method = 'POST' # Hoặc 'GET', 'PUT', 'DELETE'
response = send_authenticated_request(method, api_url,
auth=auth, headers=headers, json=payload)

# Bước 5: Hiển thị kết quả hoặc thông báo lỗi


print(response)

Giải thích code


1. Import thư viện requests và các ngoại lệ:
Thư viện requests được sử dụng để gửi các yêu cầu HTTP.
HTTPBasicAuth, HTTPDigestAuth để xử lý xác thực cơ bản và
xác thực digest.
HTTPError, Timeout, RequestException để xử lý các ngoại lệ
liên quan đến HTTP, thời gian chờ và yêu cầu.
2. Định nghĩa hàm send_authenticated_request để gửi yêu cầu
HTTP và xác thực người dùng:
Hàm nhận các tham số method (phương thức HTTP), url
(URL của API), auth (thông tin xác thực) và các tham số tùy
chọn khác (kwargs).
Gửi yêu cầu HTTP tương ứng dựa trên phương thức và
thông tin xác thực.
Kiểm tra mã trạng thái HTTP
(response.raise_for_status()).
Trả về nội dung phản hồi JSON nếu có, hoặc thông báo
thành công mà không có nội dung.
3. Định nghĩa URL của API, thông tin xác thực và các cấu hình
khác:
api_url là biến lưu trữ URL của API.
headers là thông tin cấu hình tiêu đề HTTP của yêu cầu.
payload là dữ liệu được gửi kèm theo yêu cầu (dành cho
POST và PUT).
auth là thông tin xác thực sử dụng Basic Authentication.
4. Gửi yêu cầu đến API và xử lý phản hồi:
method là phương thức HTTP (GET, POST, PUT, DELETE).
Gọi hàm send_authenticated_request với các tham số
tương ứng và lưu trữ phản hồi trong biến response.
5. Hiển thị kết quả hoặc thông báo lỗi:
In ra phản hồi từ hàm send_authenticated_request, có thể
là dữ liệu JSON hoặc thông báo lỗi chi tiết.
Tóm tắt:
Import thư viện requests và các ngoại lệ để gửi yêu cầu
HTTP và xử lý lỗi.
Định nghĩa hàm send_authenticated_request để gửi yêu cầu
HTTP và xác thực người dùng.
Định nghĩa URL của API, cấu hình tiêu đề HTTP, dữ liệu và
thông tin xác thực.
Gửi yêu cầu HTTP và nhận phản hồi từ API.
Kiểm tra mã trạng thái của phản hồi để xác định xem yêu cầu
có thành công không.
Hiển thị kết quả hoặc thông báo lỗi.
Chương trình này gửi một yêu cầu HTTP đến API với thông tin xác
thực, xử lý các lỗi có thể xảy ra và hiển thị kết quả hoặc thông báo
lỗi chi tiết nếu có sự cố.
249 - Viết chương trình để lấy dữ liệu
thời tiết từ API

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để lấy dữ liệu thời tiết
từ một API miễn phí. Chương trình cần gửi yêu cầu đến API để lấy
dữ liệu thời tiết của các thành phố lớn ở Việt Nam và hiển thị kết
quả.

Thuật toán
Đầu vào:
URL của API (endpoint)
Thông tin xác thực (nếu có)
Danh sách các thành phố lớn ở Việt Nam
Đầu ra:
Dữ liệu thời tiết của các thành phố
Các bước thực hiện:
1. Import các thư viện cần thiết.
2. Định nghĩa hàm để gửi yêu cầu HTTP đến API và lấy dữ liệu
thời tiết.
3. Định nghĩa URL của API và các cấu hình khác.
4. Gửi yêu cầu đến API cho mỗi thành phố và xử lý phản hồi.
5. Hiển thị kết quả.

Cài đặt thư viện


import requests
Code Python
Sử dụng API từ OpenWeatherMap, bạn có thể lấy dữ liệu thời tiết
miễn phí bằng cách đăng ký để lấy API key. Dưới đây là chương
trình Python để lấy dữ liệu thời tiết từ OpenWeatherMap:
import requests

# Bước 2: Định nghĩa hàm để gửi yêu cầu HTTP đến API và lấy
dữ liệu thời tiết
def get_weather(city_name, api_key):
base_url =
"http://api.openweathermap.org/data/2.5/weather"
params = {
'q': city_name,
'appid': api_key,
'units': 'metric',
'lang': 'vi'
}

try:
response = requests.get(base_url, params=params)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as http_err:
return {"error": f"HTTP error occurred: {http_err}"}
except requests.exceptions.RequestException as req_err:
return {"error": f"Request error occurred:
{req_err}"}

# Bước 3: Định nghĩa URL của API và các cấu hình khác
api_key = "your_api_key_here" # Thay thế bằng API key của
bạn
cities = ["Hanoi", "Ho Chi Minh City", "Da Nang", "Hue", "Can
Tho"]

# Bước 4: Gửi yêu cầu đến API cho mỗi thành phố và xử lý phản
hồi
for city in cities:
weather_data = get_weather(city, api_key)
if 'error' in weather_data:
print(f"Lỗi khi lấy dữ liệu thời tiết cho {city}:
{weather_data['error']}")
else:
print(f"Thời tiết tại {city}:")
print(f"Nhiệt độ: {weather_data['main']['temp']}°C")
print(f"Mô tả: {weather_data['weather'][0]
['description']}")
print("-----------")

Giải thích code


1. Import thư viện requests:
Thư viện requests được sử dụng để gửi các yêu cầu HTTP.
2. Định nghĩa hàm get_weather để gửi yêu cầu HTTP đến API và
lấy dữ liệu thời tiết:
Hàm nhận các tham số city_name (tên thành phố) và
api_key (API key).
base_url là URL cơ bản của API.
params là các tham số của yêu cầu, bao gồm tên thành phố,
API key, đơn vị nhiệt độ (metric), và ngôn ngữ (vi).
Gửi yêu cầu GET đến URL với các tham số.
Kiểm tra mã trạng thái HTTP
(response.raise_for_status()).
Trả về nội dung phản hồi JSON nếu yêu cầu thành công.
Bắt các ngoại lệ và trả về thông báo lỗi nếu có sự cố.
3. Định nghĩa API key và danh sách các thành phố:
api_key là API key của bạn từ OpenWeatherMap.
cities là danh sách các thành phố lớn ở Việt Nam.
4. Gửi yêu cầu đến API cho mỗi thành phố và xử lý phản hồi:
Lặp qua từng thành phố trong danh sách.
Gọi hàm get_weather với tên thành phố và API key.
Nếu có lỗi, in ra thông báo lỗi.
Nếu thành công, in ra thông tin thời tiết của thành phố đó.
5. Hiển thị kết quả:
In ra nhiệt độ và mô tả thời tiết của mỗi thành phố hoặc
thông báo lỗi nếu có.

Tóm tắt:
Import thư viện requests để gửi các yêu cầu HTTP.
Định nghĩa hàm get_weather để gửi yêu cầu HTTP và lấy dữ
liệu thời tiết.
Định nghĩa API key và danh sách các thành phố để lấy dữ
liệu thời tiết.
Gửi yêu cầu HTTP và nhận phản hồi từ API cho mỗi thành
phố.
Kiểm tra mã trạng thái của phản hồi để xác định xem yêu cầu
có thành công không.
Hiển thị kết quả hoặc thông báo lỗi.
Chương trình này gửi các yêu cầu HTTP đến API OpenWeatherMap
để lấy dữ liệu thời tiết của các thành phố lớn ở Việt Nam, xử lý các
lỗi có thể xảy ra, và hiển thị kết quả hoặc thông báo lỗi chi tiết nếu
có sự cố.
250 - Viết chương trình để lấy dữ liệu
tỷ giá hối đoái từ API

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để lấy dữ liệu tỷ giá hối
đoái từ một API. Điều này có nghĩa là chúng ta sẽ sử dụng một API
dịch vụ (Application Programming Interface) để truy cập và nhận dữ
liệu về tỷ giá ngoại tệ từ Internet. Sau đó, chương trình sẽ hiển thị
các thông tin này ra màn hình hoặc lưu vào một định dạng cụ thể.

Thuật toán:

Đầu vào:
URL của API cung cấp tỷ giá hối đoái (ví dụ:
https://api.exchangerate-api.com/v4/latest/USD).
Một cặp tiền tệ (ví dụ: từ USD sang VND) cần lấy tỷ giá.

Đầu ra:
Tỷ giá hối đoái từ loại tiền tệ cơ sở sang loại tiền tệ đích.

Các bước thực hiện:


1. Nhập liệu: Đọc URL của API và cặp tiền tệ mà người dùng
muốn chuyển đổi.
2. Gửi yêu cầu HTTP: Sử dụng thư viện requests để gửi yêu cầu
GET tới URL API.
3. Xử lý phản hồi: Kiểm tra nếu yêu cầu thành công (mã trạng thái
HTTP 200).
4. Phân tích dữ liệu JSON: Nếu yêu cầu thành công, phân tích dữ
liệu JSON nhận được từ API.
5. Trích xuất tỷ giá hối đoái: Tìm tỷ giá hối đoái của cặp tiền tệ
yêu cầu từ dữ liệu JSON.
6. Hiển thị kết quả: In tỷ giá hối đoái ra màn hình hoặc lưu vào tệp
nếu cần.

Cài đặt thư viện


Chúng ta cần cài đặt thư viện requests để gửi yêu cầu HTTP.
pip install requests

Code Python
import requests

# URL của API


api_url = "https://api.exchangerate-api.com/v4/latest/USD"

# Cặp tiền tệ cần chuyển đổi


base_currency = "USD"
target_currency = "VND"

try:
# Gửi yêu cầu HTTP GET đến API
response = requests.get(api_url)

# Kiểm tra nếu yêu cầu thành công (mã trạng thái 200)
if response.status_code == 200:
# Phân tích dữ liệu JSON nhận được từ API
data = response.json()

# Lấy tỷ giá hối đoái của cặp tiền tệ yêu cầu


exchange_rate = data['rates'].get(target_currency)

if exchange_rate:
# Hiển thị tỷ giá hối đoái
print(f"Tỷ giá hối đoái từ {base_currency} sang
{target_currency} là: {exchange_rate}")
else:
print(f"Không tìm thấy tỷ giá hối đoái cho
{target_currency}.")
else:
print(f"Không thể lấy dữ liệu từ API. Mã trạng thái
HTTP: {response.status_code}")

except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích code


1. Khởi tạo URL của API và cặp tiền tệ:
URL api_url được xác định để truy cập vào API.
base_currency là loại tiền tệ cơ sở (ở đây là USD).
target_currency là loại tiền tệ đích (ở đây là VND).
2. Gửi yêu cầu HTTP GET:
Sử dụng requests.get(api_url) để gửi yêu cầu GET đến
API.
3. Kiểm tra trạng thái phản hồi:
Kiểm tra mã trạng thái của phản hồi bằng
response.status_code.
Nếu mã trạng thái là 200, nghĩa là yêu cầu thành công.
4. Phân tích dữ liệu JSON:
Sử dụng response.json() để chuyển đổi dữ liệu JSON nhận
được từ API thành đối tượng Python (từ điển).
5. Lấy tỷ giá hối đoái:
Truy cập vào tỷ giá của target_currency trong từ điển dữ
liệu data['rates'].
6. Hiển thị kết quả:
In tỷ giá hối đoái ra màn hình nếu tồn tại.
Nếu không tìm thấy tỷ giá cho target_currency, in thông báo
lỗi.
7. Xử lý lỗi:
Sử dụng khối try-except để bắt và xử lý các lỗi phát sinh
trong quá trình gửi yêu cầu hoặc xử lý dữ liệu.

Bổ sung
Không có các cách giải khác phức tạp hơn cách trên vì cách tiếp
cận này đã đơn giản và trực quan.

Tóm tắt:
Sử dụng thư viện requests để gửi yêu cầu HTTP GET.
Phân tích cú pháp JSON để trích xuất dữ liệu.
Sử dụng cấu trúc điều kiện để kiểm tra và xử lý dữ liệu.
Sử dụng cấu trúc try-except để xử lý lỗi.
Chương trình lấy dữ liệu tỷ giá hối đoái từ API và hiển thị tỷ giá hối
đoái từ USD sang một loại tiền tệ khác, xử lý các trường hợp lỗi
trong quá trình lấy dữ liệu.
Chương 26 : Bài tập với web
scraping cơ bản
251. Viết chương trình để tải xuống trang web.
252. Viết chương trình để trích xuất tiêu đề của trang web.
253. Viết chương trình để trích xuất tất cả các liên kết từ trang web.
254. Viết chương trình để trích xuất tất cả các hình ảnh từ trang web.
255. Viết chương trình để trích xuất nội dung của một bài viết từ trang
web.
256. Viết chương trình để trích xuất tất cả các đoạn văn từ trang web.
257. Viết chương trình để trích xuất tất cả các bảng từ trang web.
258. Viết chương trình để trích xuất tất cả các tiêu đề từ trang web.
259. Viết chương trình để trích xuất tất cả các đoạn mã nguồn từ
trang web.
260. Viết chương trình để trích xuất tất cả các thẻ meta từ trang web.
251 - Viết chương trình để tải xuống
trang web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để thực hiện web
scraping cơ bản: tải xuống nội dung của một trang web và phân tích
dữ liệu từ đó.

Web scraping là kỹ thuật tự động thu thập thông tin từ các trang
web. Trong trường hợp này, chương trình sẽ gửi yêu cầu tới một
URL, nhận về nội dung HTML và có thể trích xuất một số thông tin
cụ thể từ đó.

Thuật toán:

Đầu vào:
URL của trang web cần tải xuống.
(Tuỳ chọn) Các thông tin cụ thể cần trích xuất từ trang web, ví dụ
như tiêu đề (title), tất cả các liên kết (links), hoặc các đoạn văn
bản (paragraphs).

Đầu ra:
Nội dung HTML của trang web, có thể được lưu vào một tệp
hoặc in ra màn hình.
(Tuỳ chọn) Các thông tin cụ thể được trích xuất từ trang web.
Các bước thực hiện:
1. Nhập liệu: Người dùng nhập URL của trang web cần tải xuống.
2. Gửi yêu cầu HTTP: Sử dụng thư viện requests để gửi yêu cầu
GET tới URL đó.
3. Xử lý phản hồi: Kiểm tra nếu yêu cầu thành công (mã trạng thái
HTTP 200).
4. Lưu nội dung HTML: Lưu nội dung HTML của trang web vào
một tệp hoặc in ra màn hình.
5. Phân tích và trích xuất dữ liệu: Sử dụng BeautifulSoup để
phân tích cú pháp HTML và trích xuất thông tin cụ thể nếu cần.

Cài đặt thư viện


Chúng ta cần cài đặt các thư viện requests để gửi yêu cầu HTTP và
beautifulsoup4 để phân tích cú pháp HTML.

pip install requests beautifulsoup4

Code Python
import requests
from bs4 import BeautifulSoup

# Nhập URL của trang web cần tải xuống


url = input("Nhập URL của trang web cần tải xuống: ")

# Tên tệp để lưu nội dung HTML


output_file = "downloaded_page.html"

try:
# Gửi yêu cầu HTTP GET đến URL
response = requests.get(url)

# Kiểm tra nếu yêu cầu thành công (mã trạng thái 200)
if response.status_code == 200:
# Lưu nội dung HTML vào tệp
with open(output_file, "w", encoding='utf-8') as
file:
file.write(response.text)
print(f"Nội dung HTML của trang web đã được lưu vào
tệp '{output_file}'.")

# Phân tích cú pháp HTML bằng BeautifulSoup


soup = BeautifulSoup(response.text, 'html.parser')

# Trích xuất và in tiêu đề trang


page_title = soup.title.string
print(f"Tiêu đề trang web: {page_title}")

# Trích xuất tất cả các liên kết (links) từ trang


links = soup.find_all('a')
print("\nCác liên kết (links) trên trang web:")
for link in links:
href = link.get('href')
text = link.get_text(strip=True)
print(f"Text: {text}, URL: {href}")

# Trích xuất các đoạn văn bản (paragraphs)


paragraphs = soup.find_all('p')
print("\nCác đoạn văn bản (paragraphs) trên trang
web:")
for p in paragraphs:
print(p.get_text(strip=True))

else:
print(f"Không thể tải xuống trang web. Mã trạng thái
HTTP: {response.status_code}")

except Exception as e:
print(f"Đã xảy ra lỗi: {e}")

Giải thích code


1. Nhập URL của trang web:
Sử dụng input() để người dùng nhập URL của trang web
mà họ muốn tải xuống.
2. Định nghĩa tên tệp đầu ra:
output_file là tên tệp mà nội dung HTML của trang web sẽ
được lưu vào.
3. Gửi yêu cầu HTTP GET:
Sử dụng requests.get(url) để gửi yêu cầu GET tới URL
nhập vào.
4. Kiểm tra trạng thái phản hồi:
Kiểm tra mã trạng thái của phản hồi bằng
response.status_code.
Nếu mã trạng thái là 200, nghĩa là yêu cầu thành công.
5. Lưu nội dung HTML vào tệp:
Sử dụng open(output_file, "w", encoding='utf-8') để
mở hoặc tạo tệp output_file trong chế độ ghi.
Sử dụng file.write(response.text) để ghi nội dung HTML
nhận được từ phản hồi vào tệp.
6. Phân tích cú pháp HTML:
Sử dụng BeautifulSoup để phân tích cú pháp của nội dung
HTML đã tải xuống (response.text).
7. Trích xuất tiêu đề trang:
Truy cập vào thẻ <title> của trang và lấy nội dung của nó.
8. Trích xuất tất cả các liên kết:
Sử dụng soup.find_all('a') để tìm tất cả các thẻ <a> trên
trang web và trích xuất thuộc tính href và văn bản liên kết.
9. Trích xuất các đoạn văn bản:
Sử dụng soup.find_all('p') để tìm tất cả các thẻ <p> (đoạn
văn) trên trang và lấy nội dung văn bản của chúng.
10. Xử lý lỗi:
Sử dụng khối try-except để bắt và xử lý các lỗi phát sinh
trong quá trình gửi yêu cầu hoặc xử lý dữ liệu.
Bổ sung
Nếu cần tải xuống và phân tích nhiều trang, có thể mở rộng
chương trình để lặp qua một danh sách các URL.
Có thể bổ sung thêm tính năng lưu trữ các liên kết hoặc đoạn
văn bản vào các tệp riêng biệt.

Tóm tắt:
Sử dụng thư viện requests để gửi yêu cầu HTTP GET.
Sử dụng thư viện BeautifulSoup để phân tích cú pháp HTML.
Sử dụng phương thức open() và write() để lưu nội dung HTML
vào tệp.
Sử dụng các phương thức của BeautifulSoup để trích xuất
thông tin cụ thể từ HTML.
Sử dụng cấu trúc try-except để xử lý lỗi.
Chương trình này tải xuống nội dung HTML của một trang web từ
URL được cung cấp bởi người dùng, phân tích cú pháp HTML để
trích xuất tiêu đề trang, các liên kết, và các đoạn văn bản, sau đó
hiển thị hoặc lưu các thông tin này.
252 - Viết chương trình để trích xuất
tiêu đề của trang web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất tiêu đề
của một trang web cụ thể. Chương trình này sẽ sử dụng kỹ thuật
web scraping, tức là truy cập và trích xuất dữ liệu từ một trang web.

Thuật toán:
Đầu vào:

URL của trang web cần trích xuất tiêu đề.

Đầu ra:

Tiêu đề của trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để thực hiện việc trích xuất tiêu đề từ URL
cung cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất tiêu đề trang web.
5. In ra tiêu đề trang web.

Cài đặt thư viện


pip install requests beautifulsoup4
Code Python
import requests
from bs4 import BeautifulSoup

def extract_title(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất tiêu đề trang web


title = soup.title.string

# Trả về tiêu đề
return title
else:
return None

# URL của trang web cần trích xuất tiêu đề


url = "http://example.com"
title = extract_title(url)
if title:
print(f"Tiêu đề của trang web là: {title}")
else:
print("Không thể truy cập trang web hoặc trang web không
có tiêu đề.")

Giải thích code


1. Cài đặt thư viện:

requests:Thư viện này dùng để gửi các yêu cầu HTTP.


beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.
2. Hàm extract_title(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất tiêu đề trang web:
soup.title.string: Trích xuất nội dung tiêu đề từ thẻ
<title>.
Trả về tiêu đề: Trả về tiêu đề nếu có, ngược lại trả về None.

3. Sử dụng hàm extract_title:

URL của trang web cần trích xuất tiêu đề: Khai báo URL
của trang web.
Gọi hàm extract_title và in tiêu đề:
Gọi hàm extract_title với URL đã khai báo.
Kiểm tra và in tiêu đề nếu có, ngược lại in thông báo lỗi.

Bổ sung
Không có bổ sung.

Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.title.string: Trích xuất tiêu đề trang web từ thẻ <title>.

Chương trình này trích xuất và in tiêu đề của một trang web từ URL
cung cấp bằng cách sử dụng thư viện requests để gửi yêu cầu
HTTP và BeautifulSoup để phân tích cú pháp HTML.
253 - Viết chương trình để trích xuất
tất cả các liên kết từ trang web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất tất cả các
liên kết (URLs) từ một trang web cụ thể mà người dùng nhập vào.

Thuật toán:
Đầu vào:

URL của trang web cần trích xuất các liên kết (nhập từ người
dùng).

Đầu ra:

Danh sách các liên kết từ trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để trích xuất tất cả các liên kết từ URL cung
cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất tất cả các liên kết.
5. In ra danh sách các liên kết.

Cài đặt thư viện


pip install requests beautifulsoup4
Code Python
import requests
from bs4 import BeautifulSoup

def extract_links(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất tất cả các liên kết


links = []
for link in soup.find_all('a', href=True):
links.append(link['href'])

# Trả về danh sách các liên kết


return links
else:
return None

# Nhập URL của trang web từ người dùng


url = input("Nhập URL của trang web: ")
links = extract_links(url)
if links:
print("Các liên kết trên trang web:")
for link in links:
print(link)
else:
print("Không thể truy cập trang web hoặc trang web không
có liên kết.")

Giải thích code


1. Cài đặt thư viện:
requests:Thư viện này dùng để gửi các yêu cầu HTTP.
beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.

2. Hàm extract_links(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất tất cả các liên kết:
soup.find_all('a', href=True): Tìm tất cả các thẻ <a>
có thuộc tính href.
Lặp qua các thẻ <a> và thêm giá trị của thuộc tính href
vào danh sách links.
Trả về danh sách các liên kết: Trả về danh sách các liên
kết nếu có, ngược lại trả về None.

3. Sử dụng hàm extract_links:

Nhập URL của trang web từ người dùng: Sử dụng hàm


input để người dùng nhập URL.
Gọi hàm extract_links và in danh sách các liên kết:
Gọi hàm extract_links với URL đã nhập.
Kiểm tra và in danh sách các liên kết nếu có, ngược lại in
thông báo lỗi.

Bổ sung
Không có bổ sung.
Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.find_all(‘a’, href=True): Tìm tất cả các thẻ <a> có thuộc
tính href.
links.append(link[‘href’]): Thêm giá trị của thuộc tính href vào
danh sách links.

Chương trình này trích xuất và in tất cả các liên kết từ một trang web
mà người dùng nhập vào bằng cách sử dụng thư viện requests để
gửi yêu cầu HTTP và BeautifulSoup để phân tích cú pháp HTML.
254 - Viết chương trình để trích xuất
tất cả các hình ảnh từ trang web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất tất cả các
hình ảnh (URLs của các hình ảnh) từ một trang web cụ thể.

Thuật toán:
Đầu vào:

URL của trang web cần trích xuất các hình ảnh (nhập từ
người dùng).

Đầu ra:

Danh sách các URLs của các hình ảnh từ trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để trích xuất tất cả các hình ảnh từ URL cung
cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất tất cả các URLs của các
hình ảnh.
5. In ra danh sách các URLs của các hình ảnh.

Cài đặt thư viện


pip install requests beautifulsoup4
Code Python
import requests
from bs4 import BeautifulSoup

def extract_images(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất tất cả các hình ảnh


images = []
for img in soup.find_all('img', src=True):
images.append(img['src'])

# Trả về danh sách các hình ảnh


return images
else:
return None

# Nhập URL của trang web từ người dùng


url = input("Nhập URL của trang web: ")
images = extract_images(url)
if images:
print("Các hình ảnh trên trang web:")
for img in images:
print(img)
else:
print("Không thể truy cập trang web hoặc trang web không
có hình ảnh.")

Giải thích code


1. Cài đặt thư viện:
requests:Thư viện này dùng để gửi các yêu cầu HTTP.
beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.

2. Hàm extract_images(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất tất cả các hình ảnh:
soup.find_all('img', src=True): Tìm tất cả các thẻ
<img> có thuộc tính src.
Lặp qua các thẻ <img> và thêm giá trị của thuộc tính src
vào danh sách images.
Trả về danh sách các hình ảnh: Trả về danh sách các hình
ảnh nếu có, ngược lại trả về None.

3. Sử dụng hàm extract_images:

Nhập URL của trang web từ người dùng: Sử dụng hàm


input để người dùng nhập URL.
Gọi hàm extract_images và in danh sách các hình ảnh:
Gọi hàm extract_images với URL đã nhập.
Kiểm tra và in danh sách các hình ảnh nếu có, ngược lại
in thông báo lỗi.

Bổ sung
Không có bổ sung.
Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.find_all(‘img’, src=True): Tìm tất cả các thẻ <img> có
thuộc tính src.
images.append(img[‘src’]): Thêm giá trị của thuộc tính src vào
danh sách images.

Chương trình này trích xuất và in tất cả các URLs của các hình ảnh
từ một trang web mà người dùng nhập vào bằng cách sử dụng thư
viện requests để gửi yêu cầu HTTP và BeautifulSoup để phân tích
cú pháp HTML.
255 - Viết chương trình để trích xuất
nội dung của một bài viết từ trang
web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất nội dung
của một bài viết từ một trang web cụ thể.

Thuật toán:
Đầu vào:

URL của trang web chứa bài viết (nhập từ người dùng).

Đầu ra:

Nội dung của bài viết từ trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để trích xuất nội dung bài viết từ URL cung
cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất nội dung bài viết.
5. In ra nội dung bài viết.

Cài đặt thư viện


pip install requests beautifulsoup4
Code Python
import requests
from bs4 import BeautifulSoup

def extract_article_content(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất nội dung bài viết


# Giả định rằng nội dung bài viết nằm trong thẻ <div>
với class "article-content"
article_content = soup.find('div', class_='article-
content')

if article_content:
# Trả về nội dung bài viết dưới dạng chuỗi
return article_content.get_text(separator='\n')
else:
return None
else:
return None

# Nhập URL của trang web từ người dùng


url = input("Nhập URL của trang web chứa bài viết: ")
content = extract_article_content(url)
if content:
print("Nội dung của bài viết:")
print(content)
else:
print("Không thể truy cập trang web hoặc không tìm thấy
nội dung bài viết.")
Giải thích code
1. Cài đặt thư viện:

requests:Thư viện này dùng để gửi các yêu cầu HTTP.


beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.

2. Hàm extract_article_content(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất nội dung bài viết:
soup.find('div', class_='article-content'): Tìm thẻ
<div> với class article-content (giả định cấu trúc HTML
của trang web).
Kiểm tra và trả về nội dung bài viết:
Nếu tìm thấy thẻ chứa nội dung bài viết, trả về nội
dung dưới dạng chuỗi.
Nếu không tìm thấy, trả về None.

3. Sử dụng hàm extract_article_content:

Nhập URL của trang web từ người dùng: Sử dụng hàm


input để người dùng nhập URL.
Gọi hàm extract_article_content và in nội dung bài viết:
Gọi hàm extract_article_content với URL đã nhập.
Kiểm tra và in nội dung bài viết nếu có, ngược lại in
thông báo lỗi.
Bổ sung
Nếu không biết trước cấu trúc HTML của trang web:
Có thể sử dụng công cụ Inspect Element trên trình duyệt để
xác định thẻ và class chứa nội dung bài viết.
Điều chỉnh hàm extract_article_content để phù hợp với
cấu trúc cụ thể của trang web cần trích xuất.

Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.find(‘div’, class_=‘article-content’): Tìm thẻ <div> với
class article-content.
article_content.get_text(separator=‘’): Trích xuất nội dung văn
bản từ thẻ và trả về dưới dạng chuỗi.

Chương trình này trích xuất và in nội dung của một bài viết từ một
trang web mà người dùng nhập vào bằng cách sử dụng thư viện
requests để gửi yêu cầu HTTP và BeautifulSoup để phân tích cú
pháp HTML.
256 - Viết chương trình để trích xuất
tất cả các đoạn văn từ trang web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất tất cả các
đoạn văn (paragraphs) từ một trang web cụ thể.

Thuật toán:
Đầu vào:

URL của trang web chứa các đoạn văn (nhập từ người
dùng).

Đầu ra:

Danh sách các đoạn văn từ trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để trích xuất tất cả các đoạn văn từ URL cung
cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất tất cả các đoạn văn.
5. In ra danh sách các đoạn văn.

Cài đặt thư viện


pip install requests beautifulsoup4
Code Python
import requests
from bs4 import BeautifulSoup

def extract_paragraphs(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất tất cả các đoạn văn


paragraphs = []
for p in soup.find_all('p'):
paragraphs.append(p.get_text())

# Trả về danh sách các đoạn văn


return paragraphs
else:
return None

# Nhập URL của trang web từ người dùng


url = input("Nhập URL của trang web: ")
paragraphs = extract_paragraphs(url)
if paragraphs:
print("Các đoạn văn trên trang web:")
for p in paragraphs:
print(p)
else:
print("Không thể truy cập trang web hoặc không tìm thấy
đoạn văn.")

Giải thích code


1. Cài đặt thư viện:
requests:Thư viện này dùng để gửi các yêu cầu HTTP.
beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.

2. Hàm extract_paragraphs(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất tất cả các đoạn văn:
soup.find_all('p'): Tìm tất cả các thẻ <p>.
Lặp qua các thẻ <p> và thêm nội dung văn bản của thẻ
vào danh sách paragraphs.
Trả về danh sách các đoạn văn: Trả về danh sách các
đoạn văn nếu có, ngược lại trả về None.

3. Sử dụng hàm extract_paragraphs:

Nhập URL của trang web từ người dùng: Sử dụng hàm


input để người dùng nhập URL.
Gọi hàm extract_paragraphs và in danh sách các đoạn
văn:
Gọi hàm extract_paragraphs với URL đã nhập.
Kiểm tra và in danh sách các đoạn văn nếu có, ngược lại
in thông báo lỗi.

Bổ sung
Không có bổ sung.
Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.find_all(‘p’): Tìm tất cả các thẻ <p>.
p.get_text(): Trích xuất nội dung văn bản từ thẻ <p> và thêm vào
danh sách paragraphs.

Chương trình này trích xuất và in tất cả các đoạn văn từ một trang
web mà người dùng nhập vào bằng cách sử dụng thư viện requests
để gửi yêu cầu HTTP và BeautifulSoup để phân tích cú pháp HTML.
257 - Viết chương trình để trích xuất
tất cả các bảng từ trang web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất tất cả các
bảng (tables) từ một trang web cụ thể.

Thuật toán:
Đầu vào:

URL của trang web chứa các bảng (nhập từ người dùng).

Đầu ra:

Danh sách các bảng từ trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để trích xuất tất cả các bảng từ URL cung cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất tất cả các bảng.
5. In ra danh sách các bảng.

Cài đặt thư viện


pip install requests beautifulsoup4
Code Python
import requests
from bs4 import BeautifulSoup
import pandas as pd

def extract_tables(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất tất cả các bảng


tables = []
for table in soup.find_all('table'):
# Chuyển đổi bảng HTML thành DataFrame của pandas
df = pd.read_html(str(table))[0]
tables.append(df)

# Trả về danh sách các bảng


return tables
else:
return None

# Nhập URL của trang web từ người dùng


url = input("Nhập URL của trang web: ")
tables = extract_tables(url)
if tables:
print("Các bảng trên trang web:")
for i, table in enumerate(tables):
print(f"Bảng {i+1}:")
print(table)
else:
print("Không thể truy cập trang web hoặc không tìm thấy
bảng.")
Giải thích code
1. Cài đặt thư viện:

requests: Thư viện này dùng để gửi các yêu cầu HTTP.
beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.
pandas: Thư viện này dùng để xử lý dữ liệu và chuyển đổi
bảng HTML thành DataFrame.

2. Hàm extract_tables(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất tất cả các bảng:
soup.find_all('table'): Tìm tất cả các thẻ <table>.
Lặp qua các thẻ <table> và chuyển đổi bảng HTML
thành DataFrame bằng pd.read_html(str(table))[0].
Thêm DataFrame vào danh sách tables.
Trả về danh sách các bảng: Trả về danh sách các bảng
nếu có, ngược lại trả về None.

3. Sử dụng hàm extract_tables:

Nhập URL của trang web từ người dùng: Sử dụng hàm


input để người dùng nhập URL.
Gọi hàm extract_tables và in danh sách các bảng:
Gọi hàm extract_tables với URL đã nhập.
Kiểm tra và in danh sách các bảng nếu có, ngược lại in
thông báo lỗi.

Bổ sung
Không có bổ sung.

Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
import pandas as pd: Thư viện để xử lý dữ liệu và chuyển đổi
bảng HTML thành DataFrame.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.find_all(‘table’): Tìm tất cả các thẻ <table>.
pd.read_html(str(table))[0]: Chuyển đổi bảng HTML thành
DataFrame.

Chương trình này trích xuất và in tất cả các bảng từ một trang web
mà người dùng nhập vào bằng cách sử dụng thư viện requests để
gửi yêu cầu HTTP, BeautifulSoup để phân tích cú pháp HTML, và
pandas để chuyển đổi bảng HTML thành DataFrame.
258 - Viết chương trình để trích xuất
tất cả các tiêu đề từ trang web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất tất cả các
tiêu đề (headings) từ một trang web cụ thể.

Thuật toán:
Đầu vào:

URL của trang web chứa các tiêu đề (nhập từ người dùng).

Đầu ra:

Danh sách các tiêu đề từ trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để trích xuất tất cả các tiêu đề từ URL cung
cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất tất cả các tiêu đề.
5. In ra danh sách các tiêu đề.

Cài đặt thư viện


pip install requests beautifulsoup4
Code Python
import requests
from bs4 import BeautifulSoup

def extract_headings(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất tất cả các tiêu đề


headings = []
for heading in soup.find_all(['h1', 'h2', 'h3', 'h4',
'h5', 'h6']):
headings.append(heading.get_text().strip())

# Trả về danh sách các tiêu đề


return headings
else:
return None

# Nhập URL của trang web từ người dùng


url = input("Nhập URL của trang web: ")
headings = extract_headings(url)
if headings:
print("Các tiêu đề trên trang web:")
for heading in headings:
print(heading)
else:
print("Không thể truy cập trang web hoặc không tìm thấy
tiêu đề.")

Giải thích code


1. Cài đặt thư viện:
requests:Thư viện này dùng để gửi các yêu cầu HTTP.
beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.

2. Hàm extract_headings(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất tất cả các tiêu đề:
soup.find_all(['h1', 'h2', 'h3', 'h4', 'h5',
'h6']): Tìm tất cả các thẻ tiêu đề (<h1> đến <h6>).
Lặp qua các thẻ tiêu đề và thêm nội dung văn bản của
thẻ vào danh sách headings sau khi loại bỏ khoảng trắng
đầu cuối bằng strip().
Trả về danh sách các tiêu đề: Trả về danh sách các tiêu đề
nếu có, ngược lại trả về None.

3. Sử dụng hàm extract_headings:

Nhập URL của trang web từ người dùng: Sử dụng hàm


input để người dùng nhập URL.
Gọi hàm extract_headings và in danh sách các tiêu đề:
Gọi hàm extract_headings với URL đã nhập.
Kiểm tra và in danh sách các tiêu đề nếu có, ngược lại in
thông báo lỗi.
Bổ sung
Không có bổ sung.

Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.find_all([‘h1’, ‘h2’, ‘h3’, ‘h4’, ‘h5’, ‘h6’]): Tìm tất cả các
thẻ tiêu đề từ <h1> đến <h6>.
heading.get_text().strip(): Trích xuất nội dung văn bản từ thẻ
tiêu đề và loại bỏ khoảng trắng đầu cuối.

Chương trình này trích xuất và in tất cả các tiêu đề từ một trang web
mà người dùng nhập vào bằng cách sử dụng thư viện requests để
gửi yêu cầu HTTP và BeautifulSoup để phân tích cú pháp HTML.
259 - Viết chương trình để trích xuất
tất cả các đoạn mã nguồn từ trang
web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất tất cả các
đoạn mã nguồn (code snippets) từ một trang web cụ thể. Các đoạn
mã nguồn thường được đặt trong thẻ <code> hoặc <pre> trên trang
web.

Thuật toán:
Đầu vào:

URL của trang web chứa các đoạn mã nguồn (nhập từ


người dùng).

Đầu ra:

Danh sách các đoạn mã nguồn từ trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để trích xuất tất cả các đoạn mã nguồn từ URL
cung cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất tất cả các đoạn mã nguồn.
5. In ra danh sách các đoạn mã nguồn.
Cài đặt thư viện
pip install requests beautifulsoup4

Code Python
import requests
from bs4 import BeautifulSoup

def extract_code_snippets(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất tất cả các đoạn mã nguồn


code_snippets = []
for code in soup.find_all(['code', 'pre']):
code_snippets.append(code.get_text())

# Trả về danh sách các đoạn mã nguồn


return code_snippets
else:
return None

# Nhập URL của trang web từ người dùng


url = input("Nhập URL của trang web: ")
code_snippets = extract_code_snippets(url)
if code_snippets:
print("Các đoạn mã nguồn trên trang web:")
for i, snippet in enumerate(code_snippets):
print(f"Đoạn mã {i+1}:")
print(snippet)
else:
print("Không thể truy cập trang web hoặc không tìm thấy
đoạn mã nguồn.")
Giải thích code
1. Cài đặt thư viện:

requests:Thư viện này dùng để gửi các yêu cầu HTTP.


beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.

2. Hàm extract_code_snippets(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất tất cả các đoạn mã nguồn:
soup.find_all(['code', 'pre']): Tìm tất cả các thẻ
<code> và <pre>.
Lặp qua các thẻ và thêm nội dung văn bản của thẻ vào
danh sách code_snippets.
Trả về danh sách các đoạn mã nguồn: Trả về danh sách
các đoạn mã nguồn nếu có, ngược lại trả về None.

3. Sử dụng hàm extract_code_snippets:

Nhập URL của trang web từ người dùng: Sử dụng hàm


input để người dùng nhập URL.
Gọi hàm extract_code_snippets và in danh sách các
đoạn mã nguồn:
Gọi hàm extract_code_snippets với URL đã nhập.
Kiểm tra và in danh sách các đoạn mã nguồn nếu có,
ngược lại in thông báo lỗi.
Bổ sung
Không có bổ sung.

Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.find_all([‘code’, ‘pre’]): Tìm tất cả các thẻ <code> và
<pre>.
code.get_text(): Trích xuất nội dung văn bản từ các thẻ <code>
và <pre>.

Chương trình này trích xuất và in tất cả các đoạn mã nguồn từ một
trang web mà người dùng nhập vào bằng cách sử dụng thư viện
requests để gửi yêu cầu HTTP và BeautifulSoup để phân tích cú
pháp HTML.
260 - Viết chương trình để trích xuất
tất cả các thẻ meta từ trang web

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để trích xuất tất cả các
thẻ meta từ một trang web cụ thể. Thẻ meta thường được sử dụng
để cung cấp thông tin về trang web như mô tả, từ khóa, tác giả, v.v.

Thuật toán:
Đầu vào:

URL của trang web chứa các thẻ meta (nhập từ người
dùng).

Đầu ra:

Danh sách các thẻ meta từ trang web.

Các bước thực hiện:

1. Cài đặt các thư viện cần thiết.


2. Tạo một hàm để trích xuất tất cả các thẻ meta từ URL cung
cấp.
3. Gửi yêu cầu HTTP đến URL và nhận phản hồi.
4. Phân tích phản hồi để trích xuất tất cả các thẻ meta.
5. In ra danh sách các thẻ meta.

Cài đặt thư viện


pip install requests beautifulsoup4
Code Python
import requests
from bs4 import BeautifulSoup

def extract_meta_tags(url):
# Gửi yêu cầu HTTP tới URL
response = requests.get(url)

# Kiểm tra mã trạng thái HTTP


if response.status_code == 200:
# Phân tích nội dung HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Trích xuất tất cả các thẻ meta


meta_tags = []
for meta in soup.find_all('meta'):
meta_tags.append(meta.attrs)

# Trả về danh sách các thẻ meta


return meta_tags
else:
return None

# Nhập URL của trang web từ người dùng


url = input("Nhập URL của trang web: ")
meta_tags = extract_meta_tags(url)
if meta_tags:
print("Các thẻ meta trên trang web:")
for i, meta in enumerate(meta_tags):
print(f"Thẻ meta {i+1}: {meta}")
else:
print("Không thể truy cập trang web hoặc không tìm thấy
thẻ meta.")

Giải thích code


1. Cài đặt thư viện:
requests:Thư viện này dùng để gửi các yêu cầu HTTP.
beautifulsoup4: Thư viện này dùng để phân tích cú pháp
HTML và trích xuất dữ liệu từ đó.

2. Hàm extract_meta_tags(url):

Gửi yêu cầu HTTP tới URL:


requests.get(url): Gửi một yêu cầu GET tới URL và
lưu trữ phản hồi.
Kiểm tra mã trạng thái HTTP:
response.status_code == 200: Kiểm tra xem phản hồi có
thành công hay không (mã trạng thái 200).
Phân tích nội dung HTML:
BeautifulSoup(response.content, 'html.parser'):
Phân tích nội dung HTML của trang web.
Trích xuất tất cả các thẻ meta:
soup.find_all('meta'): Tìm tất cả các thẻ <meta>.
Lặp qua các thẻ meta và thêm thuộc tính của thẻ vào
danh sách meta_tags bằng cách sử dụng meta.attrs.
Trả về danh sách các thẻ meta: Trả về danh sách các thẻ
meta nếu có, ngược lại trả về None.

3. Sử dụng hàm extract_meta_tags:

Nhập URL của trang web từ người dùng: Sử dụng hàm


input để người dùng nhập URL.
Gọi hàm extract_meta_tags và in danh sách các thẻ
meta:
Gọi hàm extract_meta_tags với URL đã nhập.
Kiểm tra và in danh sách các thẻ meta nếu có, ngược lại
in thông báo lỗi.

Bổ sung
Không có bổ sung.
Tóm tắt:
import requests: Thư viện để gửi các yêu cầu HTTP.
from bs4 import BeautifulSoup: Thư viện để phân tích cú pháp
HTML.
requests.get(url): Gửi yêu cầu HTTP GET tới URL.
response.status_code: Kiểm tra mã trạng thái phản hồi HTTP.
BeautifulSoup(response.content, ‘html.parser’): Phân tích nội
dung HTML của phản hồi.
soup.find_all(‘meta’): Tìm tất cả các thẻ <meta>.
meta.attrs: Trích xuất thuộc tính của các thẻ <meta>.

Chương trình này trích xuất và in tất cả các thẻ meta từ một trang
web mà người dùng nhập vào bằng cách sử dụng thư viện requests
để gửi yêu cầu HTTP và BeautifulSoup để phân tích cú pháp HTML.
Chương 27 : Bài toán ma trận
cơ bản
261. Viết chương trình để tính tổng của hai ma trận.
262. Viết chương trình để tính hiệu của hai ma trận.
263. Viết chương trình để tính tích của hai ma trận.
264. Viết chương trình để tính định thức của một ma trận.
265. Viết chương trình để tính ma trận nghịch đảo của một ma trận.
266. Viết chương trình để tính ma trận chuyển vị của một ma trận.
267. Viết chương trình để tính hạng của một ma trận.
268. Viết chương trình để kiểm tra một ma trận có phải là ma trận
đơn vị không.
269. Viết chương trình để kiểm tra một ma trận có phải là ma trận đối
xứng không.
270. Viết chương trình để kiểm tra một ma trận có phải là ma trận tam
giác trên không.
261 - Viết chương trình để tính tổng
của hai ma trận

Giải thích đề bài


Đề bài yêu cầu chúng ta viết một chương trình Python để tính tổng
của hai ma trận. Ma trận ở đây được hiểu là một mảng hai chiều.

Thuật toán:

Đầu vào:
Hai ma trận (mảng hai chiều) có cùng kích thước.

Đầu ra:
Ma trận tổng (mảng hai chiều) cũng có cùng kích thước với hai
ma trận đầu vào.

Các bước thực hiện:


1. Đọc hai ma trận từ người dùng hoặc từ một nguồn cung cấp.
2. Kiểm tra xem hai ma trận có cùng kích thước hay không.
3. Tạo một ma trận mới có cùng kích thước để lưu trữ kết quả.
4. Thực hiện phép cộng từng phần tử tương ứng của hai ma trận
và lưu kết quả vào ma trận mới.
5. Trả về ma trận kết quả.
Code Python
def add_matrices(matrix1, matrix2):
# Kiểm tra kích thước của hai ma trận
if len(matrix1) != len(matrix2) or len(matrix1[0]) !=
len(matrix2[0]):
raise ValueError("Hai ma trận phải có cùng kích
thước")

# Tạo ma trận kết quả với kích thước tương tự


result_matrix = []
for i in range(len(matrix1)):
row = []
for j in range(len(matrix1[0])):
row.append(matrix1[i][j] + matrix2[i][j])
result_matrix.append(row)

return result_matrix

# Ví dụ về cách sử dụng hàm


matrix1 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

matrix2 = [
[9, 8, 7],
[6, 5, 4],
[3, 2, 1]
]

result = add_matrices(matrix1, matrix2)


for row in result:
print(row)

Giải thích code


1. Định nghĩa hàm add_matrices(matrix1, matrix2):
Hàm này nhận vào hai ma trận và trả về ma trận tổng.
2. Kiểm tra kích thước của hai ma trận:
Nếu kích thước của hai ma trận không bằng nhau, hàm sẽ
đưa ra lỗi.
3. Tạo ma trận kết quả result_matrix:
Khởi tạo ma trận kết quả có kích thước giống với ma trận
đầu vào.
4. Cộng các phần tử tương ứng của hai ma trận:
Sử dụng hai vòng lặp lồng nhau để truy cập từng phần tử
của ma trận.
Thực hiện phép cộng phần tử tương ứng của hai ma trận và
thêm kết quả vào ma trận kết quả.
5. Trả về ma trận kết quả:
Trả về ma trận tổng.

Tóm tắt:
Hàm add_matrices dùng để cộng hai ma trận có cùng kích
thước.
Sử dụng vòng lặp để truy cập và cộng các phần tử tương ứng
của hai ma trận.
Kiểm tra kích thước của hai ma trận trước khi thực hiện phép
cộng.

Chương trình thực hiện phép cộng hai ma trận cùng kích thước và
trả về ma trận kết quả.
262 - Viết chương trình để tính hiệu
của hai ma trận

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tính hiệu của hai
ma trận. Tức là, chương trình sẽ nhận hai ma trận làm đầu vào và
trả về một ma trận mới, mà mỗi phần tử của ma trận này là hiệu của
các phần tử tương ứng của hai ma trận đầu vào.

Thuật toán:
Đầu vào: Hai ma trận A và B cùng kích thước m x n.
Đầu ra: Ma trận C kích thước m x n với mỗi phần tử C[i][j] =
A[i][j] - B[i][j].
Các bước thực hiện:
1. Kiểm tra kích thước của hai ma trận để đảm bảo chúng cùng
kích thước.
2. Tạo một ma trận mới C cùng kích thước.
3. Duyệt qua từng phần tử của ma trận và tính hiệu của các
phần tử tương ứng từ hai ma trận đầu vào.
4. Trả về ma trận C đã tính toán được.

Code Python
def subtract_matrices(A, B):
# Kiểm tra kích thước ma trận
if len(A) != len(B) or len(A[0]) != len(B[0]):
raise ValueError("Hai ma trận phải có cùng kích
thước")

# Khởi tạo ma trận kết quả với cùng kích thước


rows = len(A)
cols = len(A[0])
C = [[0 for _ in range(cols)] for _ in range(rows)]

# Tính hiệu của từng phần tử


for i in range(rows):
for j in range(cols):
C[i][j] = A[i][j] - B[i][j]

return C

# Ví dụ sử dụng
A = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

B = [
[9, 8, 7],
[6, 5, 4],
[3, 2, 1]
]

result = subtract_matrices(A, B)
for row in result:
print(row)

Giải thích code


1. Kiểm tra kích thước ma trận:

Kiểm tra nếu số hàng và số cột của hai ma trận không bằng
nhau thì báo lỗi.

2. Khởi tạo ma trận kết quả:

Tạo ma trận mới C với cùng kích thước với các phần tử ban
đầu là 0.
3. Tính hiệu của từng phần tử:

Duyệt qua từng phần tử của ma trận A và B.


Tính hiệu của các phần tử tương ứng và gán vào ma trận C.

4. In kết quả:

In ma trận kết quả ra màn hình.

Tóm tắt:
Khai báo hàm và kiểm tra kích thước ma trận
Khởi tạo ma trận kết quả với kích thước tương tự ma trận đầu
vào
Sử dụng vòng lặp để tính hiệu của các phần tử tương ứng
In ma trận kết quả

Chương trình tính hiệu của hai ma trận cùng kích thước và trả về
ma trận kết quả.
263 - Viết chương trình để tính tích
của hai ma trận

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tính tích của hai ma
trận. Chương trình sẽ nhận hai ma trận làm đầu vào và trả về một
ma trận mới, mà mỗi phần tử của ma trận này là tích của các hàng
và cột tương ứng của hai ma trận đầu vào.

Thuật toán:
Đầu vào: Hai ma trận A (kích thước m x n) và B (kích thước n x
p).
Đầu ra: Ma trận C kích thước m x p với mỗi phần tử C[i][j] =
\sum_{k=1}^{n} A[i][k] x B[k][j].
Các bước thực hiện:
1. Kiểm tra kích thước của hai ma trận để đảm bảo số cột của
ma trận A bằng số hàng của ma trận B.
2. Tạo một ma trận mới C với kích thước m x p với các phần tử
ban đầu là 0.
3. Duyệt qua từng hàng của ma trận A và từng cột của ma trận
B để tính tích từng phần tử.
4. Trả về ma trận C đã tính toán được.

Cài đặt thư viện


Không cần thêm thư viện nào đặc biệt ngoài những thư viện có sẵn
trong Python.
Code Python
def multiply_matrices(A, B):
# Kiểm tra kích thước ma trận
if len(A[0]) != len(B):
raise ValueError("Số cột của ma trận A phải bằng số
hàng của ma trận B")

# Khởi tạo ma trận kết quả với kích thước (số hàng của A)
x (số cột của B)
m = len(A)
n = len(A[0])
p = len(B[0])
C = [[0 for _ in range(p)] for _ in range(m)]

# Tính tích của từng phần tử


for i in range(m):
for j in range(p):
for k in range(n):
C[i][j] += A[i][k] * B[k][j]

return C

# Ví dụ sử dụng
A = [
[1, 2, 3],
[4, 5, 6]
]

B = [
[7, 8],
[9, 10],
[11, 12]
]

result = multiply_matrices(A, B)
for row in result:
print(row)
Giải thích code
1. Kiểm tra kích thước ma trận:

Kiểm tra nếu số cột của ma trận A không bằng số hàng của
ma trận B thì báo lỗi.

2. Khởi tạo ma trận kết quả:

Tạo ma trận mới C với kích thước m x p với các phần tử ban
đầu là 0.

3. Tính tích của từng phần tử:

Duyệt qua từng hàng của ma trận A và từng cột của ma trận
B.
Tính tích của các phần tử tương ứng và cộng vào ma trận C.

4. In kết quả:

In ma trận kết quả ra màn hình.

Tóm tắt:
Khai báo hàm và kiểm tra kích thước ma trận
Khởi tạo ma trận kết quả với kích thước tương ứng
Sử dụng vòng lặp để tính tích các phần tử tương ứng
In ma trận kết quả

Chương trình tính tích của hai ma trận và trả về ma trận kết quả.
264 - Viết chương trình để tính định
thức của một ma trận

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tính định thức của
một ma trận vuông. Định thức của một ma trận vuông là một giá trị
số có thể được tính toán từ các phần tử của ma trận, thường dùng
trong các phép biến đổi tuyến tính và giải hệ phương trình tuyến
tính.

Thuật toán:
Đầu vào: Một ma trận vuông A kích thước n x n.
Đầu ra: Một giá trị số là định thức của ma trận A.
Các bước thực hiện:
1. Kiểm tra ma trận có vuông không (số hàng bằng số cột).
2. Sử dụng phương pháp đệ quy để tính định thức (cho các ma
trận kích thước nhỏ).
3. Sử dụng phương pháp khai triển theo hàng (cho các ma trận
kích thước lớn hơn).

Cài đặt thư viện


Có thể sử dụng thư viện numpy để tính định thức một cách hiệu quả.

Code Python
import numpy as np

def calculate_determinant(matrix):
# Kiểm tra ma trận có vuông không
if len(matrix) != len(matrix[0]):
raise ValueError("Ma trận phải là ma trận vuông")

# Sử dụng numpy để tính định thức


det = np.linalg.det(matrix)
return det

# Ví dụ sử dụng
A = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

result = calculate_determinant(A)
print(f"Định thức của ma trận là: {result}")

Giải thích code


1. Kiểm tra ma trận có vuông không:

Kiểm tra nếu số hàng không bằng số cột thì báo lỗi.

2. Tính định thức bằng thư viện numpy:

Sử dụng hàm np.linalg.det từ thư viện numpy để tính định


thức của ma trận.

3. In kết quả:

In định thức của ma trận ra màn hình.

Bổ sung
Ngoài phương pháp sử dụng numpy, chúng ta có thể viết một hàm đệ
quy để tính định thức cho các ma trận nhỏ. Dưới đây là ví dụ cho
phương pháp này:
Code Python bổ sung
def get_matrix_minor(matrix, i, j):
return [row[:j] + row[j+1:] for row in (matrix[:i] +
matrix[i+1:])]

def calculate_determinant_recursive(matrix):
# Kiểm tra ma trận có vuông không
if len(matrix) != len(matrix[0]):
raise ValueError("Ma trận phải là ma trận vuông")

# Trường hợp cơ bản cho ma trận 2x2


if len(matrix) == 2:
return matrix[0][0]*matrix[1][1] - matrix[0]
[1]*matrix[1][0]

determinant = 0
for c in range(len(matrix)):
determinant += ((-1)**c) * matrix[0][c] *
calculate_determinant_recursive(get_matrix_minor(matrix, 0,
c))

return determinant

# Ví dụ sử dụng
A = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

result_recursive = calculate_determinant_recursive(A)
print(f"Định thức của ma trận (phương pháp đệ quy) là:
{result_recursive}")

Tóm tắt:
Kiểm tra ma trận có vuông không
Sử dụng numpy để tính định thức
Sử dụng phương pháp đệ quy để tính định thức cho ma trận nhỏ
In định thức của ma trận

Chương trình tính định thức của một ma trận vuông và trả về giá trị
định thức.
265 - Viết chương trình để tính ma
trận nghịch đảo của một ma trận

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tính ma trận nghịch
đảo của một ma trận vuông. Ma trận nghịch đảo của một ma trận A
là ma trận A^{-1} sao cho A x A^{-1} = I, trong đó I là ma trận
đơn vị.

Thuật toán:
Đầu vào: Một ma trận vuông A kích thước n x n.
Đầu ra: Ma trận nghịch đảo A^{-1} của ma trận A hoặc thông
báo rằng ma trận không khả nghịch nếu định thức của nó bằng
0.
Các bước thực hiện:
1. Kiểm tra ma trận có vuông không (số hàng bằng số cột).
2. Tính định thức của ma trận.
3. Nếu định thức bằng 0, kết luận ma trận không khả nghịch.
4. Nếu định thức khác 0, sử dụng phương pháp Gauss-Jordan
hoặc thư viện numpy để tính ma trận nghịch đảo.

Cài đặt thư viện


Sử dụng thư viện numpy để tính ma trận nghịch đảo một cách hiệu
quả.

Code Python
import numpy as np
def invert_matrix(matrix):
# Kiểm tra ma trận có vuông không
if len(matrix) != len(matrix[0]):
raise ValueError("Ma trận phải là ma trận vuông")

# Tính định thức của ma trận


det = np.linalg.det(matrix)
if det == 0:
raise ValueError("Ma trận không khả nghịch (định thức
bằng 0)")

# Tính ma trận nghịch đảo


inv_matrix = np.linalg.inv(matrix)
return inv_matrix

# Ví dụ sử dụng
A = [
[1, 2, 3],
[0, 1, 4],
[5, 6, 0]
]

result = invert_matrix(A)
print("Ma trận nghịch đảo là:")
print(result)

Giải thích code


1. Kiểm tra ma trận có vuông không:

Kiểm tra nếu số hàng không bằng số cột thì báo lỗi.

2. Tính định thức của ma trận:

Sử dụng hàm np.linalg.det từ thư viện numpy để tính định


thức của ma trận.
Nếu định thức bằng 0, kết luận ma trận không khả nghịch.

3. Tính ma trận nghịch đảo:


Sử dụng hàm np.linalg.inv từ thư viện numpy để tính ma
trận nghịch đảo.

4. In kết quả:

In ma trận nghịch đảo ra màn hình.

Bổ sung
Ngoài phương pháp sử dụng numpy, chúng ta có thể sử dụng
phương pháp Gauss-Jordan để tính ma trận nghịch đảo. Dưới đây
là ví dụ cho phương pháp này:

Code Python bổ sung


def gauss_jordan_inverse(matrix):
n = len(matrix)

# Tạo ma trận đơn vị


I = [[1 if i == j else 0 for j in range(n)] for i in
range(n)]

# Nối ma trận đơn vị vào bên phải ma trận gốc


M = [row + I_row for row, I_row in zip(matrix, I)]

# Áp dụng phương pháp Gauss-Jordan


for i in range(n):
# Tìm phần tử lớn nhất trong cột hiện tại
max_row = max(range(i, n), key=lambda r: abs(M[r]
[i]))
# Đổi chỗ hàng hiện tại với hàng chứa phần tử lớn
nhất
M[i], M[max_row] = M[max_row], M[i]

# Chia hàng hiện tại cho phần tử chéo chính


pivot = M[i][i]
M[i] = [x / pivot for x in M[i]]
# Biến các hàng khác thành 0 ở cột hiện tại
for j in range(n):
if i != j:
factor = M[j][i]
M[j] = [M[j][k] - factor * M[i][k] for k in
range(2 * n)]

# Tách phần bên phải của ma trận đã nối để lấy ma trận


nghịch đảo
inv_matrix = [row[n:] for row in M]
return inv_matrix

# Ví dụ sử dụng
A = [
[1, 2, 3],
[0, 1, 4],
[5, 6, 0]
]

result_gj = gauss_jordan_inverse(A)
print("Ma trận nghịch đảo (phương pháp Gauss-Jordan) là:")
for row in result_gj:
print(row)

Tóm tắt:
Kiểm tra ma trận có vuông không
Tính định thức của ma trận
Sử dụng numpy để tính ma trận nghịch đảo nếu định thức khác 0
Sử dụng phương pháp Gauss-Jordan để tính ma trận nghịch
đảo
In ma trận nghịch đảo

Chương trình tính ma trận nghịch đảo của một ma trận vuông và trả
về ma trận nghịch đảo hoặc thông báo nếu ma trận không khả
nghịch.
266 - Viết chương trình để tính ma
trận chuyển vị của một ma trận

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tính ma trận chuyển
vị của một ma trận. Ma trận chuyển vị của một ma trận A là ma trận
được tạo ra bằng cách đổi chỗ các hàng và cột của A.

Thuật toán:
Đầu vào: Một ma trận A kích thước m x n.
Đầu ra: Ma trận chuyển vị A^T kích thước n x m.
Các bước thực hiện:
1. Tạo một ma trận mới với số hàng và số cột đảo ngược so
với ma trận gốc.
2. Duyệt qua từng phần tử của ma trận gốc và gán giá trị vào vị
trí tương ứng trong ma trận chuyển vị.
3. Trả về ma trận chuyển vị.

Cài đặt thư viện


Không cần thêm thư viện nào đặc biệt ngoài những thư viện có sẵn
trong Python.

Code Python
def transpose_matrix(matrix):
# Lấy kích thước của ma trận gốc
rows = len(matrix)
cols = len(matrix[0])
# Tạo ma trận mới với số hàng và số cột đảo ngược
transpose = [[0 for _ in range(rows)] for _ in
range(cols)]

# Gán giá trị vào ma trận chuyển vị


for i in range(rows):
for j in range(cols):
transpose[j][i] = matrix[i][j]

return transpose

# Ví dụ sử dụng
A = [
[1, 2, 3],
[4, 5, 6]
]

result = transpose_matrix(A)
print("Ma trận chuyển vị là:")
for row in result:
print(row)

Giải thích code


1. Lấy kích thước của ma trận gốc:

Xác định số hàng và số cột của ma trận gốc.

2. Tạo ma trận mới với số hàng và số cột đảo ngược:

Khởi tạo một ma trận mới có số hàng và số cột đảo ngược


so với ma trận gốc.

3. Gán giá trị vào ma trận chuyển vị:

Duyệt qua từng phần tử của ma trận gốc và gán giá trị vào vị
trí tương ứng trong ma trận chuyển vị.

4. In kết quả:
In ma trận chuyển vị ra màn hình.

Bổ sung
Có thể sử dụng thư viện numpy để tính ma trận chuyển vị một cách
ngắn gọn và hiệu quả hơn.

Code Python bổ sung với numpy


import numpy as np

def transpose_matrix_numpy(matrix):
return np.transpose(matrix)

# Ví dụ sử dụng
A = [
[1, 2, 3],
[4, 5, 6]
]

result_numpy = transpose_matrix_numpy(A)
print("Ma trận chuyển vị (sử dụng numpy) là:")
print(result_numpy)

Tóm tắt:
Xác định kích thước của ma trận gốc
Tạo ma trận mới với số hàng và số cột đảo ngược
Duyệt qua từng phần tử của ma trận gốc và gán giá trị vào ma
trận chuyển vị
In ma trận chuyển vị

Chương trình tính ma trận chuyển vị của một ma trận và trả về ma


trận chuyển vị.
267 - Viết chương trình để tính hạng
của một ma trận

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để tính hạng của một
ma trận. Hạng của một ma trận là số lượng các hàng hoặc cột độc
lập tuyến tính tối đa của ma trận đó.

Thuật toán:
Đầu vào: Một ma trận A kích thước m x n.
Đầu ra: Hạng của ma trận A.
Các bước thực hiện:
1. Sử dụng phương pháp loại bỏ Gauss để đưa ma trận về
dạng bậc thang hàng.
2. Đếm số hàng khác không trong ma trận dạng bậc thang
hàng.
3. Trả về số hàng khác không, đó chính là hạng của ma trận.

Cài đặt thư viện


Sử dụng thư viện numpy để tính hạng ma trận một cách hiệu quả.

Code Python
import numpy as np

def rank_of_matrix(matrix):
# Chuyển ma trận thành dạng numpy array
np_matrix = np.array(matrix)
# Sử dụng numpy để tính hạng của ma trận
rank = np.linalg.matrix_rank(np_matrix)
return rank

# Ví dụ sử dụng
A = [
[10, 20, 10],
[-20, -30, 10],
[30, 50, 0]
]

result = rank_of_matrix(A)
print(f"Hạng của ma trận là: {result}")

Giải thích code


1. Chuyển ma trận thành dạng numpy array:

Chuyển ma trận từ danh sách Python thành numpy array để


dễ xử lý hơn.

2. Tính hạng của ma trận:

Sử dụng hàm np.linalg.matrix_rank từ thư viện numpy để


tính hạng của ma trận.

3. In kết quả:

In hạng của ma trận ra màn hình.

Bổ sung
Có thể tính hạng của ma trận mà không cần dùng thư viện numpy
bằng cách sử dụng phương pháp loại bỏ Gauss.
Code Python bổ sung
def gauss_jordan_rank(matrix):
# Copy ma trận để tránh thay đổi ma trận gốc
M = [row[:] for row in matrix]
m = len(M)
n = len(M[0])
rank = 0

for r in range(min(m, n)):


if M[r][r] != 0:
rank += 1
for row in range(r+1, m):
factor = M[row][r] / M[r][r]
for col in range(r, n):
M[row][col] -= factor * M[r][col]
else:
for row in range(r+1, m):
if M[row][r] != 0:
M[r], M[row] = M[row], M[r]
rank += 1
break

# Đếm số hàng khác không


for row in M:
if any([abs(x) > 1e-10 for x in row]):
rank += 1

return rank

# Ví dụ sử dụng
A = [
[10, 20, 10],
[-20, -30, 10],
[30, 50, 0]
]

result_gj = gauss_jordan_rank(A)
print(f"Hạng của ma trận (phương pháp Gauss-Jordan) là:
{result_gj}")
Tóm tắt:
Chuyển ma trận thành dạng numpy array
Sử dụng numpy để tính hạng của ma trận
In hạng của ma trận

Chương trình tính hạng của một ma trận và trả về hạng của ma trận.
268 - Viết chương trình để kiểm tra
một ma trận có phải là ma trận đơn vị
không

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để kiểm tra xem một
ma trận có phải là ma trận đơn vị hay không. Ma trận đơn vị là một
ma trận vuông có các phần tử trên đường chéo chính bằng 1 và các
phần tử khác bằng 0.

Thuật toán:
Đầu vào: Một ma trận A kích thước n x n.
Đầu ra: Một giá trị boolean cho biết ma trận có phải là ma trận
đơn vị hay không.
Các bước thực hiện:
1. Kiểm tra ma trận có vuông không (số hàng bằng số cột).
2. Duyệt qua từng phần tử của ma trận:
Nếu phần tử nằm trên đường chéo chính và khác 1, trả
về False.
Nếu phần tử không nằm trên đường chéo chính và khác
0, trả về False.
3. Nếu tất cả các điều kiện trên đều thỏa mãn, trả về True.

Code Python
def is_identity_matrix(matrix):
# Kiểm tra ma trận có vuông không
n = len(matrix)
for row in matrix:
if len(row) != n:
return False

# Kiểm tra các phần tử của ma trận


for i in range(n):
for j in range(n):
if i == j:
if matrix[i][j] != 1:
return False
else:
if matrix[i][j] != 0:
return False

return True

# Ví dụ sử dụng
A = [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]

B = [
[1, 0, 0],
[0, 0, 0],
[0, 0, 1]
]

print("Ma trận A là ma trận đơn vị:", is_identity_matrix(A))


# Output: True
print("Ma trận B là ma trận đơn vị:", is_identity_matrix(B))
# Output: False

Giải thích code


1. Kiểm tra ma trận có vuông không:

Duyệt qua từng hàng của ma trận để kiểm tra xem độ dài
của mỗi hàng có bằng số hàng không.
2. Kiểm tra các phần tử của ma trận:

Duyệt qua từng phần tử của ma trận.


Nếu phần tử nằm trên đường chéo chính và khác 1, trả về
False.
Nếu phần tử không nằm trên đường chéo chính và khác 0,
trả về False.

3. Trả về kết quả:

Nếu tất cả các điều kiện đều thỏa mãn, trả về True.

Tóm tắt:
Kiểm tra ma trận có vuông không
Duyệt qua từng phần tử của ma trận để kiểm tra các điều kiện
của ma trận đơn vị
Trả về True nếu tất cả các điều kiện đều thỏa mãn, ngược lại trả
về False

Chương trình kiểm tra xem một ma trận có phải là ma trận đơn vị
hay không và trả về giá trị boolean tương ứng.
269 - Viết chương trình để kiểm tra
một ma trận có phải là ma trận đối
xứng không

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để kiểm tra xem một
ma trận có phải là ma trận đối xứng hay không. Ma trận đối xứng là
một ma trận vuông mà phần tử a(i)(j) bằng phần tử a(j)(i) với
mọi i và j.

Thuật toán:
Đầu vào: Một ma trận A kích thước n x n.
Đầu ra: Một giá trị boolean cho biết ma trận có phải là ma trận
đối xứng hay không.
Các bước thực hiện:
1. Kiểm tra ma trận có vuông không (số hàng bằng số cột).
2. Duyệt qua từng phần tử của ma trận:
Nếu phần tử a(i)(j) khác phần tử a(j)(i), trả về False.
3. Nếu tất cả các điều kiện trên đều thỏa mãn, trả về True.

Code Python
def is_symmetric_matrix(matrix):
# Kiểm tra ma trận có vuông không
n = len(matrix)
for row in matrix:
if len(row) != n:
return False

# Kiểm tra tính đối xứng


for i in range(n):
for j in range(n):
if matrix[i][j] != matrix[j][i]:
return False

return True

# Ví dụ sử dụng
A = [
[1, 2, 3],
[2, 4, 5],
[3, 5, 6]
]

B = [
[1, 2, 3],
[2, 4, 5],
[3, 6, 6]
]

print("Ma trận A là ma trận đối xứng:",


is_symmetric_matrix(A)) # Output: True
print("Ma trận B là ma trận đối xứng:",
is_symmetric_matrix(B)) # Output: False

Giải thích code


1. Kiểm tra ma trận có vuông không:

Duyệt qua từng hàng của ma trận để kiểm tra xem độ dài
của mỗi hàng có bằng số hàng không.

2. Kiểm tra tính đối xứng:

Duyệt qua từng phần tử của ma trận.


Nếu phần tử a(i)(j) khác phần tử a(j)(i), trả về False.

3. Trả về kết quả:


Nếu tất cả các điều kiện đều thỏa mãn, trả về True.

Tóm tắt:
Kiểm tra ma trận có vuông không
Duyệt qua từng phần tử của ma trận để kiểm tra tính đối xứng
Trả về True nếu tất cả các điều kiện đều thỏa mãn, ngược lại trả
về False

Chương trình kiểm tra xem một ma trận có phải là ma trận đối xứng
hay không và trả về giá trị boolean tương ứng.
270 - Viết chương trình để kiểm tra
một ma trận có phải là ma trận tam
giác trên không

Giải thích đề bài


Đề bài yêu cầu viết một chương trình Python để kiểm tra xem một
ma trận có phải là ma trận tam giác trên hay không. Ma trận tam
giác trên là một ma trận vuông mà tất cả các phần tử nằm dưới
đường chéo chính đều bằng 0.

Thuật toán:
Đầu vào: Một ma trận A kích thước n x n.
Đầu ra: Một giá trị boolean cho biết ma trận có phải là ma trận
tam giác trên hay không.
Các bước thực hiện:
1. Kiểm tra ma trận có vuông không (số hàng bằng số cột).
2. Duyệt qua từng phần tử dưới đường chéo chính:
Nếu có phần tử nào khác 0, trả về False.
3. Nếu tất cả các điều kiện trên đều thỏa mãn, trả về True.

Code Python
def is_upper_triangular(matrix):
# Kiểm tra ma trận có vuông không
n = len(matrix)
for row in matrix:
if len(row) != n:
return False

# Kiểm tra các phần tử dưới đường chéo chính


for i in range(n):
for j in range(i):
if matrix[i][j] != 0:
return False

return True

# Ví dụ sử dụng
A = [
[1, 2, 3],
[0, 4, 5],
[0, 0, 6]
]

B = [
[1, 2, 3],
[0, 4, 5],
[7, 0, 6]
]

print("Ma trận A là ma trận tam giác trên:",


is_upper_triangular(A)) # Output: True
print("Ma trận B là ma trận tam giác trên:",
is_upper_triangular(B)) # Output: False

Giải thích code


1. Kiểm tra ma trận có vuông không:

Duyệt qua từng hàng của ma trận để kiểm tra xem độ dài
của mỗi hàng có bằng số hàng không.

2. Kiểm tra các phần tử dưới đường chéo chính:

Duyệt qua từng phần tử dưới đường chéo chính.


Nếu có phần tử nào khác 0, trả về False.

3. Trả về kết quả:


Nếu tất cả các điều kiện đều thỏa mãn, trả về True.

Tóm tắt:
Kiểm tra ma trận có vuông không
Duyệt qua từng phần tử dưới đường chéo chính để kiểm tra tính
tam giác trên
Trả về True nếu tất cả các điều kiện đều thỏa mãn, ngược lại trả
về False

Chương trình kiểm tra xem một ma trận có phải là ma trận tam giác
trên hay không và trả về giá trị boolean tương ứng.
Chương 28 : Bài tập về lập trình
đồ họa cơ bản
271. Viết chương trình để vẽ hình vuông bằng Turtle.
272. Viết chương trình để vẽ hình tam giác bằng Turtle.
273. Viết chương trình để vẽ hình tròn bằng Turtle.
274. Viết chương trình để vẽ hình ngôi sao bằng Turtle.
275. Viết chương trình để vẽ hình lục giác bằng Turtle.
276. Viết chương trình để vẽ hình ngũ giác bằng Turtle.
277. Viết chương trình để vẽ đường tròn lồng vào nhau bằng Turtle.
278. Viết chương trình để vẽ các đường thẳng song song bằng Turtle.
279. Viết chương trình để vẽ các hình chữ nhật lồng vào nhau bằng
Turtle.
280. Viết chương trình để vẽ hoa bằng Turtle.
271 - Viết chương trình để vẽ hình
vuông bằng Turtle

Giải thích đề bài


Bài toán yêu cầu chúng ta sử dụng thư viện Turtle trong Python để
vẽ một hình vuông. Turtle là một thư viện đồ họa cơ bản giúp chúng
ta vẽ các hình cơ bản bằng cách điều khiển “con rùa” di chuyển trên
màn hình. Để vẽ một hình vuông, chúng ta cần di chuyển “con rùa”
theo bốn cạnh của hình vuông.

Thuật toán

Đầu vào:
Không có đầu vào từ người dùng cho bài toán cơ bản này.

Đầu ra:
Một hình vuông được vẽ trên màn hình.

Các bước thực hiện:


1. Khởi tạo thư viện Turtle.
2. Tạo một đối tượng Turtle.
3. Định nghĩa các bước để vẽ hình vuông:
Di chuyển về phía trước một khoảng cố định.
Quay 90 độ.
Lặp lại bốn lần để hoàn thành bốn cạnh của hình vuông.
4. Chạy chương trình để hiển thị kết quả.
Cài đặt thư viện
Chúng ta sẽ sử dụng thư viện Turtle, đây là thư viện mặc định trong
Python nên không cần cài đặt thêm gì.

Code Python
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình vuông bằng Turtle")

# Tạo đối tượng Turtle


square_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


square_turtle.speed(1)

# Vẽ hình vuông
for _ in range(4):
square_turtle.forward(100) # Di chuyển về phía trước 100
đơn vị
square_turtle.right(90) # Quay 90 độ sang phải

# Ẩn đối tượng Turtle sau khi vẽ xong


square_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Giải thích code


1. Thiết lập màn hình

screen = turtle.Screen(): Tạo ra một đối tượng màn hình


để hiển thị đồ họa Turtle.
screen.title("Vẽ hình vuông bằng Turtle"): Thiết lập tiêu
đề cho cửa sổ màn hình.

2. Tạo đối tượng Turtle

square_turtle = turtle.Turtle(): Tạo một đối tượng Turtle


để vẽ.

3. Thiết lập tốc độ vẽ

square_turtle.speed(1): Thiết lập tốc độ vẽ của Turtle (1 là


chậm nhất, 10 là nhanh nhất).

4. Vẽ hình vuông

Sử dụng vòng lặp for _ in range(4) để lặp bốn lần, mỗi lần
thực hiện hai hành động:
square_turtle.forward(100): Di chuyển Turtle về phía
trước 100 đơn vị.
square_turtle.right(90): Quay Turtle 90 độ về bên
phải.

5. Ẩn đối tượng Turtle sau khi vẽ xong

square_turtle.hideturtle(): Ẩn đối tượng Turtle sau khi vẽ


xong để làm cho hình vẽ trông gọn gàng hơn.

6. Giữ màn hình để xem kết quả

screen.mainloop(): Giữ màn hình hiển thị cho đến khi người
dùng đóng cửa sổ.

Tóm tắt:
Import thư viện Turtle.
Tạo màn hình và đối tượng Turtle.
Vẽ hình vuông bằng cách di chuyển Turtle theo các cạnh và
quay 90 độ.
Ẩn đối tượng Turtle và giữ màn hình mở để xem kết quả.

Chương trình trên giúp bạn sử dụng thư viện Turtle trong Python để
vẽ một hình vuông đơn giản trên màn hình.
272 - Viết chương trình để vẽ hình tam
giác bằng Turtle

Giải thích đề bài


Bài toán yêu cầu chúng ta sử dụng thư viện Turtle trong Python để
vẽ một hình tam giác đều. Với Turtle, chúng ta sẽ điều khiển “con
rùa” di chuyển theo các cạnh của tam giác và quay một góc cụ thể
để tạo ra các đỉnh của tam giác.

Thuật toán

Đầu vào:
Không có đầu vào từ người dùng cho bài toán cơ bản này.

Đầu ra:
Một hình tam giác đều được vẽ trên màn hình.

Các bước thực hiện:


1. Khởi tạo thư viện Turtle.
2. Tạo một đối tượng Turtle.
3. Định nghĩa các bước để vẽ hình tam giác đều:
Di chuyển về phía trước một khoảng cố định.
Quay 120 độ (góc ngoài của tam giác đều).
Lặp lại ba lần để hoàn thành ba cạnh của tam giác.
4. Chạy chương trình để hiển thị kết quả.
Cài đặt thư viện
Chúng ta sẽ sử dụng thư viện Turtle, thư viện này là mặc định trong
Python nên không cần cài đặt thêm gì.

Code Python
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình tam giác bằng Turtle")

# Tạo đối tượng Turtle


triangle_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


triangle_turtle.speed(1)

# Vẽ hình tam giác đều


for _ in range(3):
triangle_turtle.forward(100) # Di chuyển về phía trước
100 đơn vị
triangle_turtle.left(120) # Quay 120 độ sang trái

# Ẩn đối tượng Turtle sau khi vẽ xong


triangle_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Giải thích code


1. Thiết lập màn hình

screen = turtle.Screen(): Tạo ra một đối tượng màn hình


để hiển thị đồ họa Turtle.
screen.title("Vẽ hình tam giác bằng Turtle"): Thiết lập
tiêu đề cho cửa sổ màn hình.

2. Tạo đối tượng Turtle

triangle_turtle = turtle.Turtle(): Tạo một đối tượng


Turtle để vẽ.

3. Thiết lập tốc độ vẽ

triangle_turtle.speed(1): Thiết lập tốc độ vẽ của Turtle (1


là chậm nhất, 10 là nhanh nhất).

4. Vẽ hình tam giác đều

Sử dụng vòng lặp for _ in range(3) để lặp ba lần, mỗi lần


thực hiện hai hành động:
triangle_turtle.forward(100): Di chuyển Turtle về phía
trước 100 đơn vị.
triangle_turtle.left(120): Quay Turtle 120 độ về bên
trái để tạo ra góc ngoài của tam giác đều.

5. Ẩn đối tượng Turtle sau khi vẽ xong

triangle_turtle.hideturtle(): Ẩn đối tượng Turtle sau khi


vẽ xong để làm cho hình vẽ trông gọn gàng hơn.

6. Giữ màn hình để xem kết quả

screen.mainloop(): Giữ màn hình hiển thị cho đến khi người
dùng đóng cửa sổ.

Tóm tắt:
Import thư viện Turtle.
Tạo màn hình và đối tượng Turtle.
Vẽ hình tam giác đều bằng cách di chuyển Turtle theo các cạnh
và quay 120 độ.
Ẩn đối tượng Turtle và giữ màn hình mở để xem kết quả.

Chương trình trên giúp bạn sử dụng thư viện Turtle trong Python để
vẽ một hình tam giác đều đơn giản trên màn hình.
273 - Viết chương trình để vẽ hình
tròn bằng Turtle

Giải thích đề bài


Bài toán yêu cầu chúng ta sử dụng thư viện Turtle trong Python để
vẽ một hình tròn. Turtle hỗ trợ các phương pháp để vẽ các hình tròn
hoặc cung tròn, làm cho việc này trở nên rất đơn giản.

Thuật toán

Đầu vào:
Không có đầu vào từ người dùng cho bài toán cơ bản này.

Đầu ra:
Một hình tròn được vẽ trên màn hình.

Các bước thực hiện:


1. Khởi tạo thư viện Turtle.
2. Tạo một đối tượng Turtle.
3. Sử dụng phương thức circle() của đối tượng Turtle để vẽ hình
tròn.
4. Chạy chương trình để hiển thị kết quả.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện Turtle, đây là thư viện mặc định trong
Python nên không cần cài đặt thêm gì.
Code Python
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình tròn bằng Turtle")

# Tạo đối tượng Turtle


circle_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


circle_turtle.speed(1)

# Vẽ hình tròn với bán kính 100 đơn vị


circle_turtle.circle(100)

# Ẩn đối tượng Turtle sau khi vẽ xong


circle_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Giải thích code


1. Thiết lập màn hình

screen = turtle.Screen(): Tạo ra một đối tượng màn hình


để hiển thị đồ họa Turtle.
screen.title("Vẽ hình tròn bằng Turtle"): Thiết lập tiêu
đề cho cửa sổ màn hình.

2. Tạo đối tượng Turtle

circle_turtle = turtle.Turtle(): Tạo một đối tượng Turtle


để vẽ.

3. Thiết lập tốc độ vẽ


circle_turtle.speed(1): Thiết lập tốc độ vẽ của Turtle (1 là
chậm nhất, 10 là nhanh nhất).

4. Vẽ hình tròn

circle_turtle.circle(100): Sử dụng phương thức


circle() để vẽ một hình tròn với bán kính 100 đơn vị. Turtle
sẽ tự động tính toán và di chuyển để tạo ra hình tròn.

5. Ẩn đối tượng Turtle sau khi vẽ xong

circle_turtle.hideturtle(): Ẩn đối tượng Turtle sau khi vẽ


xong để làm cho hình vẽ trông gọn gàng hơn.

6. Giữ màn hình để xem kết quả

screen.mainloop(): Giữ màn hình hiển thị cho đến khi người
dùng đóng cửa sổ.

Tóm tắt:
Import thư viện Turtle.
Tạo màn hình và đối tượng Turtle.
Vẽ hình tròn bằng phương thức circle() của đối tượng Turtle.
Ẩn đối tượng Turtle và giữ màn hình mở để xem kết quả.

Chương trình trên giúp bạn sử dụng thư viện Turtle trong Python để
vẽ một hình tròn đơn giản trên màn hình.

Bổ sung

Cách khác để vẽ hình tròn


1. Vẽ hình tròn bằng cách sử dụng nhiều đoạn thẳng nhỏ:
Chúng ta có thể vẽ một hình tròn bằng cách di chuyển Turtle
theo các đoạn thẳng nhỏ và quay một góc nhỏ sau mỗi đoạn.
Ví dụ, để vẽ một hình tròn với 360 đoạn thẳng nhỏ, mỗi đoạn
dài 1 đơn vị và quay 1 độ sau mỗi đoạn:
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình tròn bằng các đoạn thẳng nhỏ")

# Tạo đối tượng Turtle


small_segment_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


small_segment_turtle.speed(1)

# Vẽ hình tròn bằng các đoạn thẳng nhỏ


for _ in range(360):
small_segment_turtle.forward(1) # Di chuyển về phía
trước 1 đơn vị
small_segment_turtle.left(1) # Quay 1 độ sang trái

# Ẩn đối tượng Turtle sau khi vẽ xong


small_segment_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Cách này minh họa việc tạo ra một hình tròn thông qua việc chia nhỏ
nó thành nhiều đoạn thẳng nhỏ, mỗi đoạn được vẽ với một góc quay
rất nhỏ.
274 - Viết chương trình để vẽ hình
ngôi sao bằng Turtle

Giải thích đề bài


Bài toán yêu cầu chúng ta sử dụng thư viện Turtle trong Python để
vẽ một hình ngôi sao. Turtle cung cấp các công cụ để dễ dàng điều
khiển “con rùa” vẽ các hình dạng phức tạp. Để vẽ một hình ngôi sao,
chúng ta sẽ điều khiển Turtle di chuyển theo các đoạn thẳng kết nối
các đỉnh của ngôi sao.

Thuật toán

Đầu vào:
Không có đầu vào từ người dùng cho bài toán cơ bản này.

Đầu ra:
Một hình ngôi sao được vẽ trên màn hình.

Các bước thực hiện:


1. Khởi tạo thư viện Turtle.
2. Tạo một đối tượng Turtle.
3. Định nghĩa các bước để vẽ hình ngôi sao:
Di chuyển về phía trước một khoảng cố định.
Quay 144 độ để tạo góc giữa các cạnh của ngôi sao.
Lặp lại năm lần để hoàn thành ngôi sao.
4. Chạy chương trình để hiển thị kết quả.
Cài đặt thư viện
Chúng ta sẽ sử dụng thư viện Turtle, đây là thư viện mặc định trong
Python nên không cần cài đặt thêm gì.

Code Python
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình ngôi sao bằng Turtle")

# Tạo đối tượng Turtle


star_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


star_turtle.speed(2)

# Vẽ hình ngôi sao


for _ in range(5):
star_turtle.forward(150) # Di chuyển về phía trước 150
đơn vị
star_turtle.right(144) # Quay 144 độ sang phải

# Ẩn đối tượng Turtle sau khi vẽ xong


star_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Giải thích code


1. Thiết lập màn hình

screen = turtle.Screen(): Tạo ra một đối tượng màn hình


để hiển thị đồ họa Turtle.
screen.title("Vẽ hình ngôi sao bằng Turtle"): Thiết lập
tiêu đề cho cửa sổ màn hình.

2. Tạo đối tượng Turtle

star_turtle = turtle.Turtle(): Tạo một đối tượng Turtle


để vẽ.

3. Thiết lập tốc độ vẽ

star_turtle.speed(2): Thiết lập tốc độ vẽ của Turtle (1 là


chậm nhất, 10 là nhanh nhất). Chọn tốc độ 2 để vẽ ngôi sao
rõ ràng.

4. Vẽ hình ngôi sao

Sử dụng vòng lặp for _ in range(5) để lặp năm lần, mỗi


lần thực hiện hai hành động:
star_turtle.forward(150): Di chuyển Turtle về phía
trước 150 đơn vị. Độ dài này xác định kích thước của
ngôi sao.
star_turtle.right(144): Quay Turtle 144 độ về bên
phải. Góc này xác định hình dạng của ngôi sao. Để vẽ
ngôi sao năm cánh, góc quay là 144 độ (360 độ chia cho
số cạnh của ngôi sao nhân với 2, tức là 360/5*2 = 144).

5. Ẩn đối tượng Turtle sau khi vẽ xong

star_turtle.hideturtle(): Ẩn đối tượng Turtle sau khi vẽ


xong để làm cho hình vẽ trông gọn gàng hơn.

6. Giữ màn hình để xem kết quả

screen.mainloop(): Giữ màn hình hiển thị cho đến khi người
dùng đóng cửa sổ.
Tóm tắt:
Import thư viện Turtle.
Tạo màn hình và đối tượng Turtle.
Vẽ hình ngôi sao bằng cách di chuyển Turtle theo các cạnh và
quay 144 độ.
Ẩn đối tượng Turtle và giữ màn hình mở để xem kết quả.

Chương trình trên giúp bạn sử dụng thư viện Turtle trong Python để
vẽ một hình ngôi sao đơn giản trên màn hình.

Bổ sung

Vẽ ngôi sao với kích thước và vị trí tùy chọn


Chúng ta có thể tạo hàm để vẽ ngôi sao với các kích thước và vị trí
tùy chọn. Đây là cách triển khai:
import turtle

# Tạo hàm vẽ ngôi sao với tham số cho kích thước và vị trí
def draw_star(size, x, y):
star_turtle.penup() # Nhấc bút để di chuyển không
vẽ
star_turtle.goto(x, y) # Di chuyển đến vị trí (x, y)
star_turtle.pendown() # Hạ bút để bắt đầu vẽ

for _ in range(5):
star_turtle.forward(size) # Di chuyển về phía trước
với độ dài kích thước 'size'
star_turtle.right(144) # Quay 144 độ sang phải

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình ngôi sao tùy chọn bằng Turtle")

# Tạo đối tượng Turtle


star_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


star_turtle.speed(2)

# Vẽ các ngôi sao với kích thước và vị trí khác nhau


draw_star(100, 0, 0) # Vẽ ngôi sao tại vị trí trung
tâm (0, 0) với kích thước 100
draw_star(50, -200, 100) # Vẽ ngôi sao nhỏ hơn tại vị trí
(-200, 100) với kích thước 50
draw_star(75, 200, -150) # Vẽ ngôi sao tại vị trí (200,
-150) với kích thước 75

# Ẩn đối tượng Turtle sau khi vẽ xong


star_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Tóm tắt:
Hàm draw_star: Tạo hàm để vẽ ngôi sao với kích thước và vị trí
tùy chọn.
penup và pendown: Sử dụng để điều khiển bút vẽ của Turtle, cho
phép di chuyển mà không vẽ lên màn hình.
goto(x, y): Di chuyển Turtle đến vị trí (x, y) trên màn hình.

Chương trình bổ sung giúp bạn tạo ra các ngôi sao ở các vị trí và
kích thước khác nhau bằng cách sử dụng hàm trong Python và các
lệnh điều khiển nâng cao của Turtle.
275 - Viết chương trình để vẽ hình lục
giác bằng Turtle

Giải thích đề bài


Bài toán yêu cầu chúng ta sử dụng thư viện Turtle trong Python để
vẽ một hình lục giác đều. Với Turtle, chúng ta sẽ điều khiển “con
rùa” di chuyển theo các cạnh của lục giác và quay một góc cụ thể để
tạo ra các đỉnh của lục giác.

Thuật toán

Đầu vào:
Không có đầu vào từ người dùng cho bài toán cơ bản này.

Đầu ra:
Một hình lục giác đều được vẽ trên màn hình.

Các bước thực hiện:


1. Khởi tạo thư viện Turtle.
2. Tạo một đối tượng Turtle.
3. Định nghĩa các bước để vẽ hình lục giác đều:
Di chuyển về phía trước một khoảng cố định.
Quay 60 độ để tạo góc giữa các cạnh của lục giác.
Lặp lại sáu lần để hoàn thành sáu cạnh của lục giác.
4. Chạy chương trình để hiển thị kết quả.
Cài đặt thư viện
Chúng ta sẽ sử dụng thư viện Turtle, thư viện này là mặc định trong
Python nên không cần cài đặt thêm gì.

Code Python
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình lục giác bằng Turtle")

# Tạo đối tượng Turtle


hexagon_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


hexagon_turtle.speed(2)

# Vẽ hình lục giác đều


for _ in range(6):
hexagon_turtle.forward(100) # Di chuyển về phía trước
100 đơn vị
hexagon_turtle.left(60) # Quay 60 độ sang trái

# Ẩn đối tượng Turtle sau khi vẽ xong


hexagon_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Giải thích code


1. Thiết lập màn hình

screen = turtle.Screen(): Tạo ra một đối tượng màn hình


để hiển thị đồ họa Turtle.
screen.title("Vẽ hình lục giác bằng Turtle"): Thiết lập
tiêu đề cho cửa sổ màn hình.

2. Tạo đối tượng Turtle

hexagon_turtle = turtle.Turtle(): Tạo một đối tượng


Turtle để vẽ.

3. Thiết lập tốc độ vẽ

hexagon_turtle.speed(2): Thiết lập tốc độ vẽ của Turtle (1 là


chậm nhất, 10 là nhanh nhất).

4. Vẽ hình lục giác đều

Sử dụng vòng lặp for _ in range(6) để lặp sáu lần, mỗi lần
thực hiện hai hành động:
hexagon_turtle.forward(100): Di chuyển Turtle về phía
trước 100 đơn vị. Độ dài này xác định kích thước của lục
giác.
hexagon_turtle.left(60): Quay Turtle 60 độ về bên trái.
Góc này xác định hình dạng của lục giác đều. Để vẽ lục
giác đều, góc quay là 60 độ (360 độ chia cho số cạnh
của lục giác, tức là 360/6 = 60).

5. Ẩn đối tượng Turtle sau khi vẽ xong

hexagon_turtle.hideturtle(): Ẩn đối tượng Turtle sau khi


vẽ xong để làm cho hình vẽ trông gọn gàng hơn.

6. Giữ màn hình để xem kết quả

screen.mainloop(): Giữ màn hình hiển thị cho đến khi người
dùng đóng cửa sổ.
Tóm tắt:
Import thư viện Turtle.
Tạo màn hình và đối tượng Turtle.
Vẽ hình lục giác đều bằng cách di chuyển Turtle theo các cạnh
và quay 60 độ.
Ẩn đối tượng Turtle và giữ màn hình mở để xem kết quả.

Chương trình trên giúp bạn sử dụng thư viện Turtle trong Python để
vẽ một hình lục giác đều đơn giản trên màn hình.
276 - Viết chương trình để vẽ hình ngũ
giác bằng Turtle

Giải thích đề bài


Bài toán yêu cầu chúng ta sử dụng thư viện Turtle trong Python để
vẽ một hình ngũ giác đều. Với Turtle, chúng ta sẽ điều khiển “con
rùa” di chuyển theo các cạnh của ngũ giác và quay một góc cụ thể
để tạo ra các đỉnh của ngũ giác.

Thuật toán

Đầu vào:
Không có đầu vào từ người dùng cho bài toán cơ bản này.

Đầu ra:
Một hình ngũ giác đều được vẽ trên màn hình.

Các bước thực hiện:


1. Khởi tạo thư viện Turtle.
2. Tạo một đối tượng Turtle.
3. Định nghĩa các bước để vẽ hình ngũ giác đều:
Di chuyển về phía trước một khoảng cố định.
Quay 72 độ để tạo góc giữa các cạnh của ngũ giác.
Lặp lại năm lần để hoàn thành năm cạnh của ngũ giác.
4. Chạy chương trình để hiển thị kết quả.
Cài đặt thư viện
Chúng ta sẽ sử dụng thư viện Turtle, thư viện này là mặc định trong
Python nên không cần cài đặt thêm gì.

Code Python
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình ngũ giác bằng Turtle")

# Tạo đối tượng Turtle


pentagon_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


pentagon_turtle.speed(2)

# Vẽ hình ngũ giác đều


for _ in range(5):
pentagon_turtle.forward(100) # Di chuyển về phía trước
100 đơn vị
pentagon_turtle.left(72) # Quay 72 độ sang trái

# Ẩn đối tượng Turtle sau khi vẽ xong


pentagon_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Giải thích code


1. Thiết lập màn hình

screen = turtle.Screen(): Tạo ra một đối tượng màn hình


để hiển thị đồ họa Turtle.
screen.title("Vẽ hình ngũ giác bằng Turtle"): Thiết lập
tiêu đề cho cửa sổ màn hình.

2. Tạo đối tượng Turtle

pentagon_turtle = turtle.Turtle(): Tạo một đối tượng


Turtle để vẽ.

3. Thiết lập tốc độ vẽ

pentagon_turtle.speed(2): Thiết lập tốc độ vẽ của Turtle (1


là chậm nhất, 10 là nhanh nhất).

4. Vẽ hình ngũ giác đều

Sử dụng vòng lặp for _ in range(5) để lặp năm lần, mỗi


lần thực hiện hai hành động:
pentagon_turtle.forward(100): Di chuyển Turtle về phía
trước 100 đơn vị. Độ dài này xác định kích thước của
ngũ giác.
pentagon_turtle.left(72): Quay Turtle 72 độ về bên
trái. Góc này xác định hình dạng của ngũ giác đều. Để
vẽ ngũ giác đều, góc quay là 72 độ (360 độ chia cho số
cạnh của ngũ giác, tức là 360/5 = 72).

5. Ẩn đối tượng Turtle sau khi vẽ xong

pentagon_turtle.hideturtle(): Ẩn đối tượng Turtle sau khi


vẽ xong để làm cho hình vẽ trông gọn gàng hơn.

6. Giữ màn hình để xem kết quả

screen.mainloop(): Giữ màn hình hiển thị cho đến khi người
dùng đóng cửa sổ.
Tóm tắt:
Import thư viện Turtle.
Tạo màn hình và đối tượng Turtle.
Vẽ hình ngũ giác đều bằng cách di chuyển Turtle theo các cạnh
và quay 72 độ.
Ẩn đối tượng Turtle và giữ màn hình mở để xem kết quả.

Chương trình trên giúp bạn sử dụng thư viện Turtle trong Python để
vẽ một hình ngũ giác đều đơn giản trên màn hình.

Bổ sung
Chúng ta có thể tạo hàm để vẽ hình ngũ giác với các kích thước và
vị trí tùy chọn. Đây là cách triển khai:
import turtle

# Tạo hàm vẽ ngũ giác với tham số cho kích thước và vị trí
def draw_pentagon(size, x, y):
pentagon_turtle.penup() # Nhấc bút để di chuyển
không vẽ
pentagon_turtle.goto(x, y) # Di chuyển đến vị trí (x,
y)
pentagon_turtle.pendown() # Hạ bút để bắt đầu vẽ

for _ in range(5):
pentagon_turtle.forward(size) # Di chuyển về phía
trước với độ dài kích thước 'size'
pentagon_turtle.left(72) # Quay 72 độ sang trái

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ hình ngũ giác tùy chọn bằng Turtle")

# Tạo đối tượng Turtle


pentagon_turtle = turtle.Turtle()
# Thiết lập tốc độ vẽ
pentagon_turtle.speed(2)

# Vẽ các hình ngũ giác với kích thước và vị trí khác nhau
draw_pentagon(100, 0, 0) # Vẽ ngũ giác tại vị trí
trung tâm (0, 0) với kích thước 100
draw_pentagon(50, -200, 100) # Vẽ ngũ giác nhỏ hơn tại vị
trí (-200, 100) với kích thước 50
draw_pentagon(75, 200, -150) # Vẽ ngũ giác tại vị trí
(200, -150) với kích thước 75

# Ẩn đối tượng Turtle sau khi vẽ xong


pentagon_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Tóm tắt:
Hàm draw_pentagon: Tạo hàm để vẽ ngũ giác với kích thước và
vị trí tùy chọn.
penup và pendown: Sử dụng để điều khiển bút vẽ của Turtle, cho
phép di chuyển mà không vẽ lên màn hình.
goto(x, y): Di chuyển Turtle đến vị trí (x, y) trên màn hình.

Chương trình bổ sung giúp bạn tạo ra các hình ngũ giác ở các vị trí
và kích thước khác nhau bằng cách sử dụng hàm trong Python và
các lệnh điều khiển nâng cao của Turtle.
277 - Viết chương trình để vẽ đường
tròn lồng vào nhau bằng Turtle

Giải thích đề bài


Bài toán yêu cầu chúng ta sử dụng thư viện Turtle trong Python để
vẽ các đường tròn lồng vào nhau. Điều này có nghĩa là chúng ta sẽ
vẽ nhiều đường tròn, mỗi đường tròn sẽ được đặt bên trong hoặc
xung quanh các đường tròn khác, tạo ra một hiệu ứng thị giác thú vị.

Thuật toán

Đầu vào:
Không có đầu vào từ người dùng cho bài toán cơ bản này.

Đầu ra:
Các đường tròn lồng vào nhau được vẽ trên màn hình.

Các bước thực hiện:


1. Khởi tạo thư viện Turtle.
2. Tạo một đối tượng Turtle.
3. Định nghĩa các bước để vẽ các đường tròn lồng vào nhau:
Vẽ một đường tròn với bán kính ban đầu.
Di chuyển Turtle để vẽ đường tròn tiếp theo ở vị trí mới mà
không trùng lặp hoàn toàn với đường tròn trước.
Thay đổi kích thước hoặc vị trí của mỗi đường tròn để tạo ra
hiệu ứng lồng vào nhau.
4. Lặp lại quá trình để vẽ nhiều đường tròn.
5. Chạy chương trình để hiển thị kết quả.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện Turtle, đây là thư viện mặc định trong
Python nên không cần cài đặt thêm gì.

Code Python
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ các đường tròn lồng vào nhau bằng Turtle")

# Tạo đối tượng Turtle


nested_circle_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


nested_circle_turtle.speed(2)

# Thiết lập bán kính ban đầu


initial_radius = 50

# Số lượng đường tròn


num_circles = 5

# Khoảng cách giữa các tâm của các đường tròn lồng vào nhau
distance_between_circles = 30

# Vẽ các đường tròn lồng vào nhau


for i in range(num_circles):
nested_circle_turtle.penup() # Nhấc bút để
di chuyển không vẽ
nested_circle_turtle.goto(0, -initial_radius - i *
distance_between_circles) # Di chuyển đến vị trí mới
nested_circle_turtle.pendown() # Hạ bút để
bắt đầu vẽ
nested_circle_turtle.circle(initial_radius + i *
distance_between_circles) # Vẽ đường tròn với bán kính
thay đổi

# Ẩn đối tượng Turtle sau khi vẽ xong


nested_circle_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Giải thích code


1. Thiết lập màn hình

screen = turtle.Screen(): Tạo ra một đối tượng màn hình


để hiển thị đồ họa Turtle.
screen.title("Vẽ các đường tròn lồng vào nhau bằng
Turtle"): Thiết lập tiêu đề cho cửa sổ màn hình.

2. Tạo đối tượng Turtle

nested_circle_turtle = turtle.Turtle(): Tạo một đối


tượng Turtle để vẽ.

3. Thiết lập tốc độ vẽ

nested_circle_turtle.speed(2): Thiết lập tốc độ vẽ của


Turtle (1 là chậm nhất, 10 là nhanh nhất).

4. Thiết lập bán kính ban đầu và khoảng cách

initial_radius = 50: Bán kính của đường tròn đầu tiên.


num_circles = 5: Số lượng đường tròn sẽ được vẽ.
distance_between_circles = 30: Khoảng cách giữa các tâm
của các đường tròn lồng vào nhau.

5. Vẽ các đường tròn lồng vào nhau


Sử dụng vòng lặp for i in range(num_circles) để lặp qua
mỗi đường tròn:
nested_circle_turtle.penup(): Nhấc bút lên để di
chuyển mà không vẽ.
nested_circle_turtle.goto(0, -initial_radius - i *
distance_between_circles): Di chuyển Turtle đến vị trí
mới, vị trí này sẽ được tính toán dựa trên bán kính ban
đầu và khoảng cách giữa các tâm.
nested_circle_turtle.pendown(): Hạ bút xuống để bắt
đầu vẽ.
nested_circle_turtle.circle(initial_radius + i *
distance_between_circles): Vẽ đường tròn với bán kính
thay đổi dựa trên vòng lặp.

6. Ẩn đối tượng Turtle sau khi vẽ xong

nested_circle_turtle.hideturtle(): Ẩn đối tượng Turtle


sau khi vẽ xong để làm cho hình vẽ trông gọn gàng hơn.

7. Giữ màn hình để xem kết quả

screen.mainloop(): Giữ màn hình hiển thị cho đến khi người
dùng đóng cửa sổ.

Tóm tắt:
Import thư viện Turtle.
Tạo màn hình và đối tượng Turtle.
Vẽ các đường tròn lồng vào nhau bằng cách thay đổi bán kính
và vị trí của mỗi đường tròn.
Ẩn đối tượng Turtle và giữ màn hình mở để xem kết quả.
Bổ sung
Chúng ta có thể mở rộng chương trình để tạo ra các hiệu ứng thú vị
hơn, chẳng hạn như vẽ các đường tròn với màu sắc khác nhau. Đây
là cách triển khai:
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ các đường tròn lồng vào nhau với màu sắc
bằng Turtle")

# Tạo đối tượng Turtle


colorful_circle_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


colorful_circle_turtle.speed(2)

# Thiết lập bán kính ban đầu


initial_radius = 50

# Số lượng đường tròn


num_circles = 10

# Khoảng cách giữa các tâm của các đường tròn lồng vào nhau
distance_between_circles = 20

# Danh sách các màu sắc


colors = ["red", "blue", "green", "yellow", "purple",
"orange", "pink", "cyan", "magenta", "brown"]

# Vẽ các đường tròn lồng vào nhau với màu sắc


for i in range(num_circles):
colorful_circle_turtle.penup() # Nhấc bút
để di chuyển không vẽ
colorful_circle_turtle.goto(0, -initial_radius - i *
distance_between_circles) # Di chuyển đến vị trí mới
colorful_circle_turtle.pendown() # Hạ bút để
bắt đầu vẽ
colorful_circle_turtle.color(colors[i % len(colors)]) #
Thay đổi màu sắc
colorful_circle_turtle.circle(initial_radius + i *
distance_between_circles) # Vẽ đường tròn với bán kính
thay đổi

# Ẩn đối tượng Turtle sau khi vẽ xong


colorful_circle_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Tóm tắt:
Thêm màu sắc: Sử dụng danh sách màu sắc để vẽ các đường
tròn với các màu khác nhau.
color: Sử dụng phương thức color của Turtle để thay đổi màu
sắc của bút vẽ.

Chương trình mở rộng này giúp bạn tạo ra các đường tròn lồng vào
nhau với màu sắc khác nhau, tạo ra một hiệu ứng thị giác sinh động
và thú vị.
278 - Viết chương trình để vẽ các
đường thẳng song song bằng Turtle

Giải thích đề bài


Bài toán yêu cầu sử dụng thư viện Turtle trong Python để vẽ các
đường thẳng song song. Chúng ta sẽ điều khiển “con rùa” Turtle để
vẽ nhiều đường thẳng, với mỗi đường thẳng được cách đều nhau.

Thuật toán

Đầu vào:
Không có đầu vào từ người dùng cho bài toán cơ bản này.

Đầu ra:
Các đường thẳng song song được vẽ trên màn hình.

Các bước thực hiện:


1. Khởi tạo thư viện Turtle.
2. Tạo một đối tượng Turtle.
3. Định nghĩa các bước để vẽ các đường thẳng song song:
Di chuyển Turtle đến vị trí bắt đầu của mỗi đường thẳng.
Vẽ một đường thẳng theo hướng xác định (hướng ngang
hoặc dọc).
Lặp lại quá trình để vẽ nhiều đường thẳng, cách đều nhau.
4. Chạy chương trình để hiển thị kết quả.
Cài đặt thư viện
Chúng ta sẽ sử dụng thư viện Turtle, đây là thư viện mặc định trong
Python nên không cần cài đặt thêm gì.

Code Python
import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ các đường thẳng song song bằng Turtle")

# Tạo đối tượng Turtle


parallel_lines_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


parallel_lines_turtle.speed(2)

# Số lượng đường thẳng song song


num_lines = 10

# Khoảng cách giữa các đường thẳng


distance_between_lines = 20

# Độ dài của mỗi đường thẳng


line_length = 300

# Vẽ các đường thẳng song song


for i in range(num_lines):
parallel_lines_turtle.penup() # Nhấc bút
để di chuyển không vẽ
parallel_lines_turtle.goto(-line_length / 2, -100 + i *
distance_between_lines) # Di chuyển đến vị trí mới
parallel_lines_turtle.pendown() # Hạ bút để
bắt đầu vẽ
parallel_lines_turtle.forward(line_length) # Vẽ đường
thẳng với chiều dài xác định
# Ẩn đối tượng Turtle sau khi vẽ xong
parallel_lines_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Giải thích code


1. Thiết lập màn hình

screen = turtle.Screen(): Tạo ra một đối tượng màn hình


để hiển thị đồ họa Turtle.
screen.title("Vẽ các đường thẳng song song bằng
Turtle"): Thiết lập tiêu đề cho cửa sổ màn hình.

2. Tạo đối tượng Turtle

parallel_lines_turtle = turtle.Turtle(): Tạo một đối


tượng Turtle để vẽ.

3. Thiết lập tốc độ vẽ

parallel_lines_turtle.speed(2): Thiết lập tốc độ vẽ của


Turtle (1 là chậm nhất, 10 là nhanh nhất).

4. Thiết lập thông số cho các đường thẳng song song

num_lines = 10:Số lượng đường thẳng sẽ được vẽ.


distance_between_lines = 20: Khoảng cách giữa các
đường thẳng.
line_length = 300: Độ dài của mỗi đường thẳng.

5. Vẽ các đường thẳng song song

Sử dụng vòng lặp for i in range(num_lines) để lặp qua


mỗi đường thẳng:
parallel_lines_turtle.penup(): Nhấc bút lên để di
chuyển mà không vẽ.
parallel_lines_turtle.goto(-line_length / 2, -100
+ i * distance_between_lines): Di chuyển Turtle đến vị
trí bắt đầu của mỗi đường thẳng, với vị trí được tính toán
dựa trên chiều dài của đường thẳng và khoảng cách
giữa các đường.
parallel_lines_turtle.pendown(): Hạ bút xuống để bắt
đầu vẽ.
parallel_lines_turtle.forward(line_length): Vẽ
đường thẳng với chiều dài xác định.

6. Ẩn đối tượng Turtle sau khi vẽ xong

parallel_lines_turtle.hideturtle(): Ẩn đối tượng Turtle


sau khi vẽ xong để làm cho hình vẽ trông gọn gàng hơn.

7. Giữ màn hình để xem kết quả

screen.mainloop(): Giữ màn hình hiển thị cho đến khi người
dùng đóng cửa sổ.

Tóm tắt:
Import thư viện Turtle.
Tạo màn hình và đối tượng Turtle.
Vẽ các đường thẳng song song bằng cách di chuyển Turtle đến
vị trí bắt đầu của mỗi đường thẳng và vẽ đường thẳng theo
hướng ngang.
Ẩn đối tượng Turtle và giữ màn hình mở để xem kết quả.

Bổ sung
Chúng ta có thể tạo các hiệu ứng khác nhau như thay đổi hướng vẽ
các đường thẳng hoặc thêm màu sắc khác nhau. Dưới đây là một
số cách mở rộng:

1. Vẽ các đường thẳng dọc song song:


import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ các đường thẳng dọc song song bằng
Turtle")

# Tạo đối tượng Turtle


parallel_lines_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


parallel_lines_turtle.speed(2)

# Số lượng đường thẳng song song


num_lines = 10

# Khoảng cách giữa các đường thẳng


distance_between_lines = 20

# Độ dài của mỗi đường thẳng


line_length = 300

# Vẽ các đường thẳng dọc song song


for i in range(num_lines):
parallel_lines_turtle.penup() # Nhấc
bút để di chuyển không vẽ
parallel_lines_turtle.goto(-100 + i *
distance_between_lines, line_length / 2) # Di chuyển đến
vị trí mới
parallel_lines_turtle.pendown() # Hạ bút
để bắt đầu vẽ
parallel_lines_turtle.setheading(-90) # Đặt
hướng của Turtle xuống dưới (góc 270 độ)
parallel_lines_turtle.forward(line_length) # Vẽ
đường thẳng với chiều dài xác định

# Ẩn đối tượng Turtle sau khi vẽ xong


parallel_lines_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

2. Vẽ các đường thẳng với màu sắc khác nhau:


import turtle

# Thiết lập màn hình


screen = turtle.Screen()
screen.title("Vẽ các đường thẳng song song với màu sắc
bằng Turtle")

# Tạo đối tượng Turtle


colorful_lines_turtle = turtle.Turtle()

# Thiết lập tốc độ vẽ


colorful_lines_turtle.speed(2)

# Số lượng đường thẳng song song


num_lines = 10

# Khoảng cách giữa các đường thẳng


distance_between_lines = 20

# Độ dài của mỗi đường thẳng


line_length = 300

# Danh sách các màu sắc


colors = ["red", "blue", "green", "yellow", "purple",
"orange"]

# Vẽ các đường thẳng song song với màu sắc


for i in range(num_lines):
colorful_lines_turtle.penup() # Nhấc
bút để di chuyển không vẽ
colorful_lines_turtle.goto(-line_length / 2, -100 + i
* distance_between_lines) # Di chuyển đến vị trí mới
colorful_lines_turtle.pendown() # Hạ bút
để bắt đầu vẽ
colorful_lines_turtle.color(colors[i % len(colors)])
# Thay đổi màu sắc
colorful_lines_turtle.forward(line_length) # Vẽ
đường thẳng với chiều dài xác định

# Ẩn đối tượng Turtle sau khi vẽ xong


colorful_lines_turtle.hideturtle()

# Giữ màn hình để xem kết quả


screen.mainloop()

Tóm tắt:
Vẽ các đường thẳng dọc: Thay đổi hướng của Turtle để vẽ các
đường thẳng dọc thay vì ngang.
Thêm màu sắc: Sử dụng danh sách màu sắc để vẽ các đường
thẳng với màu sắc khác nhau.

Chương trình bổ sung này giúp bạn tạo ra các đường thẳng song
song theo nhiều cách khác nhau, tăng tính sinh động và đa dạng
cho hình vẽ.
279 - Viết chương trình để vẽ các hình
chữ nhật lồng vào nhau bằng Turtle

Giải thích đề bài


Đề bài yêu cầu viết một chương trình bằng Python sử dụng thư viện
Turtle để vẽ các hình chữ nhật lồng vào nhau. Mục tiêu là tạo ra một
hình ảnh với các hình chữ nhật lồng vào nhau, mỗi hình có kích
thước nhỏ hơn và nằm bên trong hình trước đó.

Thuật toán:

Đầu vào
Kích thước ban đầu của hình chữ nhật (chiều dài và chiều rộng).
Số lượng hình chữ nhật cần vẽ.
Độ giảm kích thước sau mỗi lần vẽ (nếu có).

Đầu ra
Hình ảnh các hình chữ nhật lồng vào nhau được vẽ bởi Turtle.

Các bước thực hiện


1. Khởi tạo Turtle.
2. Vẽ hình chữ nhật ban đầu với kích thước được cung cấp.
3. Giảm kích thước của hình chữ nhật.
4. Dịch chuyển Turtle để chuẩn bị vẽ hình chữ nhật tiếp theo (nhỏ
hơn và nằm bên trong hình hiện tại).
5. Lặp lại các bước 2-4 cho đến khi vẽ đủ số lượng hình chữ nhật.
Code Python
import turtle

def draw_rectangle(t, width, height):


for _ in range(2):
t.forward(width)
t.right(90)
t.forward(height)
t.right(90)

def nested_rectangles(initial_width, initial_height,


num_rectangles, decrement):
screen = turtle.Screen()
t = turtle.Turtle()

width = initial_width
height = initial_height

for _ in range(num_rectangles):
draw_rectangle(t, width, height)
width -= decrement
height -= decrement
t.penup()
t.goto(t.xcor() + decrement / 2, t.ycor() - decrement
/ 2)
t.pendown()

screen.mainloop()

# Tham số đầu vào: Kích thước ban đầu, số lượng hình chữ
nhật, độ giảm kích thước
nested_rectangles(200, 100, 10, 10)

Giải thích code


1. Khởi tạo thư viện và định nghĩa hàm vẽ hình chữ nhật:
import turtle: Thư viện turtle được nhập vào để sử dụng
các hàm vẽ.
def draw_rectangle(t, width, height): Định nghĩa hàm
draw_rectangle để vẽ hình chữ nhật với Turtle t.

2. Vẽ các hình chữ nhật lồng nhau:

def nested_rectangles(initial_width, initial_height,


num_rectangles, decrement): Định nghĩa hàm chính để vẽ
các hình chữ nhật lồng nhau.
screen = turtle.Screen(): Khởi tạo màn hình Turtle.
t = turtle.Turtle(): Khởi tạo Turtle.
width = initial_width và height = initial_height: Thiết
lập kích thước ban đầu cho hình chữ nhật.
for _ in range(num_rectangles): Vòng lặp để vẽ các hình
chữ nhật theo số lượng yêu cầu.
draw_rectangle(t, width, height): Gọi hàm vẽ hình
chữ nhật với kích thước hiện tại.
width -= decrement và height -= decrement: Giảm kích
thước của hình chữ nhật.
t.penup() và t.pendown(): Điều chỉnh vị trí Turtle để
chuẩn bị cho hình chữ nhật tiếp theo.
t.goto(t.xcor() + decrement / 2, t.ycor() -
decrement / 2): Di chuyển Turtle đến vị trí mới cho hình
chữ nhật tiếp theo.

3. Gọi hàm với tham số đầu vào:

nested_rectangles(200, 100, 10, 10): Gọi hàm để vẽ các


hình chữ nhật lồng nhau với kích thước ban đầu là 200x100,
số lượng hình chữ nhật là 10, và mỗi lần giảm kích thước là
10.
Tóm tắt:
Sử dụng thư viện turtle để vẽ các hình.
Vòng lặp để vẽ nhiều hình chữ nhật với kích thước giảm dần.
Di chuyển Turtle để vẽ hình chữ nhật tiếp theo nằm bên trong
hình hiện tại.

Chương trình tạo ra một hình ảnh các hình chữ nhật lồng vào nhau
với Turtle, giúp hiểu rõ cách sử dụng vòng lặp và điều chỉnh vị trí vẽ
trong Python.
280 - Viết chương trình để vẽ hoa
bằng Turtle

Giải thích đề bài


Đề bài yêu cầu viết một chương trình bằng Python sử dụng thư viện
Turtle để vẽ một bông hoa. Chúng ta sẽ sử dụng các vòng lặp và
các hàm cơ bản của Turtle để vẽ các cánh hoa và tâm hoa.

Thuật toán:

Đầu vào
Kích thước của cánh hoa (độ dài bán kính).
Số lượng cánh hoa.

Đầu ra
Hình ảnh bông hoa được vẽ bởi Turtle.

Các bước thực hiện


1. Khởi tạo Turtle.
2. Vẽ từng cánh hoa bằng cách sử dụng vòng lặp.
3. Di chuyển Turtle để chuẩn bị vẽ cánh hoa tiếp theo.
4. Tùy chọn: Vẽ tâm của bông hoa.

Code Python
import turtle
def draw_petal(t, radius):
t.circle(radius, 60) # Vẽ cung tròn 60 độ
t.left(120) # Quay trái 120 độ để vẽ cánh đối
xứng
t.circle(radius, 60)
t.left(120) # Quay trái 120 độ để trở lại vị
trí ban đầu

def draw_flower(num_petals, radius):


screen = turtle.Screen()
t = turtle.Turtle()
t.speed(10) # Tăng tốc độ vẽ

for _ in range(num_petals):
draw_petal(t, radius)
t.left(360 / num_petals) # Quay trái để chuẩn bị vẽ
cánh hoa tiếp theo

t.hideturtle() # Ẩn con trỏ sau khi vẽ xong


screen.mainloop()

# Tham số đầu vào: Số lượng cánh hoa và bán kính của cánh
draw_flower(12, 100)

Giải thích code


1. Khởi tạo thư viện và định nghĩa hàm vẽ cánh hoa:

import turtle: Thư viện turtle được nhập vào để sử dụng


các hàm vẽ.
def draw_petal(t, radius): Định nghĩa hàm draw_petal để
vẽ một cánh hoa với Turtle t.
t.circle(radius, 60): Vẽ một cung tròn với bán kính
radius và góc 60 độ.
t.left(120): Quay trái 120 độ để chuẩn bị vẽ phần đối
xứng của cánh hoa.
t.circle(radius, 60): Vẽ cung tròn đối xứng.
t.left(120): Quay trái 120 độ để trở lại vị trí ban đầu.
2. Vẽ bông hoa:

def draw_flower(num_petals, radius): Định nghĩa hàm


chính để vẽ bông hoa với số lượng cánh hoa num_petals và
bán kính radius.
screen = turtle.Screen(): Khởi tạo màn hình Turtle.
t = turtle.Turtle(): Khởi tạo Turtle.
t.speed(10): Tăng tốc độ vẽ để chương trình chạy nhanh
hơn.
for _ in range(num_petals): Vòng lặp để vẽ các cánh hoa.
draw_petal(t, radius): Gọi hàm vẽ cánh hoa với bán
kính radius.
t.left(360 / num_petals): Quay trái để chuẩn bị vẽ
cánh hoa tiếp theo, đảm bảo các cánh hoa phân bố đều
quanh tâm.
t.hideturtle(): Ẩn con trỏ sau khi vẽ xong.

3. Gọi hàm với tham số đầu vào:

draw_flower(12, 100): Gọi hàm để vẽ bông hoa với 12 cánh


hoa và bán kính mỗi cánh là 100.

Tóm tắt:
Sử dụng thư viện turtle để vẽ các hình.
Định nghĩa hàm để vẽ cánh hoa.
Sử dụng vòng lặp để vẽ nhiều cánh hoa và xoay Turtle để phân
bố đều các cánh.
Điều chỉnh tốc độ vẽ và ẩn con trỏ sau khi vẽ xong.

Chương trình tạo ra một hình ảnh bông hoa với các cánh hoa phân
bố đều quanh tâm, sử dụng các hàm cơ bản và vòng lặp trong thư
viện Turtle của Python.
Chương 29 : Khoa học dữ liệu
cơ bản
281. Viết chương trình để tính trung bình, median và mode của một
danh sách số.
282. Viết chương trình để tính phương sai và độ lệch chuẩn của một
danh sách số.
283. Viết chương trình để vẽ biểu đồ phân phối của một danh sách
số.
284. Viết chương trình để vẽ biểu đồ boxplot của một danh sách số.
285. Viết chương trình để vẽ biểu đồ scatterplot của hai danh sách
số.
286. Viết chương trình để tính ma trận tương quan của hai danh sách
số.
287. Viết chương trình để thực hiện phân tích hồi quy đơn giản.
288. Viết chương trình để thực hiện phân tích hồi quy đa biến.
289. Viết chương trình để phân tích dữ liệu sử dụng Pandas.
290. Viết chương trình để phân tích dữ liệu sử dụng Numpy.
281 - Viết chương trình để tính trung
bình, median và mode của một danh
sách số

Giải thích đề bài


Bạn cần viết một chương trình Python để tính toán ba đại lượng
thống kê cơ bản của một danh sách số: trung bình (mean), trung vị
(median), và giá trị thường gặp nhất (mode).

Thuật toán:
Đầu vào: Một danh sách các số nguyên hoặc số thực.
Đầu ra: Ba giá trị: trung bình, trung vị và giá trị thường gặp nhất
của danh sách.
Các bước thực hiện:
1. Nhập danh sách các số.
2. Tính giá trị trung bình bằng cách chia tổng các phần tử cho
số lượng phần tử.
3. Sắp xếp danh sách và tính giá trị trung vị.
4. Tính giá trị thường gặp nhất bằng cách đếm tần suất xuất
hiện của các phần tử trong danh sách.

Code Python
import statistics

def calculate_statistics(numbers):
mean = statistics.mean(numbers)
median = statistics.median(numbers)
try:
mode = statistics.mode(numbers)
except statistics.StatisticsError:
mode = "No unique mode"

return mean, median, mode

# Ví dụ sử dụng
numbers = [1, 2, 2, 3, 4]
mean, median, mode = calculate_statistics(numbers)
print("Mean:", mean)
print("Median:", median)
print("Mode:", mode)

Giải thích code


1. Import thư viện statistics:
Sử dụng thư viện này để tính toán các giá trị thống kê một
cách dễ dàng.
2. Định nghĩa hàm calculate_statistics(numbers):
Hàm nhận đầu vào là một danh sách các số.
Tính trung bình (mean):
Sử dụng hàm statistics.mean().
Tính trung vị (median):
Sử dụng hàm statistics.median().
Tính mode:
Sử dụng hàm statistics.mode().
Sử dụng khối try-except để xử lý trường hợp không có
mode duy nhất.
3. Gọi hàm và in kết quả:
Gọi hàm calculate_statistics() với danh sách số mẫu.
In ra kết quả của trung bình, trung vị và mode.

Bổ sung
Cách giải khác có thể là tự viết hàm tính trung bình, trung vị và
mode thay vì sử dụng thư viện statistics.
Tóm tắt:
Sử dụng thư viện statistics để tính các giá trị thống kê cơ bản.
Sử dụng hàm mean() để tính trung bình.
Sử dụng hàm median() để tính trung vị.
Sử dụng hàm mode() để tính giá trị thường gặp nhất.
Sử dụng khối try-except để xử lý trường hợp không có mode
duy nhất.

Chương trình tính toán và in ra giá trị trung bình, trung vị và giá trị
thường gặp nhất của một danh sách số.
282 - Viết chương trình để tính
phương sai và độ lệch chuẩn của một
danh sách số

Giải thích đề bài


Bạn cần viết một chương trình Python để tính phương sai (variance)
và độ lệch chuẩn (standard deviation) của một danh sách số.

Thuật toán:
Đầu vào: Một danh sách các số nguyên hoặc số thực.
Đầu ra: Hai giá trị: phương sai và độ lệch chuẩn của danh sách.
Các bước thực hiện:
1. Nhập danh sách các số.
2. Tính phương sai bằng cách sử dụng công thức phương sai.
3. Tính độ lệch chuẩn bằng cách lấy căn bậc hai của phương
sai.

Code Python
import statistics

def calculate_variance_and_std_dev(numbers):
variance = statistics.variance(numbers)
std_dev = statistics.stdev(numbers)

return variance, std_dev

# Ví dụ sử dụng
numbers = [1, 2, 2, 3, 4]
variance, std_dev = calculate_variance_and_std_dev(numbers)
print("Variance:", variance)
print("Standard Deviation:", std_dev)

Giải thích code


1. Import thư viện statistics:
Sử dụng thư viện này để tính toán các giá trị thống kê một
cách dễ dàng.
2. Định nghĩa hàm calculate_variance_and_std_dev(numbers):
Hàm nhận đầu vào là một danh sách các số.
Tính phương sai (variance):
Sử dụng hàm statistics.variance().
Tính độ lệch chuẩn (std_dev):
Sử dụng hàm statistics.stdev().
3. Gọi hàm và in kết quả:
Gọi hàm calculate_variance_and_std_dev() với danh sách
số mẫu.
In ra kết quả của phương sai và độ lệch chuẩn.

Tóm tắt:
Sử dụng thư viện statistics để tính phương sai và độ lệch
chuẩn.
Sử dụng hàm variance() để tính phương sai.
Sử dụng hàm stdev() để tính độ lệch chuẩn.

Chương trình tính toán và in ra phương sai và độ lệch chuẩn của


một danh sách số.
283 - Viết chương trình để vẽ biểu đồ
phân phối của một danh sách số

Giải thích đề bài


Bạn cần viết một chương trình Python để vẽ biểu đồ phân phối
(distribution plot) của một danh sách số. Biểu đồ phân phối thường
được sử dụng để hiển thị cách các giá trị trong một tập dữ liệu phân
bố.

Thuật toán:
Đầu vào: Một danh sách các số nguyên hoặc số thực.
Đầu ra: Một biểu đồ phân phối của các số trong danh sách.
Các bước thực hiện:
1. Nhập danh sách các số.
2. Sử dụng thư viện matplotlib để tạo và hiển thị biểu đồ phân
phối.

Cài đặt thư viện


pip install matplotlib seaborn

Code Python
import matplotlib.pyplot as plt
import seaborn as sns

def plot_distribution(numbers):
sns.histplot(numbers, kde=True)
plt.title('Distribution Plot')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()

# Ví dụ sử dụng
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 6, 7, 8]
plot_distribution(numbers)

Giải thích code


1. Import thư viện matplotlib.pyplot và seaborn:
matplotlib.pyplot: Thư viện này cung cấp các hàm để tạo
các biểu đồ.
seaborn: Thư viện này cung cấp các công cụ trực quan hóa
dữ liệu mạnh mẽ và dễ sử dụng, được xây dựng trên
matplotlib.
2. Định nghĩa hàm plot_distribution(numbers):
Hàm nhận đầu vào là một danh sách các số.
Vẽ biểu đồ phân phối:
Sử dụng sns.histplot() để vẽ histogram kèm theo
đường KDE (Kernel Density Estimate).
Thêm tiêu đề và nhãn:
Sử dụng plt.title(), plt.xlabel(), và plt.ylabel()
để thêm tiêu đề và nhãn cho biểu đồ.
Hiển thị biểu đồ:
Sử dụng plt.show() để hiển thị biểu đồ.
3. Gọi hàm plot_distribution():
Gọi hàm plot_distribution() với một danh sách số mẫu để
hiển thị biểu đồ phân phối.

Tóm tắt:
Sử dụng thư viện matplotlib và seaborn để vẽ biểu đồ.
Sử dụng sns.histplot() để vẽ histogram và KDE.
Sử dụng các hàm plt.title(), plt.xlabel(), và plt.ylabel()
để thêm tiêu đề và nhãn cho biểu đồ.
Sử dụng plt.show() để hiển thị biểu đồ.
Chương trình vẽ và hiển thị biểu đồ phân phối của một danh sách
số.
284 - Viết chương trình để vẽ biểu đồ
boxplot của một danh sách số

Giải thích đề bài


Bạn cần viết một chương trình Python để vẽ biểu đồ boxplot của một
danh sách số. Biểu đồ boxplot giúp hiển thị sự phân bố của dữ liệu
thông qua các giá trị như median, quartiles, và potential outliers.

Thuật toán:
Đầu vào: Một danh sách các số nguyên hoặc số thực.
Đầu ra: Một biểu đồ boxplot của các số trong danh sách.
Các bước thực hiện:
1. Nhập danh sách các số.
2. Sử dụng thư viện matplotlib và seaborn để tạo và hiển thị
biểu đồ boxplot.

Cài đặt thư viện


Nếu chưa cài đặt các thư viện cần thiết, bạn có thể sử dụng các
lệnh sau trên terminal:
pip install matplotlib seaborn

Code Python
import matplotlib.pyplot as plt
import seaborn as sns

def plot_boxplot(numbers):
sns.boxplot(data=numbers)
plt.title('Boxplot')
plt.xlabel('Value')
plt.show()

# Ví dụ sử dụng
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 6, 7, 8]
plot_boxplot(numbers)

Giải thích code


1. Import thư viện matplotlib.pyplot và seaborn:
matplotlib.pyplot: Thư viện này cung cấp các hàm để tạo
các biểu đồ.
seaborn: Thư viện này cung cấp các công cụ trực quan hóa
dữ liệu mạnh mẽ và dễ sử dụng, được xây dựng trên
matplotlib.
2. Định nghĩa hàm plot_boxplot(numbers):
Hàm nhận đầu vào là một danh sách các số.
Vẽ biểu đồ boxplot:
Sử dụng sns.boxplot() để vẽ boxplot từ dữ liệu.
Thêm tiêu đề và nhãn:
Sử dụng plt.title() và plt.xlabel() để thêm tiêu đề
và nhãn cho biểu đồ.
Hiển thị biểu đồ:
Sử dụng plt.show() để hiển thị biểu đồ.
3. Gọi hàm plot_boxplot():
Gọi hàm plot_boxplot() với một danh sách số mẫu để hiển
thị biểu đồ boxplot.

Tóm tắt:
Sử dụng thư viện matplotlib và seaborn để vẽ biểu đồ.
Sử dụng sns.boxplot() để vẽ boxplot.
Sử dụng các hàm plt.title() và plt.xlabel() để thêm tiêu đề
và nhãn cho biểu đồ.
Sử dụng plt.show() để hiển thị biểu đồ.
Chương trình vẽ và hiển thị biểu đồ boxplot của một danh sách số.
285 - Viết chương trình để vẽ biểu đồ
scatterplot của hai danh sách số

Giải thích đề bài


Bạn cần viết một chương trình Python để vẽ biểu đồ scatterplot
(biểu đồ phân tán) của hai danh sách số. Biểu đồ scatterplot giúp
hiển thị mối quan hệ giữa hai biến số.

Thuật toán:
Đầu vào: Hai danh sách các số nguyên hoặc số thực.
Đầu ra: Một biểu đồ scatterplot của các số trong hai danh sách.
Các bước thực hiện:
1. Nhập hai danh sách các số.
2. Sử dụng thư viện matplotlib để tạo và hiển thị biểu đồ
scatterplot.

Cài đặt thư viện


Nếu chưa cài đặt thư viện cần thiết, bạn có thể sử dụng lệnh sau
trên terminal:
pip install matplotlib seaborn

Code Python
import matplotlib.pyplot as plt
import seaborn as sns

def plot_scatterplot(x, y):


plt.figure(figsize=(8, 6))
plt.scatter(x, y)
plt.title('Scatterplot')
plt.xlabel('X values')
plt.ylabel('Y values')
plt.grid(True)
plt.show()

# Ví dụ sử dụng
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [2, 3, 5, 7, 11, 13, 17, 19, 23]
plot_scatterplot(x, y)

Giải thích code


1. Import thư viện matplotlib.pyplot và seaborn:
matplotlib.pyplot: Thư viện này cung cấp các hàm để tạo
các biểu đồ.
seaborn: Thư viện này cung cấp các công cụ trực quan hóa
dữ liệu mạnh mẽ và dễ sử dụng, được xây dựng trên
matplotlib. (Không bắt buộc phải sử dụng seaborn trong ví
dụ này, nhưng có thể làm cho biểu đồ trông đẹp hơn)
2. Định nghĩa hàm plot_scatterplot(x, y):
Hàm nhận đầu vào là hai danh sách các số.
Vẽ biểu đồ scatterplot:
Sử dụng plt.scatter() để vẽ scatterplot từ dữ liệu.
Thêm tiêu đề và nhãn:
Sử dụng plt.title(), plt.xlabel(), và plt.ylabel()
để thêm tiêu đề và nhãn cho biểu đồ.
Hiển thị lưới:
Sử dụng plt.grid(True) để hiển thị lưới trên biểu đồ.
Hiển thị biểu đồ:
Sử dụng plt.show() để hiển thị biểu đồ.
3. Gọi hàm plot_scatterplot():
Gọi hàm plot_scatterplot() với hai danh sách số mẫu để
hiển thị biểu đồ scatterplot.
Tóm tắt:
Sử dụng thư viện matplotlib để vẽ biểu đồ.
Sử dụng plt.scatter() để vẽ scatterplot.
Sử dụng các hàm plt.title(), plt.xlabel(), và plt.ylabel()
để thêm tiêu đề và nhãn cho biểu đồ.
Sử dụng plt.grid(True) để hiển thị lưới.
Sử dụng plt.show() để hiển thị biểu đồ.

Chương trình vẽ và hiển thị biểu đồ scatterplot của hai danh sách
số.
286 - Viết chương trình để tính ma
trận tương quan của hai danh sách số

Giải thích đề bài


Bạn cần viết một chương trình Python để tính ma trận tương quan
(correlation matrix) của hai danh sách số. Ma trận tương quan giúp
hiểu được mối quan hệ giữa các biến số, với các giá trị dao động từ
-1 đến 1, chỉ ra mức độ và hướng của mối quan hệ.

Thuật toán:
Đầu vào: Hai danh sách các số nguyên hoặc số thực.
Đầu ra: Ma trận tương quan của hai danh sách.
Các bước thực hiện:
1. Nhập hai danh sách các số.
2. Sử dụng thư viện NumPy hoặc Pandas để tính ma trận
tương quan.
3. In hoặc hiển thị ma trận tương quan.

Cài đặt thư viện


Nếu chưa cài đặt thư viện cần thiết, bạn có thể sử dụng lệnh sau
trên terminal:
pip install numpy pandas

Code Python
import numpy as np
import pandas as pd
def calculate_correlation_matrix(x, y):
data = {'X': x, 'Y': y}
df = pd.DataFrame(data)
correlation_matrix = df.corr()
return correlation_matrix

# Ví dụ sử dụng
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [2, 3, 5, 7, 11, 13, 17, 19, 23]
correlation_matrix = calculate_correlation_matrix(x, y)
print(correlation_matrix)

Giải thích code


1. Import thư viện numpy và pandas:
numpy: Thư viện này cung cấp các công cụ tính toán mạnh
mẽ cho các phép toán trên mảng.
pandas: Thư viện này cung cấp các công cụ để thao tác và
phân tích dữ liệu.
2. Định nghĩa hàm calculate_correlation_matrix(x, y):
Hàm nhận đầu vào là hai danh sách các số.
Tạo DataFrame:
Sử dụng pd.DataFrame() để tạo một DataFrame từ hai
danh sách số.
Tính ma trận tương quan:
Sử dụng df.corr() để tính ma trận tương quan của
DataFrame.
Trả về ma trận tương quan:
Trả về kết quả ma trận tương quan.
3. Gọi hàm calculate_correlation_matrix():
Gọi hàm calculate_correlation_matrix() với hai danh
sách số mẫu để tính toán và in ma trận tương quan.
Tóm tắt:
Sử dụng thư viện numpy và pandas để tính toán và hiển thị ma
trận tương quan.
Tạo DataFrame từ hai danh sách số bằng pd.DataFrame().
Sử dụng df.corr() để tính ma trận tương quan.
In kết quả ma trận tương quan.

Chương trình tính toán và in ma trận tương quan của hai danh sách
số.
287 - Viết chương trình để thực hiện
phân tích hồi quy đơn giản

Giải thích đề bài


Bạn cần viết một chương trình Python để thực hiện phân tích hồi
quy đơn giản. Hồi quy đơn giản là một kỹ thuật thống kê để tìm mối
quan hệ giữa hai biến số, trong đó một biến độc lập (predictor) và
một biến phụ thuộc (response).

Thuật toán:
Đầu vào: Hai danh sách các số nguyên hoặc số thực, đại diện
cho biến độc lập và biến phụ thuộc.
Đầu ra: Hệ số hồi quy (slope và intercept), phương trình hồi quy,
và đánh giá hiệu suất của mô hình (R-squared).
Các bước thực hiện:
1. Nhập hai danh sách các số.
2. Sử dụng thư viện scikit-learn để thực hiện phân tích hồi quy.
3. Hiển thị hệ số hồi quy, phương trình hồi quy, và đánh giá
hiệu suất của mô hình.

Cài đặt thư viện


Nếu chưa cài đặt thư viện cần thiết, bạn có thể sử dụng lệnh sau
trên terminal:
pip install scikit-learn numpy matplotlib
Code Python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

def simple_linear_regression(x, y):


# Chuyển đổi dữ liệu đầu vào thành mảng numpy và reshape
để phù hợp với mô hình scikit-learn
x = np.array(x).reshape(-1, 1)
y = np.array(y)

# Khởi tạo mô hình hồi quy tuyến tính


model = LinearRegression()

# Huấn luyện mô hình


model.fit(x, y)

# Lấy hệ số hồi quy


slope = model.coef_[1]
intercept = model.intercept_

# Tính toán R-squared


r_squared = model.score(x, y)

return slope, intercept, r_squared

# Ví dụ sử dụng
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [2, 3, 5, 7, 11, 13, 17, 19, 23]
slope, intercept, r_squared = simple_linear_regression(x, y)
print(f"Slope: {slope}")
print(f"Intercept: {intercept}")
print(f"R-squared: {r_squared}")

# Vẽ biểu đồ
plt.scatter(x, y, color='blue', label='Data points')
plt.plot(x, np.array(x) * slope + intercept, color='red',
label='Regression line')
plt.xlabel('X values')
plt.ylabel('Y values')
plt.title('Simple Linear Regression')
plt.legend()
plt.show()

Giải thích code


1. Import thư viện numpy, matplotlib.pyplot, và
LinearRegression từ sklearn.linear_model:
numpy: Thư viện này cung cấp các công cụ tính toán mạnh
mẽ cho các phép toán trên mảng.
matplotlib.pyplot: Thư viện này cung cấp các hàm để tạo
các biểu đồ.
LinearRegression: Mô hình hồi quy tuyến tính từ thư viện
scikit-learn.
2. Định nghĩa hàm simple_linear_regression(x, y):
Hàm nhận đầu vào là hai danh sách các số.
Chuyển đổi dữ liệu:
Chuyển đổi danh sách x thành mảng numpy và reshape
để phù hợp với mô hình scikit-learn.
Chuyển đổi danh sách y thành mảng numpy.
Khởi tạo và huấn luyện mô hình hồi quy tuyến tính:
Khởi tạo mô hình LinearRegression().
Sử dụng model.fit(x, y) để huấn luyện mô hình.
Lấy hệ số hồi quy và intercept:
model.coef_ chứa hệ số hồi quy (slope).
model.intercept_ chứa giá trị intercept.
Tính toán R-squared:
Sử dụng model.score(x, y) để tính R-squared.
Trả về các giá trị:
Trả về slope, intercept và R-squared.
3. Gọi hàm simple_linear_regression():
Gọi hàm với hai danh sách số mẫu để tính toán và in kết
quả.
4. Vẽ biểu đồ:
Sử dụng plt.scatter() để vẽ các điểm dữ liệu ban đầu.
Sử dụng plt.plot() để vẽ đường hồi quy.
Thêm nhãn và tiêu đề cho biểu đồ.
Hiển thị biểu đồ bằng plt.show().

Tóm tắt:
Sử dụng thư viện numpy và scikit-learn để thực hiện hồi quy
tuyến tính đơn giản.
Chuyển đổi dữ liệu đầu vào thành mảng numpy và reshape.
Khởi tạo và huấn luyện mô hình hồi quy tuyến tính bằng
LinearRegression().
Lấy hệ số hồi quy, intercept và tính toán R-squared.
Vẽ biểu đồ scatterplot của dữ liệu và đường hồi quy.

Chương trình thực hiện phân tích hồi quy tuyến tính đơn giản và vẽ
biểu đồ.
288 - Viết chương trình để thực hiện
phân tích hồi quy đa biến

Giải thích đề bài


Bạn cần viết một chương trình Python để thực hiện phân tích hồi
quy đa biến (multiple regression). Hồi quy đa biến là một kỹ thuật
thống kê để tìm mối quan hệ giữa một biến phụ thuộc và nhiều biến
độc lập.

Thuật toán:
Đầu vào: Một danh sách các danh sách số (biến độc lập) và một
danh sách các số (biến phụ thuộc).
Đầu ra: Hệ số hồi quy (coefficients), phương trình hồi quy, và
đánh giá hiệu suất của mô hình (R-squared).
Các bước thực hiện:
1. Nhập danh sách các danh sách số và danh sách biến phụ
thuộc.
2. Sử dụng thư viện scikit-learn để thực hiện phân tích hồi quy.
3. Hiển thị hệ số hồi quy, phương trình hồi quy, và đánh giá
hiệu suất của mô hình.

Cài đặt thư viện


Nếu chưa cài đặt thư viện cần thiết, bạn có thể sử dụng lệnh sau
trên terminal:
pip install scikit-learn numpy pandas
Code Python
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

def multiple_linear_regression(X, y):


# Chuyển đổi dữ liệu đầu vào thành mảng numpy
X = np.array(X)
y = np.array(y)

# Khởi tạo mô hình hồi quy tuyến tính


model = LinearRegression()

# Huấn luyện mô hình


model.fit(X, y)

# Lấy hệ số hồi quy và intercept


coefficients = model.coef_
intercept = model.intercept_

# Tính toán R-squared


r_squared = model.score(X, y)

return coefficients, intercept, r_squared

# Ví dụ sử dụng
X = [
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6],
[5, 6, 7],
[6, 7, 8],
[7, 8, 9],
[8, 9, 10],
[9, 10, 11]
]
y = [2, 3, 5, 7, 11, 13, 17, 19, 23]

coefficients, intercept, r_squared =


multiple_linear_regression(X, y)
print(f"Coefficients: {coefficients}")
print(f"Intercept: {intercept}")
print(f"R-squared: {r_squared}")

Giải thích code


1. Import thư viện numpy, pandas, và LinearRegression từ
sklearn.linear_model:
numpy: Thư viện này cung cấp các công cụ tính toán mạnh
mẽ cho các phép toán trên mảng.
pandas: Thư viện này cung cấp các công cụ để thao tác và
phân tích dữ liệu (không bắt buộc trong ví dụ này nhưng hữu
ích khi xử lý dữ liệu lớn).
LinearRegression: Mô hình hồi quy tuyến tính từ thư viện
scikit-learn.
2. Định nghĩa hàm multiple_linear_regression(X, y):
Hàm nhận đầu vào là một danh sách các danh sách số (biến
độc lập) và một danh sách các số (biến phụ thuộc).
Chuyển đổi dữ liệu:
Chuyển đổi danh sách X và y thành mảng numpy.
Khởi tạo và huấn luyện mô hình hồi quy tuyến tính:
Khởi tạo mô hình LinearRegression().
Sử dụng model.fit(X, y) để huấn luyện mô hình.
Lấy hệ số hồi quy và intercept:
model.coef_ chứa hệ số hồi quy.
model.intercept_ chứa giá trị intercept.
Tính toán R-squared:
Sử dụng model.score(X, y) để tính R-squared.
Trả về các giá trị:
Trả về coefficients, intercept và R-squared.
3. Gọi hàm multiple_linear_regression():
Gọi hàm với danh sách các danh sách số và danh sách biến
phụ thuộc để tính toán và in kết quả.
Tóm tắt:
Sử dụng thư viện numpy và scikit-learn để thực hiện hồi quy
đa biến.
Chuyển đổi dữ liệu đầu vào thành mảng numpy.
Khởi tạo và huấn luyện mô hình hồi quy tuyến tính bằng
LinearRegression().
Lấy hệ số hồi quy, intercept và tính toán R-squared.

Chương trình thực hiện phân tích hồi quy đa biến và hiển thị các hệ
số hồi quy, intercept và đánh giá hiệu suất của mô hình.
289 - Viết chương trình để phân tích
dữ liệu sử dụng Pandas

Giải thích đề bài


Bạn cần viết một chương trình Python để phân tích dữ liệu sử dụng
thư viện Pandas. Pandas là một thư viện mạnh mẽ cho việc thao tác
và phân tích dữ liệu.

Thuật toán:
Đầu vào: Một tệp dữ liệu (ví dụ: CSV).
Đầu ra: Các phân tích cơ bản như thống kê mô tả, xử lý dữ liệu
thiếu, và các phép toán nhóm (grouping).
Các bước thực hiện:
1. Nhập tệp dữ liệu vào DataFrame.
2. Hiển thị thông tin cơ bản và thống kê mô tả của dữ liệu.
3. Xử lý dữ liệu thiếu (nếu có).
4. Thực hiện các phép toán nhóm và tổng hợp dữ liệu.

Cài đặt thư viện


Nếu chưa cài đặt thư viện cần thiết, bạn có thể sử dụng lệnh sau
trên terminal:
pip install pandas

Code Python
Giả sử bạn có một tệp CSV với tên data.csv. Dưới đây là chương
trình phân tích dữ liệu sử dụng Pandas.
import pandas as pd

def load_data(file_path):
"""Load data from a CSV file into a Pandas DataFrame."""
df = pd.read_csv(file_path)
return df

def display_basic_info(df):
"""Display basic information and descriptive statistics
of the DataFrame."""
print("DataFrame Information:")
print(df.info())
print("\nDescriptive Statistics:")
print(df.describe())

def handle_missing_data(df):
"""Handle missing data by filling them with the mean of
each column."""
df_filled = df.fillna(df.mean())
return df_filled

def group_and_aggregate(df, group_by_column, agg_column,


agg_func):
"""Group the DataFrame by a column and aggregate using a
specified function."""
grouped_df = df.groupby(group_by_column)
[agg_column].agg(agg_func)
return grouped_df

# Load data
file_path = 'data.csv' # Đường dẫn tới tệp CSV của bạn
df = load_data(file_path)

# Display basic info and statistics


display_basic_info(df)

# Handle missing data


df_filled = handle_missing_data(df)

# Group and aggregate data


group_by_column = 'Category' # Cột để nhóm
agg_column = 'Value' # Cột để tổng hợp
agg_func = 'mean' # Hàm tổng hợp
grouped_df = group_and_aggregate(df_filled, group_by_column,
agg_column, agg_func)

print("\nGrouped and Aggregated Data:")


print(grouped_df)

Giải thích code


1. Import thư viện pandas:
pandas: Thư viện này cung cấp các công cụ để thao tác và
phân tích dữ liệu.
2. Định nghĩa hàm load_data(file_path):
Hàm này nhận đầu vào là đường dẫn tới tệp CSV.
Sử dụng pd.read_csv() để đọc tệp CSV vào DataFrame.
Trả về DataFrame.
3. Định nghĩa hàm display_basic_info(df):
Hàm này nhận đầu vào là một DataFrame.
Hiển thị thông tin cơ bản về DataFrame bằng df.info().
Hiển thị thống kê mô tả của DataFrame bằng df.describe().
4. Định nghĩa hàm handle_missing_data(df):
Hàm này nhận đầu vào là một DataFrame.
Sử dụng df.fillna(df.mean()) để thay thế các giá trị thiếu
bằng giá trị trung bình của từng cột.
Trả về DataFrame đã được xử lý dữ liệu thiếu.
5. Định nghĩa hàm group_and_aggregate(df, group_by_column,
agg_column, agg_func):
Hàm này nhận đầu vào là một DataFrame, cột để nhóm, cột
để tổng hợp, và hàm tổng hợp.
Sử dụng df.groupby(group_by_column)
[agg_column].agg(agg_func) để nhóm dữ liệu theo một cột
và tổng hợp dữ liệu theo cột khác.
Trả về DataFrame đã được nhóm và tổng hợp.
6. Chạy các hàm trên:
Đọc dữ liệu từ tệp CSV.
Hiển thị thông tin cơ bản và thống kê mô tả của dữ liệu.
Xử lý dữ liệu thiếu.
Nhóm và tổng hợp dữ liệu theo một cột và tính giá trị trung
bình của một cột khác.

Tóm tắt:
Sử dụng thư viện pandas để thao tác và phân tích dữ liệu.
Đọc dữ liệu từ tệp CSV vào DataFrame bằng pd.read_csv().
Hiển thị thông tin cơ bản và thống kê mô tả của dữ liệu.
Xử lý dữ liệu thiếu bằng cách thay thế giá trị thiếu với giá trị
trung bình của từng cột.
Nhóm và tổng hợp dữ liệu theo một cột và tính giá trị trung bình
của một cột khác.

Chương trình phân tích dữ liệu sử dụng Pandas, hiển thị thông tin
cơ bản, xử lý dữ liệu thiếu, và thực hiện các phép toán nhóm và
tổng hợp dữ liệu.
290 - Viết chương trình để phân tích
dữ liệu sử dụng Numpy

Giải thích đề bài


Bạn cần viết một chương trình Python để phân tích dữ liệu sử dụng
thư viện NumPy. NumPy là một thư viện mạnh mẽ cho các phép
toán số học và thống kê trên mảng và ma trận.

Thuật toán:
Đầu vào: Một danh sách hoặc mảng các số.
Đầu ra: Các phân tích cơ bản như giá trị trung bình, phương sai,
độ lệch chuẩn, và các phép toán khác.
Các bước thực hiện:
1. Nhập dữ liệu vào một mảng NumPy.
2. Tính toán các thống kê cơ bản (giá trị trung bình, phương
sai, độ lệch chuẩn, v.v.).
3. Hiển thị kết quả của các phép toán.

Cài đặt thư viện


Nếu chưa cài đặt thư viện cần thiết, bạn có thể sử dụng lệnh sau
trên terminal:
pip install numpy

Code Python
import numpy as np

def analyze_data(data):
# Chuyển đổi dữ liệu đầu vào thành mảng numpy
data = np.array(data)

# Tính toán các giá trị thống kê cơ bản


mean = np.mean(data)
variance = np.var(data)
std_deviation = np.std(data)
median = np.median(data)
min_value = np.min(data)
max_value = np.max(data)
sum_value = np.sum(data)

return {
"mean": mean,
"variance": variance,
"std_deviation": std_deviation,
"median": median,
"min_value": min_value,
"max_value": max_value,
"sum_value": sum_value
}

# Ví dụ sử dụng
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
statistics = analyze_data(data)

print("Data Analysis Results:")


for key, value in statistics.items():
print(f"{key}: {value}")

Giải thích code


1. Import thư viện numpy:
numpy: Thư viện này cung cấp các công cụ tính toán mạnh
mẽ cho các phép toán trên mảng.
2. Định nghĩa hàm analyze_data(data):
Hàm này nhận đầu vào là một danh sách các số.
Chuyển đổi dữ liệu:
Chuyển đổi danh sách data thành mảng numpy.
Tính toán các giá trị thống kê cơ bản:
mean: Giá trị trung bình của các phần tử trong mảng.
variance: Phương sai của các phần tử trong mảng.
std_deviation: Độ lệch chuẩn của các phần tử trong
mảng.
median: Giá trị trung vị của các phần tử trong mảng.
min_value: Giá trị nhỏ nhất trong mảng.
max_value: Giá trị lớn nhất trong mảng.
sum_value: Tổng của các phần tử trong mảng.
Trả về kết quả:
Trả về một từ điển chứa các giá trị thống kê cơ bản.
3. Gọi hàm analyze_data():
Gọi hàm với một danh sách số mẫu để tính toán và in kết
quả.
4. In kết quả:
Sử dụng vòng lặp for để in từng giá trị thống kê từ từ điển
kết quả.

Tóm tắt:
Sử dụng thư viện numpy để thao tác và phân tích dữ liệu.
Chuyển đổi dữ liệu đầu vào thành mảng numpy.
Tính toán các giá trị thống kê cơ bản như giá trị trung bình,
phương sai, độ lệch chuẩn, giá trị trung vị, giá trị nhỏ nhất, giá trị
lớn nhất, và tổng của các phần tử trong mảng.
Trả về kết quả dưới dạng từ điển và in các giá trị thống kê.

Chương trình phân tích dữ liệu sử dụng NumPy để tính toán các giá
trị thống kê cơ bản và hiển thị kết quả.
Chương 30 : Xử lý ảnh
291. Viết chương trình để đọc một ảnh từ file.
292. Viết chương trình để hiển thị một ảnh.
293. Viết chương trình để lưu một ảnh vào file.
294. Viết chương trình để chuyển đổi ảnh màu thành ảnh xám.
295. Viết chương trình để làm mờ ảnh.
296. Viết chương trình để phát hiện cạnh trong ảnh.
297. Viết chương trình để lọc ảnh.
298. Viết chương trình để thay đổi kích thước ảnh.
299. Viết chương trình để cắt ảnh.
300. Viết chương trình để xoay ảnh.
291 - Viết chương trình để đọc một
ảnh từ file

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để đọc một
ảnh từ file. Việc đọc ảnh là một bước cơ bản trong xử lý ảnh,
thường được thực hiện bằng cách sử dụng các thư viện phổ biến
như OpenCV hoặc PIL (Pillow) trong Python. Chúng ta sẽ triển khai
chương trình để có thể đọc và hiển thị ảnh từ một file cụ thể.

Thuật toán
Đầu vào: - Đường dẫn tới file ảnh (có thể là ảnh bất kỳ: PNG, JPG,
JPEG, etc.)

Đầu ra: - Hiển thị ảnh đã đọc lên màn hình hoặc có thể lưu ảnh đã
đọc vào biến để xử lý thêm.

Các bước thực hiện: 1. Cài đặt thư viện cần thiết để đọc và hiển thị
ảnh. 2. Nhập đường dẫn tới file ảnh. 3. Sử dụng thư viện để đọc ảnh
từ file. 4. Hiển thị ảnh đã đọc lên màn hình.

Cài đặt thư viện


Chúng ta sẽ sử dụng thư viện OpenCV (thư viện xử lý ảnh phổ biến)
để đọc và hiển thị ảnh. Để cài đặt OpenCV, ta sử dụng lệnh sau:
pip install opencv-python
Code Python
import cv2 # Thư viện OpenCV để xử lý ảnh

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Hiển thị ảnh sử dụng OpenCV
cv2.imshow('Displayed Image', image)

# Đợi một phím bất kỳ để đóng cửa sổ hiển thị


cv2.waitKey(0)

# Đóng tất cả các cửa sổ hiển thị


cv2.destroyAllWindows()
else:
print("Failed to load image. Check the path and file
format.")

Giải thích code


1. Import thư viện cần thiết:
import cv2: Nhập thư viện OpenCV để sử dụng các hàm
liên quan đến xử lý ảnh.
2. Đường dẫn tới file ảnh:
image_path = 'path/to/your/image.jpg': Xác định đường
dẫn tới file ảnh cần đọc. Thay 'path/to/your/image.jpg'
bằng đường dẫn thực tế của bạn.
3. Đọc ảnh từ file:
image = cv2.imread(image_path): Sử dụng hàm cv2.imread
để đọc ảnh từ file. Hàm này trả về một đối tượng ảnh nếu
thành công hoặc None nếu thất bại.
4. Kiểm tra và hiển thị ảnh:
if image is not None: Kiểm tra xem việc đọc ảnh có thành
công không.
cv2.imshow('Displayed Image', image): Hiển thị ảnh
trong một cửa sổ mới với tên ‘Displayed Image’.
cv2.waitKey(0): Đợi người dùng nhấn phím bất kỳ để
đóng cửa sổ.
cv2.destroyAllWindows(): Đóng tất cả các cửa sổ hiển
thị ảnh.
5. Xử lý lỗi:
else: print("Failed to load image. Check the path and
file format."): Thông báo lỗi nếu ảnh không được đọc
thành công.

Bổ sung
Một cách khác để đọc và hiển thị ảnh là sử dụng thư viện PIL
(Pillow).
from PIL import Image # Thư viện Pillow để xử lý ảnh

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


try:
image = Image.open(image_path)
image.show() # Hiển thị ảnh sử dụng PIL
except Exception as e:
print(f"Failed to load image: {e}")

Tóm tắt
import cv2: Sử dụng thư viện OpenCV để xử lý ảnh.
cv2.imread(): Đọc ảnh từ file.
cv2.imshow(): Hiển thị ảnh trên màn hình.
cv2.waitKey(): Đợi người dùng nhấn phím bất kỳ để tiếp tục.
cv2.destroyAllWindows(): Đóng tất cả các cửa sổ hiển thị.
Chương trình này giúp bạn đọc và hiển thị ảnh từ file sử dụng thư
viện OpenCV trong Python.
292 - Viết chương trình để hiển thị
một ảnh
Để hiển thị một ảnh trong Python, chúng ta có thể sử dụng các thư
viện phổ biến như OpenCV, PIL (Pillow) hoặc matplotlib. Trong phần
này, tôi sẽ trình bày cách sử dụng hai thư viện thông dụng là
OpenCV và matplotlib để hiển thị một ảnh.

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để hiển thị
một ảnh từ file. Việc này thường được thực hiện khi cần kiểm tra
trực quan ảnh trước khi thực hiện các bước xử lý hoặc phân tích
ảnh tiếp theo.

Thuật toán
Đầu vào: - Đường dẫn tới file ảnh.

Đầu ra: - Cửa sổ hiển thị ảnh trên màn hình.

Các bước thực hiện: 1. Chọn thư viện phù hợp để hiển thị ảnh. 2.
Nhập đường dẫn tới file ảnh. 3. Đọc ảnh từ file. 4. Hiển thị ảnh sử
dụng thư viện đã chọn.

Cài đặt thư viện


Tùy thuộc vào thư viện bạn muốn sử dụng, bạn có thể cài đặt các
thư viện sau:

OpenCV:
pip install opencv-python
Matplotlib:
pip install matplotlib

Code Python

Cách 1: Sử dụng OpenCV


import cv2 # Thư viện OpenCV để xử lý ảnh

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Hiển thị ảnh sử dụng OpenCV
cv2.imshow('Displayed Image', image)

# Đợi một phím bất kỳ để đóng cửa sổ hiển thị


cv2.waitKey(0)

# Đóng tất cả các cửa sổ hiển thị


cv2.destroyAllWindows()
else:
print("Failed to load image. Check the path and file
format.")

Cách 2: Sử dụng Matplotlib


import matplotlib.pyplot as plt # Thư viện Matplotlib để
hiển thị ảnh
import matplotlib.image as mpimg # Thư viện hỗ trợ đọc ảnh
từ file

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


image = mpimg.imread(image_path)

# Hiển thị ảnh sử dụng Matplotlib


plt.imshow(image)
plt.axis('off') # Ẩn trục tọa độ
plt.show()

Giải thích code

Cách 1: Sử dụng OpenCV


1. Import thư viện cần thiết:
import cv2: Nhập thư viện OpenCV để sử dụng các hàm xử
lý ảnh.
2. Đường dẫn tới file ảnh:
image_path = 'path/to/your/image.jpg': Xác định đường
dẫn tới file ảnh cần hiển thị.
3. Đọc ảnh từ file:
image = cv2.imread(image_path): Đọc ảnh từ file và lưu vào
biến image.
4. Kiểm tra và hiển thị ảnh:
if image is not None: Kiểm tra xem việc đọc ảnh có thành
công không.
cv2.imshow('Displayed Image', image): Hiển thị ảnh
trong một cửa sổ với tên ‘Displayed Image’.
cv2.waitKey(0): Đợi người dùng nhấn phím bất kỳ để
tiếp tục.
cv2.destroyAllWindows(): Đóng tất cả các cửa sổ hiển
thị.
5. Xử lý lỗi:
else: print("Failed to load image. Check the path and
file format."): Thông báo nếu không thể đọc ảnh.
Cách 2: Sử dụng Matplotlib
1. Import thư viện cần thiết:
import matplotlib.pyplot as plt: Nhập thư viện Matplotlib
để hiển thị ảnh.
import matplotlib.image as mpimg: Nhập phần hỗ trợ đọc
ảnh của Matplotlib.
2. Đường dẫn tới file ảnh:
image_path = 'path/to/your/image.jpg': Xác định đường
dẫn tới file ảnh cần hiển thị.
3. Đọc ảnh từ file:
image = mpimg.imread(image_path): Đọc ảnh từ file và lưu
vào biến image.
4. Hiển thị ảnh:
plt.imshow(image): Hiển thị ảnh sử dụng Matplotlib.
plt.axis('off'): Ẩn trục tọa độ để chỉ hiển thị ảnh.
plt.show(): Hiển thị cửa sổ chứa ảnh.

Bổ sung
Cách 3: Sử dụng PIL (Pillow):
from PIL import Image # Thư viện Pillow để xử lý ảnh

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


try:
image = Image.open(image_path)
image.show() # Hiển thị ảnh sử dụng PIL
except Exception as e:
print(f"Failed to load image: {e}")
Tóm tắt
import cv2: Sử dụng thư viện OpenCV để xử lý và hiển thị ảnh.
cv2.imread(): Đọc ảnh từ file với OpenCV.
cv2.imshow(): Hiển thị ảnh trên màn hình với OpenCV.
cv2.waitKey(): Đợi người dùng nhấn phím bất kỳ để tiếp tục với
OpenCV.
cv2.destroyAllWindows(): Đóng tất cả các cửa sổ hiển thị với
OpenCV.
import matplotlib.pyplot: Sử dụng Matplotlib để hiển thị ảnh.
mpimg.imread(): Đọc ảnh từ file với Matplotlib.
plt.imshow(): Hiển thị ảnh với Matplotlib.
plt.show(): Hiển thị cửa sổ chứa ảnh với Matplotlib.
plt.axis(‘off’): Ẩn trục tọa độ khi hiển thị ảnh với Matplotlib.
Chương trình này giúp bạn hiển thị một ảnh từ file sử dụng các thư
viện phổ biến trong Python như OpenCV và Matplotlib.
293 - Viết chương trình để lưu một
ảnh vào file
Để lưu một ảnh vào file bằng Python, chúng ta có thể sử dụng các
thư viện phổ biến như OpenCV hoặc PIL (Pillow). Dưới đây, tôi sẽ
trình bày cách sử dụng cả hai thư viện này để lưu một ảnh vào file.

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để lưu một
ảnh vào file. Việc này thường được sử dụng sau khi xử lý ảnh, như
chỉnh sửa, nén, hoặc áp dụng các hiệu ứng đặc biệt và cần lưu kết
quả vào file để sử dụng sau.

Thuật toán
Đầu vào: - Một ảnh đã được nạp vào bộ nhớ (hoặc đọc từ file trước
đó). - Đường dẫn và tên file nơi ảnh sẽ được lưu.

Đầu ra: - Ảnh được lưu vào file với đường dẫn đã chỉ định.

Các bước thực hiện: 1. Chọn thư viện phù hợp để lưu ảnh. 2. Nạp
hoặc tạo ảnh trong bộ nhớ. 3. Xác định đường dẫn và tên file để lưu
ảnh. 4. Sử dụng thư viện đã chọn để lưu ảnh vào file.

Cài đặt thư viện


Tùy thuộc vào thư viện bạn muốn sử dụng, bạn có thể cài đặt các
thư viện sau:

OpenCV:
pip install opencv-python
Pillow:
pip install pillow

Code Python

Cách 1: Sử dụng OpenCV


import cv2 # Thư viện OpenCV để xử lý ảnh

# Đường dẫn tới file ảnh cần đọc


input_image_path = 'path/to/your/input_image.jpg'

# Đọc ảnh từ file


image = cv2.imread(input_image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Đường dẫn và tên file để lưu ảnh
output_image_path = 'path/to/your/output_image.jpg'

# Lưu ảnh vào file sử dụng OpenCV


cv2.imwrite(output_image_path, image)

print(f"Image saved successfully at {output_image_path}")


else:
print("Failed to load image. Check the input path and
file format.")

Cách 2: Sử dụng Pillow


from PIL import Image # Thư viện Pillow để xử lý ảnh

# Đường dẫn tới file ảnh cần đọc


input_image_path = 'path/to/your/input_image.jpg'

try:
# Đọc ảnh từ file
image = Image.open(input_image_path)

# Đường dẫn và tên file để lưu ảnh


output_image_path = 'path/to/your/output_image.png'

# Lưu ảnh vào file sử dụng Pillow


image.save(output_image_path)

print(f"Image saved successfully at {output_image_path}")


except Exception as e:
print(f"Failed to load or save image: {e}")

Giải thích code

Cách 1: Sử dụng OpenCV


1. Import thư viện cần thiết:
import cv2: Nhập thư viện OpenCV để sử dụng các hàm xử
lý ảnh.
2. Đường dẫn tới file ảnh cần đọc:
input_image_path = 'path/to/your/input_image.jpg': Xác
định đường dẫn tới file ảnh cần đọc.
3. Đọc ảnh từ file:
image = cv2.imread(input_image_path): Đọc ảnh từ file và
lưu vào biến image.
4. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra xem ảnh có được đọc thành
công hay không.
Nếu thành công:
output_image_path =
'path/to/your/output_image.jpg': Xác định đường
dẫn và tên file để lưu ảnh.
cv2.imwrite(output_image_path, image): Sử dụng
OpenCV để lưu ảnh vào file.
print(f"Image saved successfully at
{output_image_path}"): Thông báo thành công.
Nếu thất bại:
print("Failed to load image. Check the input
path and file format."): Thông báo lỗi.

Cách 2: Sử dụng Pillow


1. Import thư viện cần thiết:
from PIL import Image: Nhập thư viện Pillow để xử lý ảnh.
2. Đường dẫn tới file ảnh cần đọc:
input_image_path = 'path/to/your/input_image.jpg': Xác
định đường dẫn tới file ảnh cần đọc.
3. Đọc ảnh từ file:
image = Image.open(input_image_path): Đọc ảnh từ file và
lưu vào biến image.
4. Xác định đường dẫn và tên file để lưu ảnh:
output_image_path = 'path/to/your/output_image.png':
Xác định đường dẫn và tên file để lưu ảnh.
5. Lưu ảnh vào file:
image.save(output_image_path): Sử dụng Pillow để lưu ảnh
vào file.
print(f"Image saved successfully at
{output_image_path}"): Thông báo thành công.
6. Xử lý lỗi:
except Exception as e: Bắt lỗi nếu xảy ra bất kỳ vấn đề gì
trong quá trình đọc hoặc lưu ảnh.
print(f"Failed to load or save image: {e}"): Thông báo
lỗi.

Bổ sung
Cách 3: Sử dụng matplotlib:
import matplotlib.pyplot as plt # Thư viện Matplotlib để
hiển thị và lưu ảnh
import matplotlib.image as mpimg # Thư viện hỗ trợ đọc
ảnh từ file

# Đường dẫn tới file ảnh cần đọc


input_image_path = 'path/to/your/input_image.jpg'

# Đọc ảnh từ file


image = mpimg.imread(input_image_path)

# Đường dẫn và tên file để lưu ảnh


output_image_path = 'path/to/your/output_image.png'

# Lưu ảnh vào file sử dụng Matplotlib


plt.imsave(output_image_path, image)

print(f"Image saved successfully at {output_image_path}")

Tóm tắt
import cv2: Sử dụng OpenCV để xử lý và lưu ảnh.
cv2.imread(): Đọc ảnh từ file với OpenCV.
cv2.imwrite(): Lưu ảnh vào file với OpenCV.
from PIL import Image: Sử dụng Pillow để xử lý và lưu ảnh.
Image.open(): Đọc ảnh từ file với Pillow.
Image.save(): Lưu ảnh vào file với Pillow.
import matplotlib.pyplot: Sử dụng Matplotlib để hiển thị và lưu
ảnh.
mpimg.imread(): Đọc ảnh từ file với Matplotlib.
plt.imsave(): Lưu ảnh vào file với Matplotlib.
Chương trình này giúp bạn lưu một ảnh vào file sử dụng các thư
viện phổ biến trong Python như OpenCV, Pillow và Matplotlib.
294 - Viết chương trình để chuyển đổi
ảnh màu thành ảnh xám
Chuyển đổi một ảnh màu thành ảnh xám là một bước cơ bản và
quan trọng trong xử lý ảnh. Việc này giúp giảm kích thước dữ liệu và
đơn giản hóa quá trình phân tích mà vẫn giữ lại được các thông tin
cần thiết của ảnh.

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để chuyển
đổi một ảnh màu thành ảnh xám. Một ảnh màu thường có 3 kênh
màu (đỏ, lục, lam - RGB), trong khi ảnh xám chỉ có một kênh, với
mỗi pixel đại diện cho độ sáng từ đen đến trắng.

Thuật toán
Đầu vào: - Đường dẫn tới file ảnh màu cần chuyển đổi.

Đầu ra: - Ảnh xám được lưu vào file hoặc hiển thị trên màn hình.

Các bước thực hiện: 1. Chọn thư viện phù hợp để đọc và chuyển
đổi ảnh. 2. Nhập đường dẫn tới file ảnh màu. 3. Đọc ảnh màu từ file.
4. Chuyển đổi ảnh màu thành ảnh xám. 5. Hiển thị hoặc lưu ảnh
xám.

Cài đặt thư viện


Bạn có thể sử dụng các thư viện sau để thực hiện yêu cầu này:

OpenCV:
pip install opencv-python
Pillow:
pip install pillow

Matplotlib (nếu muốn hiển thị ảnh):


pip install matplotlib

Code Python
Dưới đây là các cách thực hiện chuyển đổi ảnh màu thành ảnh xám
sử dụng OpenCV và Pillow.

Cách 1: Sử dụng OpenCV


import cv2 # Thư viện OpenCV để xử lý ảnh

# Đường dẫn tới file ảnh màu


image_path = 'path/to/your/color_image.jpg'

# Đọc ảnh màu từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Chuyển đổi ảnh màu thành ảnh xám
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Hiển thị ảnh xám


cv2.imshow('Grayscale Image', gray_image)

# Lưu ảnh xám vào file


gray_image_path = 'path/to/your/gray_image.jpg'
cv2.imwrite(gray_image_path, gray_image)

# Đợi một phím bất kỳ để đóng cửa sổ hiển thị


cv2.waitKey(0)
cv2.destroyAllWindows()
print(f"Grayscale image saved successfully at
{gray_image_path}")
else:
print("Failed to load image. Check the input path and
file format.")

Cách 2: Sử dụng Pillow


from PIL import Image # Thư viện Pillow để xử lý ảnh

# Đường dẫn tới file ảnh màu


image_path = 'path/to/your/color_image.jpg'

try:
# Đọc ảnh màu từ file
image = Image.open(image_path)

# Chuyển đổi ảnh màu thành ảnh xám


gray_image = image.convert('L')

# Hiển thị ảnh xám


gray_image.show()

# Lưu ảnh xám vào file


gray_image_path = 'path/to/your/gray_image.png'
gray_image.save(gray_image_path)

print(f"Grayscale image saved successfully at


{gray_image_path}")
except Exception as e:
print(f"Failed to load or convert image: {e}")

Giải thích code

Cách 1: Sử dụng OpenCV


1. Import thư viện cần thiết:
import cv2: Nhập thư viện OpenCV để sử dụng các hàm xử
lý ảnh.
2. Đường dẫn tới file ảnh màu:
image_path = 'path/to/your/color_image.jpg': Xác định
đường dẫn tới file ảnh màu.
3. Đọc ảnh màu từ file:
image = cv2.imread(image_path): Đọc ảnh màu từ file và
lưu vào biến image.
4. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra xem ảnh có được đọc thành
công hay không.
Nếu thành công:
gray_image = cv2.cvtColor(image,
cv2.COLOR_BGR2GRAY): Chuyển đổi ảnh màu sang ảnh
xám sử dụng hàm cv2.cvtColor với cờ
cv2.COLOR_BGR2GRAY.
cv2.imshow('Grayscale Image', gray_image): Hiển
thị ảnh xám trong một cửa sổ với tên ‘Grayscale
Image’.
gray_image_path =
'path/to/your/gray_image.jpg': Xác định đường
dẫn và tên file để lưu ảnh xám.
cv2.imwrite(gray_image_path, gray_image): Lưu
ảnh xám vào file.
cv2.waitKey(0): Đợi người dùng nhấn phím bất kỳ
để đóng cửa sổ.
cv2.destroyAllWindows(): Đóng tất cả các cửa sổ
hiển thị.
print(f"Grayscale image saved successfully at
{gray_image_path}"): Thông báo thành công.
Nếu thất bại:
print("Failed to load image. Check the input
path and file format."): Thông báo lỗi.
Cách 2: Sử dụng Pillow
1. Import thư viện cần thiết:
from PIL import Image: Nhập thư viện Pillow để sử dụng
các hàm xử lý ảnh.
2. Đường dẫn tới file ảnh màu:
image_path = 'path/to/your/color_image.jpg': Xác định
đường dẫn tới file ảnh màu.
3. Đọc ảnh màu từ file:
image = Image.open(image_path): Đọc ảnh màu từ file và
lưu vào biến image.
4. Chuyển đổi ảnh màu thành ảnh xám:
gray_image = image.convert('L'): Chuyển đổi ảnh màu
sang ảnh xám sử dụng phương thức convert với tham số
'L'.
5. Hiển thị ảnh xám:
gray_image.show(): Hiển thị ảnh xám sử dụng Pillow.
6. Lưu ảnh xám vào file:
gray_image_path = 'path/to/your/gray_image.png': Xác
định đường dẫn và tên file để lưu ảnh xám.
gray_image.save(gray_image_path): Lưu ảnh xám vào file.
print(f"Grayscale image saved successfully at
{gray_image_path}"): Thông báo thành công.
7. Xử lý lỗi:
except Exception as e: Bắt lỗi nếu xảy ra bất kỳ vấn đề gì
trong quá trình đọc hoặc chuyển đổi ảnh.
print(f"Failed to load or convert image: {e}"): Thông
báo lỗi.

Bổ sung
Cách 3: Sử dụng matplotlib để hiển thị ảnh xám:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# Đường dẫn tới file ảnh màu
image_path = 'path/to/your/color_image.jpg'

# Đọc ảnh màu từ file


image = mpimg.imread(image_path)

# Chuyển đổi ảnh màu thành ảnh xám


gray_image = image.mean(axis=2) # Tính trung bình theo
trục màu

# Hiển thị ảnh xám


plt.imshow(gray_image, cmap='gray')
plt.axis('off') # Ẩn trục tọa độ
plt.show()

Tóm tắt
import cv2: Sử dụng OpenCV để xử lý và chuyển đổi ảnh.
cv2.imread(): Đọc ảnh từ file với OpenCV.
cv2.cvtColor(): Chuyển đổi ảnh màu sang ảnh xám với
OpenCV.
cv2.imshow(): Hiển thị ảnh trên màn hình với OpenCV.
cv2.imwrite(): Lưu ảnh vào file với OpenCV.
from PIL import Image: Sử dụng Pillow để xử lý và chuyển đổi
ảnh.
Image.open(): Đọc ảnh từ file với Pillow.
Image.convert(): Chuyển đổi ảnh màu sang ảnh xám với Pillow.
Image.show(): Hiển thị ảnh trên màn hình với Pillow.
Image.save(): Lưu ảnh vào file với Pillow.
import matplotlib.pyplot: Sử dụng Matplotlib để hiển thị ảnh.
mpimg.imread(): Đọc ảnh từ file với Matplotlib.
plt.imshow(): Hiển thị ảnh với Matplotlib.
Chương trình này giúp bạn chuyển đổi một ảnh màu thành ảnh xám
sử dụng các thư viện phổ biến trong Python như OpenCV, Pillow và
Matplotlib.
295 - Viết chương trình để làm mờ
ảnh
Để làm mờ một ảnh trong Python, chúng ta có thể sử dụng các thư
viện phổ biến như OpenCV hoặc Pillow. Việc làm mờ ảnh (blurring)
là một trong những kỹ thuật cơ bản trong xử lý ảnh, giúp giảm nhiễu
và tạo hiệu ứng mờ trên ảnh.

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để làm mờ
một ảnh. Làm mờ ảnh có thể được thực hiện thông qua nhiều
phương pháp khác nhau như làm mờ Gaussian, làm mờ trung bình,
làm mờ qua bộ lọc median, v.v. Mỗi phương pháp đều có cách thức
và đặc điểm riêng.

Thuật toán
Đầu vào: - Đường dẫn tới file ảnh cần làm mờ. - Thông số độ mờ
(tùy chọn).

Đầu ra: - Ảnh đã được làm mờ được lưu vào file hoặc hiển thị trên
màn hình.

Các bước thực hiện: 1. Chọn thư viện phù hợp để đọc và làm mờ
ảnh. 2. Nhập đường dẫn tới file ảnh. 3. Đọc ảnh từ file. 4. Chọn
phương pháp làm mờ. 5. Áp dụng phương pháp làm mờ lên ảnh. 6.
Hiển thị hoặc lưu ảnh đã làm mờ.

Cài đặt thư viện


Bạn có thể sử dụng các thư viện sau để thực hiện yêu cầu này:
OpenCV:
pip install opencv-python

Pillow:
pip install pillow

Code Python
Dưới đây là các cách thực hiện làm mờ ảnh sử dụng OpenCV và
Pillow.

Cách 1: Sử dụng OpenCV


import cv2 # Thư viện OpenCV để xử lý ảnh

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Chọn kích thước kernel cho bộ lọc làm mờ (ví dụ: 15x15)
kernel_size = (15, 15)

# Làm mờ ảnh sử dụng bộ lọc Gaussian


blurred_image = cv2.GaussianBlur(image, kernel_size, 0)

# Hiển thị ảnh gốc và ảnh đã làm mờ


cv2.imshow('Original Image', image)
cv2.imshow('Blurred Image', blurred_image)

# Lưu ảnh đã làm mờ vào file


blurred_image_path = 'path/to/your/blurred_image.jpg'
cv2.imwrite(blurred_image_path, blurred_image)
# Đợi một phím bất kỳ để đóng cửa sổ hiển thị
cv2.waitKey(0)
cv2.destroyAllWindows()

print(f"Blurred image saved successfully at


{blurred_image_path}")
else:
print("Failed to load image. Check the input path and
file format.")

Cách 2: Sử dụng Pillow


from PIL import Image, ImageFilter # Thư viện Pillow để xử
lý ảnh

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

try:
# Đọc ảnh từ file
image = Image.open(image_path)

# Làm mờ ảnh sử dụng bộ lọc Gaussian


blurred_image =
image.filter(ImageFilter.GaussianBlur(radius=5))

# Hiển thị ảnh gốc và ảnh đã làm mờ


image.show(title='Original Image')
blurred_image.show(title='Blurred Image')

# Lưu ảnh đã làm mờ vào file


blurred_image_path = 'path/to/your/blurred_image.png'
blurred_image.save(blurred_image_path)

print(f"Blurred image saved successfully at


{blurred_image_path}")
except Exception as e:
print(f"Failed to load or process image: {e}")
Giải thích code

Cách 1: Sử dụng OpenCV


1. Import thư viện cần thiết:
import cv2: Nhập thư viện OpenCV để sử dụng các hàm xử
lý ảnh.
2. Đường dẫn tới file ảnh:
image_path = 'path/to/your/image.jpg': Xác định đường
dẫn tới file ảnh cần làm mờ.
3. Đọc ảnh từ file:
image = cv2.imread(image_path): Đọc ảnh từ file và lưu vào
biến image.
4. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra xem ảnh có được đọc thành
công hay không.
Nếu thành công:
kernel_size = (15, 15): Xác định kích thước kernel
cho bộ lọc làm mờ (ở đây là 15x15).
blurred_image = cv2.GaussianBlur(image,
kernel_size, 0): Áp dụng bộ lọc Gaussian Blur lên
ảnh.
cv2.imshow('Original Image', image): Hiển thị ảnh
gốc.
cv2.imshow('Blurred Image', blurred_image): Hiển
thị ảnh đã làm mờ.
blurred_image_path =
'path/to/your/blurred_image.jpg': Xác định đường
dẫn và tên file để lưu ảnh đã làm mờ.
cv2.imwrite(blurred_image_path, blurred_image):
Lưu ảnh đã làm mờ vào file.
cv2.waitKey(0): Đợi người dùng nhấn phím bất kỳ
để đóng cửa sổ.
cv2.destroyAllWindows(): Đóng tất cả các cửa sổ
hiển thị.
print(f"Blurred image saved successfully at
{blurred_image_path}"): Thông báo thành công.
Nếu thất bại:
print("Failed to load image. Check the input
path and file format."): Thông báo lỗi.

Cách 2: Sử dụng Pillow


1. Import thư viện cần thiết:
from PIL import Image, ImageFilter: Nhập thư viện Pillow
và các module để xử lý và làm mờ ảnh.
2. Đường dẫn tới file ảnh:
image_path = 'path/to/your/image.jpg': Xác định đường
dẫn tới file ảnh cần làm mờ.
3. Đọc ảnh từ file:
image = Image.open(image_path): Đọc ảnh từ file và lưu vào
biến image.
4. Làm mờ ảnh:
blurred_image =
image.filter(ImageFilter.GaussianBlur(radius=5)): Áp
dụng bộ lọc Gaussian Blur với bán kính 5 lên ảnh.
5. Hiển thị ảnh gốc và ảnh đã làm mờ:
image.show(title='Original Image'): Hiển thị ảnh gốc.
blurred_image.show(title='Blurred Image'): Hiển thị ảnh
đã làm mờ.
6. Lưu ảnh đã làm mờ vào file:
blurred_image_path = 'path/to/your/blurred_image.png':
Xác định đường dẫn và tên file để lưu ảnh đã làm mờ.
blurred_image.save(blurred_image_path): Lưu ảnh đã làm
mờ vào file.
print(f"Blurred image saved successfully at
{blurred_image_path}"): Thông báo thành công.
7. Xử lý lỗi:
except Exception as e: Bắt lỗi nếu xảy ra bất kỳ vấn đề gì
trong quá trình đọc hoặc xử lý ảnh.
print(f"Failed to load or process image: {e}"): Thông
báo lỗi.

Bổ sung
Cách 3: Sử dụng OpenCV với các loại làm mờ khác nhau:
import cv2

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

if image is not None:


# Làm mờ trung bình
average_blurred = cv2.blur(image, (15, 15))

# Làm mờ Gaussian
gaussian_blurred = cv2.GaussianBlur(image, (15, 15),
0)

# Làm mờ bằng bộ lọc median


median_blurred = cv2.medianBlur(image, 15)

# Hiển thị tất cả các ảnh


cv2.imshow('Original Image', image)
cv2.imshow('Average Blurred Image', average_blurred)
cv2.imshow('Gaussian Blurred Image',
gaussian_blurred)
cv2.imshow('Median Blurred Image', median_blurred)

cv2.waitKey(0)
cv2.destroyAllWindows()
print("Displayed all blurred versions successfully.")
else:
print("Failed to load image. Check the input path and
file format.")

Tóm tắt
import cv2: Sử dụng OpenCV để xử lý và làm mờ ảnh.
cv2.imread(): Đọc ảnh từ file với OpenCV.
cv2.GaussianBlur(): Áp dụng bộ lọc Gaussian Blur với
OpenCV.
cv2.imshow(): Hiển thị ảnh trên màn hình với OpenCV.
cv2.imwrite(): Lưu ảnh vào file với OpenCV.
from PIL import Image, ImageFilter: Sử dụng Pillow để xử lý
và làm mờ ảnh.
Image.open(): Đọc ảnh từ file với Pillow.
Image.filter(): Áp dụng bộ lọc Gaussian Blur với Pillow.
Image.show(): Hiển thị ảnh trên màn hình với Pillow.
Image.save(): Lưu ảnh vào file với Pillow.
Chương trình này giúp bạn làm mờ một ảnh sử dụng các thư viện
phổ biến trong Python như OpenCV và Pillow.
296 - Viết chương trình để phát hiện
cạnh trong ảnh
Phát hiện cạnh là một kỹ thuật quan trọng trong xử lý ảnh, giúp làm
nổi bật các biên, đường viền của đối tượng trong ảnh. Một trong
những phương pháp phổ biến nhất để phát hiện cạnh là sử dụng bộ
lọc Sobel hoặc phương pháp Canny.

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để phát hiện
cạnh trong ảnh. Điều này có nghĩa là chúng ta sẽ xác định và làm
nổi bật các khu vực trong ảnh nơi cường độ màu thay đổi mạnh,
thường là các cạnh của các đối tượng.

Thuật toán
Đầu vào: - Đường dẫn tới file ảnh cần phát hiện cạnh.

Đầu ra: - Ảnh với các cạnh được phát hiện được lưu vào file hoặc
hiển thị trên màn hình.

Các bước thực hiện: 1. Chọn thư viện phù hợp để đọc và phát
hiện cạnh trong ảnh. 2. Nhập đường dẫn tới file ảnh. 3. Đọc ảnh từ
file. 4. Chuyển đổi ảnh màu sang ảnh xám để đơn giản hóa xử lý. 5.
Áp dụng bộ lọc phát hiện cạnh (Sobel hoặc Canny). 6. Hiển thị hoặc
lưu ảnh đã phát hiện cạnh.

Cài đặt thư viện


Chúng ta có thể sử dụng OpenCV để thực hiện yêu cầu này:

OpenCV:
pip install opencv-python

Code Python
Dưới đây là các cách thực hiện phát hiện cạnh sử dụng OpenCV với
phương pháp Sobel và Canny.

Cách 1: Sử dụng phương pháp Canny với


OpenCV
import cv2 # Thư viện OpenCV để xử lý ảnh

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Chuyển đổi ảnh màu sang ảnh xám
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Áp dụng bộ lọc Canny để phát hiện cạnh


edges = cv2.Canny(gray_image, threshold1=100,
threshold2=200)

# Hiển thị ảnh gốc và ảnh đã phát hiện cạnh


cv2.imshow('Original Image', image)
cv2.imshow('Edge Detected Image', edges)

# Lưu ảnh đã phát hiện cạnh vào file


edges_image_path = 'path/to/your/edges_image.jpg'
cv2.imwrite(edges_image_path, edges)

# Đợi một phím bất kỳ để đóng cửa sổ hiển thị


cv2.waitKey(0)
cv2.destroyAllWindows()
print(f"Edge detected image saved successfully at
{edges_image_path}")
else:
print("Failed to load image. Check the input path and
file format.")

Cách 2: Sử dụng bộ lọc Sobel với OpenCV


import cv2 # Thư viện OpenCV để xử lý ảnh
import numpy as np # Thư viện NumPy để xử lý ma trận

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Chuyển đổi ảnh màu sang ảnh xám
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Áp dụng bộ lọc Sobel để phát hiện cạnh theo hướng x và


y
sobel_x = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0,
ksize=5)
sobel_y = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1,
ksize=5)

# Kết hợp các cạnh theo hướng x và y


sobel_combined = np.sqrt(sobel_x**2 + sobel_y**2)
sobel_combined = cv2.convertScaleAbs(sobel_combined)

# Hiển thị ảnh gốc và ảnh đã phát hiện cạnh


cv2.imshow('Original Image', image)
cv2.imshow('Sobel Edge Detected Image', sobel_combined)

# Lưu ảnh đã phát hiện cạnh vào file


sobel_edges_image_path =
'path/to/your/sobel_edges_image.jpg'
cv2.imwrite(sobel_edges_image_path, sobel_combined)

# Đợi một phím bất kỳ để đóng cửa sổ hiển thị


cv2.waitKey(0)
cv2.destroyAllWindows()

print(f"Sobel edge detected image saved successfully at


{sobel_edges_image_path}")
else:
print("Failed to load image. Check the input path and
file format.")

Giải thích code

Cách 1: Sử dụng phương pháp Canny với


OpenCV
1. Import thư viện cần thiết:
import cv2: Nhập thư viện OpenCV để sử dụng các hàm xử
lý ảnh.
2. Đường dẫn tới file ảnh:
image_path = 'path/to/your/image.jpg': Xác định đường
dẫn tới file ảnh cần phát hiện cạnh.
3. Đọc ảnh từ file:
image = cv2.imread(image_path): Đọc ảnh từ file và lưu vào
biến image.
4. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra xem ảnh có được đọc thành
công hay không.
Nếu thành công:
gray_image = cv2.cvtColor(image,
cv2.COLOR_BGR2GRAY): Chuyển đổi ảnh màu sang ảnh
xám.
edges = cv2.Canny(gray_image, threshold1=100,
threshold2=200): Áp dụng bộ lọc Canny để phát hiện
cạnh với các ngưỡng 100 và 200.
cv2.imshow('Original Image', image): Hiển thị ảnh
gốc.
cv2.imshow('Edge Detected Image', edges): Hiển
thị ảnh đã phát hiện cạnh.
edges_image_path =
'path/to/your/edges_image.jpg': Xác định đường
dẫn và tên file để lưu ảnh đã phát hiện cạnh.
cv2.imwrite(edges_image_path, edges): Lưu ảnh đã
phát hiện cạnh vào file.
cv2.waitKey(0): Đợi người dùng nhấn phím bất kỳ
để đóng cửa sổ.
cv2.destroyAllWindows(): Đóng tất cả các cửa sổ
hiển thị.
print(f"Edge detected image saved successfully
at {edges_image_path}"): Thông báo thành công.
Nếu thất bại:
print("Failed to load image. Check the input
path and file format."): Thông báo lỗi.

Cách 2: Sử dụng bộ lọc Sobel với OpenCV


1. Import thư viện cần thiết:
import cv2: Nhập thư viện OpenCV để sử dụng các hàm xử
lý ảnh.
import numpy as np: Nhập thư viện NumPy để sử dụng các
hàm xử lý ma trận.
2. Đường dẫn tới file ảnh:
image_path = 'path/to/your/image.jpg': Xác định đường
dẫn tới file ảnh cần phát hiện cạnh.
3. Đọc ảnh từ file:
image = cv2.imread(image_path): Đọc ảnh từ file và lưu vào
biến image.
4. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra xem ảnh có được đọc thành
công hay không.
Nếu thành công:
gray_image = cv2.cvtColor(image,
cv2.COLOR_BGR2GRAY): Chuyển đổi ảnh màu sang ảnh
xám.
sobel_x = cv2.Sobel(gray_image, cv2.CV_64F, 1,
0, ksize=5):Áp dụng bộ lọc Sobel để phát hiện
cạnh theo hướng x với kích thước kernel 5x5.
sobel_y = cv2.Sobel(gray_image, cv2.CV_64F, 0,
1, ksize=5):Áp dụng bộ lọc Sobel để phát hiện
cạnh theo hướng y với kích thước kernel 5x5.
sobel_combined = np.sqrt(sobel_x**2 +
sobel_y**2): Kết hợp các cạnh theo hướng x và y.
sobel_combined =
cv2.convertScaleAbs(sobel_combined): Chuyển đổi
kết quả về kiểu dữ liệu phù hợp để hiển thị.
cv2.imshow('Original Image', image): Hiển thị ảnh
gốc.
cv2.imshow('Sobel Edge Detected Image',
sobel_combined): Hiển thị ảnh đã phát hiện cạnh.
sobel_edges_image_path =
'path/to/your/sobel_edges_image.jpg': Xác định
đường dẫn và tên file để lưu ảnh đã phát hiện cạnh.
cv2.imwrite(sobel_edges_image_path,
sobel_combined): Lưu ảnh đã phát hiện cạnh vào
file.
cv2.waitKey(0): Đợi người dùng nhấn phím bất kỳ
để đóng cửa sổ.
cv2.destroyAllWindows(): Đóng tất cả các cửa sổ
hiển thị.
print(f"Sobel edge detected image saved
successfully at {sobel_edges_image_path}"):
Thông báo thành công.
Nếu thất bại:
print("Failed to load image. Check the input
path and file format."): Thông báo lỗi.

Bổ sung
Cách 3: Sử dụng phương pháp Laplacian với OpenCV:
import cv2

# Đường dẫn tới file ảnh


image_path = 'path/to/your/image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

if image is not None:


# Chuyển đổi ảnh màu sang ảnh xám
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Áp dụng bộ lọc Laplacian để phát hiện cạnh


laplacian_edges = cv2.Laplacian(gray_image,
cv2.CV_64F)
laplacian_edges =
cv2.convertScaleAbs(laplacian_edges)

# Hiển thị ảnh gốc và ảnh đã phát hiện cạnh


cv2.imshow('Original Image', image)
cv2.imshow('Laplacian Edge Detected Image',
laplacian_edges)

# Lưu ảnh đã phát hiện cạnh vào file


laplacian_edges_image_path =
'path/to/your/laplacian_edges_image.jpg'
cv2.imwrite(laplacian_edges_image_path,
laplacian_edges)
# Đợi một phím bất kỳ để đóng cửa sổ hiển thị
cv2.waitKey(0)
cv2.destroyAllWindows()

print(f"Laplacian edge detected image saved


successfully at {laplacian_edges_image_path}")
else:
print("Failed to load image. Check the input path and
file format.")

Tóm tắt
import cv2: Sử dụng OpenCV để xử lý và phát hiện cạnh trong
ảnh.
cv2.imread(): Đọc ảnh từ file với OpenCV.
cv2.cvtColor(): Chuyển đổi ảnh màu sang ảnh xám.
cv2.Canny(): Áp dụng bộ lọc Canny để phát hiện cạnh.
cv2.Sobel(): Áp dụng bộ lọc Sobel để phát hiện cạnh theo
hướng x và y.
cv2.Laplacian(): Áp dụng bộ lọc Laplacian để phát hiện cạnh.
cv2.imshow(): Hiển thị ảnh trên màn hình với OpenCV.
cv2.imwrite(): Lưu ảnh vào file với OpenCV.
import numpy as np: Sử dụng NumPy để xử lý ma trận.
Chương trình này giúp bạn phát hiện cạnh trong ảnh sử dụng các
phương pháp khác nhau như Canny, Sobel và Laplacian với
OpenCV.
297 - Viết chương trình để lọc ảnh

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để lọc ảnh.
Điều này có nghĩa là áp dụng các bộ lọc khác nhau lên ảnh để đạt
được hiệu ứng nhất định, như làm mờ, làm sắc nét hoặc chuyển đổi
ảnh sang màu xám.

Thuật toán
Đầu vào:
Một ảnh đầu vào (có thể là file ảnh hoặc mảng ảnh)
Loại bộ lọc cần áp dụng (ví dụ: Gaussian blur, Sharpening,
Grayscale, etc.)
Đầu ra:
Ảnh đã được áp dụng bộ lọc tương ứng
Các bước thực hiện:
1. Chọn thư viện phù hợp để đọc và áp dụng bộ lọc ảnh.
2. Nhập đường dẫn tới file ảnh hoặc tải ảnh vào chương trình.
3. Đọc ảnh từ file.
4. Áp dụng bộ lọc tương ứng lên ảnh.
5. Hiển thị hoặc lưu ảnh đã được lọc.

Cài đặt thư viện


Để cài đặt các thư viện cần thiết, sử dụng các lệnh sau trong
terminal:
pip install opencv-python

pip install matplotlib


Code Python
# Các thư viện cần thiết
import cv2
import numpy as np
from matplotlib import pyplot as plt

# Đọc ảnh từ file


image = cv2.imread('path_to_image.jpg')

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Áp dụng bộ lọc Gaussian Blur
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)

# Áp dụng bộ lọc Sharpening


kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
sharpened_image = cv2.filter2D(image, -1, kernel)

# Chuyển đổi ảnh sang màu xám


gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Hiển thị ảnh gốc và ảnh đã lọc


plt.figure(figsize=(10, 10))

plt.subplot(2, 2, 1)
plt.title('Original Image')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

plt.subplot(2, 2, 2)
plt.title('Gaussian Blur')
plt.imshow(cv2.cvtColor(blurred_image,
cv2.COLOR_BGR2RGB))

plt.subplot(2, 2, 3)
plt.title('Sharpened Image')
plt.imshow(cv2.cvtColor(sharpened_image,
cv2.COLOR_BGR2RGB))

plt.subplot(2, 2, 4)
plt.title('Grayscale Image')
plt.imshow(gray_image, cmap='gray')

plt.show()
else:
print("Failed to load image. Check the input path and
file format.")

Giải thích code


1. Đọc ảnh từ file:
cv2.imread('path_to_image.jpg'): Đọc ảnh từ đường dẫn
file.
2. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra nếu ảnh được đọc thành
công, nếu không thông báo lỗi.
3. Áp dụng bộ lọc Gaussian Blur:
cv2.GaussianBlur(image, (15, 15), 0): Làm mờ ảnh bằng
bộ lọc Gaussian Blur với kích thước kernel là 15x15.
4. Áp dụng bộ lọc Sharpening:
Tạo kernel cho bộ lọc làm sắc nét và áp dụng nó bằng hàm
cv2.filter2D().
5. Chuyển đổi ảnh sang màu xám:
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY): Chuyển đổi ảnh
sang màu xám.
6. Hiển thị ảnh:
Sử dụng matplotlib.pyplot để hiển thị ảnh gốc và ảnh đã
được lọc.

Bổ sung
Sử dụng thư viện Pillow (PIL):
from PIL import Image, ImageFilter
import matplotlib.pyplot as plt

# Đọc ảnh từ file


image = Image.open('path_to_image.jpg')

# Áp dụng bộ lọc Gaussian Blur


blurred_image =
image.filter(ImageFilter.GaussianBlur(radius=5))

# Áp dụng bộ lọc Sharpen


sharpened_image = image.filter(ImageFilter.SHARPEN)

# Chuyển đổi ảnh sang màu xám


gray_image = image.convert('L')

# Hiển thị ảnh gốc và ảnh đã lọc


plt.figure(figsize=(10, 10))

plt.subplot(2, 2, 1)
plt.title('Original Image')
plt.imshow(image)

plt.subplot(2, 2, 2)
plt.title('Gaussian Blur')
plt.imshow(blurred_image)

plt.subplot(2, 2, 3)
plt.title('Sharpened Image')
plt.imshow(sharpened_image)

plt.subplot(2, 2, 4)
plt.title('Grayscale Image')
plt.imshow(gray_image, cmap='gray')

plt.show()

Tóm tắt
Sử dụng thư viện OpenCV để xử lý ảnh.
Đọc ảnh bằng cv2.imread.
Áp dụng các bộ lọc khác nhau (Gaussian Blur, Sharpening,
Grayscale).
Hiển thị kết quả bằng matplotlib.pyplot.
Kiểm tra xem ảnh đã được đọc thành công hay chưa.
Sử dụng bộ lọc Gaussian Blur để làm mờ ảnh.
Sử dụng kernel để làm sắc nét ảnh.
Chuyển đổi ảnh sang màu xám.
Chương trình này thực hiện việc lọc ảnh bằng cách sử dụng các bộ
lọc thông dụng và hiển thị kết quả qua hình ảnh.
298 - Viết chương trình để thay đổi
kích thước ảnh

Giải thích đề bài


Đề bài yêu cầu chúng ta viết một chương trình Python để thay đổi
kích thước ảnh. Điều này có nghĩa là chúng ta sẽ thay đổi chiều
rộng và chiều cao của ảnh theo một tỷ lệ hoặc kích thước cụ thể.

Thuật toán
Đầu vào:
Đường dẫn tới file ảnh cần thay đổi kích thước.
Kích thước mới (chiều rộng và chiều cao) hoặc tỷ lệ thay đổi
kích thước.
Đầu ra:
Ảnh đã được thay đổi kích thước.
Các bước thực hiện:
1. Chọn thư viện phù hợp để đọc và thay đổi kích thước ảnh.
2. Nhập đường dẫn tới file ảnh.
3. Đọc ảnh từ file.
4. Thay đổi kích thước ảnh theo kích thước mới hoặc tỷ lệ.
5. Hiển thị hoặc lưu ảnh đã thay đổi kích thước.

Cài đặt thư viện


Để cài đặt các thư viện cần thiết, sử dụng các lệnh sau trong
terminal:
pip install opencv-python

pip install matplotlib


Code Python
Dưới đây là chương trình thay đổi kích thước ảnh bằng OpenCV.
import cv2
from matplotlib import pyplot as plt

# Đường dẫn tới file ảnh


image_path = 'path_to_image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
# Kích thước mới (chiều rộng và chiều cao)
new_width = 800
new_height = 600

# Thay đổi kích thước ảnh


resized_image = cv2.resize(image, (new_width,
new_height))

# Hiển thị ảnh gốc và ảnh đã thay đổi kích thước


plt.figure(figsize=(10, 10))

plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

plt.subplot(1, 2, 2)
plt.title('Resized Image')
plt.imshow(cv2.cvtColor(resized_image,
cv2.COLOR_BGR2RGB))

plt.show()
else:
print("Failed to load image. Check the input path and
file format.")
Giải thích code
1. Đọc ảnh từ file:
cv2.imread('path_to_image.jpg'): Đọc ảnh từ đường dẫn
file.
2. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra nếu ảnh được đọc thành
công, nếu không thông báo lỗi.
3. Kích thước mới:
new_width và new_height: Xác định chiều rộng và chiều cao
mới cho ảnh.
4. Thay đổi kích thước ảnh:
cv2.resize(image, (new_width, new_height)): Thay đổi
kích thước ảnh theo kích thước mới.
5. Hiển thị ảnh:
Sử dụng matplotlib.pyplot để hiển thị ảnh gốc và ảnh đã
được thay đổi kích thước.

Bổ sung
Thay đổi kích thước theo tỷ lệ:
import cv2
from matplotlib import pyplot as plt

# Đường dẫn tới file ảnh


image_path = 'path_to_image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

if image is not None:


# Tỷ lệ thay đổi kích thước
scale_percent = 50 # 50% của kích thước gốc

# Tính toán kích thước mới


width = int(image.shape[1] * scale_percent / 100)
height = int(image.shape[0] * scale_percent / 100)
new_size = (width, height)

# Thay đổi kích thước ảnh


resized_image = cv2.resize(image, new_size)

# Hiển thị ảnh gốc và ảnh đã thay đổi kích thước


plt.figure(figsize=(10, 10))

plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

plt.subplot(1, 2, 2)
plt.title('Resized Image')
plt.imshow(cv2.cvtColor(resized_image,
cv2.COLOR_BGR2RGB))

plt.show()
else:
print("Failed to load image. Check the input path and
file format.")

Tóm tắt
Sử dụng thư viện OpenCV để xử lý ảnh.
Đọc ảnh bằng cv2.imread.
Kiểm tra xem ảnh đã được đọc thành công hay chưa.
Sử dụng hàm cv2.resize để thay đổi kích thước ảnh.
Hiển thị kết quả bằng matplotlib.pyplot.
Đặt kích thước mới hoặc tỷ lệ thay đổi kích thước.
Chương trình này giúp bạn thay đổi kích thước ảnh theo kích thước
cụ thể hoặc theo tỷ lệ và hiển thị kết quả qua hình ảnh.
299 - Viết chương trình để cắt ảnh

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để cắt ảnh
thành các hình vuông, tam giác và hình tròn. Điều này có nghĩa là
chúng ta sẽ tạo ra các hình dạng đó từ ảnh và lưu lại hoặc hiển thị
chúng.

Thuật toán
Đầu vào:
Đường dẫn tới file ảnh cần cắt.
Đầu ra:
Ảnh đã được cắt thành các hình vuông, tam giác và hình
tròn.
Các bước thực hiện:
1. Chọn thư viện phù hợp để đọc và xử lý ảnh.
2. Nhập đường dẫn tới file ảnh.
3. Đọc ảnh từ file.
4. Xác định vị trí và kích thước của hình vuông, tam giác và
hình tròn.
5. Cắt ảnh theo các hình dạng đã xác định.
6. Hiển thị hoặc lưu ảnh đã cắt.

Cài đặt thư viện


Để cài đặt các thư viện cần thiết, sử dụng các lệnh sau trong
terminal:
pip install opencv-python

pip install matplotlib


Code Python
import cv2
import numpy as np
from matplotlib import pyplot as plt

# Đường dẫn tới file ảnh


image_path = 'path_to_image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
height, width, _ = image.shape

# Kích thước hình vuông


square_size = min(height, width) // 3

# Cắt hình vuông


square = image[:square_size, :square_size]

# Tạo mặt nạ cho hình tròn


mask_circle = np.zeros((height, width), dtype=np.uint8)
center = (width // 2, height // 2)
radius = min(center[0], center[1], height - center[1],
width - center[0]) // 2
cv2.circle(mask_circle, center, radius, 255, -1)

# Ứng dụng mặt nạ hình tròn


circle = cv2.bitwise_and(image, image, mask=mask_circle)
circle = circle[center[1] - radius:center[1] + radius,
center[0] - radius:center[0] + radius]

# Tạo mặt nạ cho hình tam giác


mask_triangle = np.zeros((height, width), dtype=np.uint8)
points = np.array([[width // 2, height // 4], [width //
4, 3 * height // 4], [3 * width // 4, 3 * height // 4]])
cv2.drawContours(mask_triangle, [points], 0, 255, -1)

# Ứng dụng mặt nạ hình tam giác


triangle = cv2.bitwise_and(image, image,
mask=mask_triangle)
triangle = triangle[height // 4:3 * height // 4, width //
4:3 * width // 4]

# Hiển thị ảnh gốc và ảnh đã cắt


plt.figure(figsize=(10, 10))

plt.subplot(2, 2, 1)
plt.title('Original Image')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

plt.subplot(2, 2, 2)
plt.title('Square')
plt.imshow(cv2.cvtColor(square, cv2.COLOR_BGR2RGB))

plt.subplot(2, 2, 3)
plt.title('Circle')
plt.imshow(cv2.cvtColor(circle, cv2.COLOR_BGR2RGB))

plt.subplot(2, 2, 4)
plt.title('Triangle')
plt.imshow(cv2.cvtColor(triangle, cv2.COLOR_BGR2RGB))

plt.show()
else:
print("Failed to load image. Check the input path and
file format.")

Giải thích code


1. Đọc ảnh từ file:
cv2.imread('path_to_image.jpg'): Đọc ảnh từ đường dẫn
file.
2. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra nếu ảnh được đọc thành
công, nếu không thông báo lỗi.
3. Cắt hình vuông:
Xác định kích thước của hình vuông bằng cách lấy giá trị
nhỏ hơn giữa chiều cao và chiều rộng của ảnh rồi chia cho
3.
Cắt ảnh thành hình vuông với kích thước xác định.
4. Tạo và áp dụng mặt nạ cho hình tròn:
Tạo một mặt nạ có hình tròn.
Ứng dụng mặt nạ hình tròn lên ảnh để tạo ra hình tròn.
5. Tạo và áp dụng mặt nạ cho hình tam giác:
Tạo một mặt nạ có hình tam giác bằng cách xác định ba
điểm đỉnh của tam giác.
Ứng dụng mặt nạ hình tam giác lên ảnh để tạo ra hình tam
giác.
6. Hiển thị ảnh:
Sử dụng matplotlib.pyplot để hiển thị ảnh gốc và các ảnh
đã cắt.

Tóm tắt
Sử dụng thư viện OpenCV để xử lý ảnh.
Đọc ảnh bằng cv2.imread.
Kiểm tra xem ảnh đã được đọc thành công hay chưa.
Cắt ảnh thành các hình vuông, tam giác và hình tròn bằng cách
sử dụng mặt nạ.
Hiển thị kết quả bằng matplotlib.pyplot.
Tạo mặt nạ cho các hình dạng khác nhau (vuông, tròn, tam
giác).
Áp dụng mặt nạ lên ảnh để cắt ảnh theo hình dạng tương ứng.
Chương trình này giúp bạn cắt ảnh thành các hình vuông, tam giác
và hình tròn và hiển thị kết quả qua hình ảnh.
300 - Viết chương trình để xoay ảnh

Giải thích đề bài


Bài tập yêu cầu chúng ta viết một chương trình Python để xoay ảnh
với các góc khác nhau: 30, 60, 90, và 180 độ. Điều này có nghĩa là
chúng ta sẽ xoay ảnh theo các góc cho trước và hiển thị hoặc lưu lại
các ảnh đã xoay.

Thuật toán
Đầu vào:
Đường dẫn tới file ảnh cần xoay.
Đầu ra:
Ảnh đã được xoay với các góc 30, 60, 90 và 180 độ.
Các bước thực hiện:
1. Chọn thư viện phù hợp để đọc và xử lý ảnh.
2. Nhập đường dẫn tới file ảnh.
3. Đọc ảnh từ file.
4. Xoay ảnh theo các góc 30, 60, 90 và 180 độ.
5. Hiển thị hoặc lưu ảnh đã xoay.

Cài đặt thư viện


Để cài đặt các thư viện cần thiết, sử dụng các lệnh sau trong
terminal:
pip install opencv-python

pip install matplotlib


Code Python
Dưới đây là chương trình xoay ảnh với các góc 30, 60, 90 và 180 độ
bằng OpenCV.
import cv2
import numpy as np
from matplotlib import pyplot as plt

# Đường dẫn tới file ảnh


image_path = 'path_to_image.jpg'

# Đọc ảnh từ file


image = cv2.imread(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
def rotate_image(image, angle):
height, width = image.shape[:2]
center = (width // 2, height // 2)
matrix = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated_image = cv2.warpAffine(image, matrix, (width,
height))
return rotated_image

# Xoay ảnh với các góc khác nhau


angles = [30, 60, 90, 180]
rotated_images = [rotate_image(image, angle) for angle in
angles]

# Hiển thị ảnh gốc và ảnh đã xoay


plt.figure(figsize=(15, 10))

plt.subplot(2, 3, 1)
plt.title('Original Image')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

for i, angle in enumerate(angles):


plt.subplot(2, 3, i+2)
plt.title(f'Rotated {angle} degrees')
plt.imshow(cv2.cvtColor(rotated_images[i],
cv2.COLOR_BGR2RGB))

plt.show()
else:
print("Failed to load image. Check the input path and
file format.")

Giải thích code


1. Đọc ảnh từ file:
cv2.imread('path_to_image.jpg'): Đọc ảnh từ đường dẫn
file.
2. Kiểm tra xem ảnh đã được đọc thành công chưa:
if image is not None: Kiểm tra nếu ảnh được đọc thành
công, nếu không thông báo lỗi.
3. Hàm xoay ảnh:
rotate_image(image, angle): Hàm này xoay ảnh theo góc
đã cho.
height, width = image.shape[:2]: Lấy chiều cao và
chiều rộng của ảnh.
center = (width // 2, height // 2): Tính tọa độ trung
tâm của ảnh.
matrix = cv2.getRotationMatrix2D(center, angle,
1.0): Tạo ma trận xoay.
cv2.warpAffine(image, matrix, (width, height)):
Xoay ảnh theo ma trận xoay.
4. Xoay ảnh với các góc khác nhau:
angles = [30, 60, 90, 180]: Các góc cần xoay.
rotated_images = [rotate_image(image, angle) for angle
in angles]: Xoay ảnh theo từng góc trong danh sách
angles.
5. Hiển thị ảnh:
Sử dụng matplotlib.pyplot để hiển thị ảnh gốc và các ảnh
đã xoay.
Bổ sung

Cách 2: Sử dụng thư viện PIL (Pillow)


Pillow là một thư viện xử lý ảnh khác trong Python. Dưới đây là cách
xoay ảnh sử dụng Pillow:

1. Cài đặt thư viện:


pip install pillow

2. Code Python:
from PIL import Image
from matplotlib import pyplot as plt

# Đường dẫn tới file ảnh


image_path = 'path_to_image.jpg'

# Đọc ảnh từ file


image = Image.open(image_path)

# Kiểm tra xem ảnh đã được đọc thành công chưa


if image is not None:
def rotate_image(image, angle):
return image.rotate(angle, expand=True)

# Xoay ảnh với các góc khác nhau


angles = [30, 60, 90, 180]
rotated_images = [rotate_image(image, angle) for angle in
angles]

# Hiển thị ảnh gốc và ảnh đã xoay


plt.figure(figsize=(15, 10))

plt.subplot(2, 3, 1)
plt.title('Original Image')
plt.imshow(image)
for i, angle in enumerate(angles):
plt.subplot(2, 3, i+2)
plt.title(f'Rotated {angle} degrees')
plt.imshow(rotated_images[i])

plt.show()
else:
print("Failed to load image. Check the input path and
file format.")

Tóm tắt
Sử dụng thư viện OpenCV:
Đọc ảnh bằng cv2.imread.
Kiểm tra xem ảnh đã được đọc thành công hay chưa.
Sử dụng hàm cv2.getRotationMatrix2D và cv2.warpAffine
để xoay ảnh.
Hiển thị kết quả bằng matplotlib.pyplot.
Sử dụng thư viện Pillow:
Đọc ảnh bằng Image.open.
Kiểm tra xem ảnh đã được đọc thành công hay chưa.
Sử dụng hàm image.rotate để xoay ảnh.
Hiển thị kết quả bằng matplotlib.pyplot.
Chương trình này giúp bạn xoay ảnh theo các góc cho trước và hiển
thị kết quả qua hình ảnh.
Lời Chào Tạm Biệt
Cảm ơn bạn đã dành thời gian hoàn thành cuốn sách “300 Bài
Code Thiếu Nhi bằng Python”. Hy vọng rằng bạn đã tìm thấy niềm
vui và học được nhiều điều bổ ích từ các bài tập trong cuốn sách
này.

Những Điều Bạn Đã Đạt Được


Thành thạo các kỹ năng lập trình cơ bản và nâng cao với
Python.
Rèn luyện tư duy logic và khả năng giải quyết vấn đề.
Tích lũy kinh nghiệm thực hành thông qua 300 bài tập đa dạng.
Hành Trình Tiếp Theo
Lập trình không chỉ là một kỹ năng, mà còn là một cuộc hành trình
khám phá và sáng tạo không ngừng. Hãy tiếp tục:

Học hỏi: Không ngừng tìm hiểu và cập nhật kiến thức mới.
Thực hành: Áp dụng những gì đã học vào các dự án thực tế.
Chia sẻ: Chia sẻ kiến thức và kinh nghiệm với cộng đồng.
Liên Hệ
Nếu bạn có bất kỳ câu hỏi hay đóng góp nào, đừng ngần ngại liên
hệ với tôi:

Website: fxstudio.dev
Email: contacts@fxstudio.dev
GitHub: Python_300_kids Repository

Một lần nữa, cảm ơn bạn đã đồng hành cùng cuốn sách này. Chúc
bạn thành công và hạnh phúc trên con đường lập trình!
Trân trọng,
Fx Studio

You might also like