Skip to main content

Ngày 27 – Python hằng ngày: Ứng dụng To-Do List bằng Python (hoàn thiện chức năng cơ bản)

· 3 min read

🎯 Mục tiêu

  • Tạo một ứng dụng quản lý công việc đơn giản với giao diện dòng lệnh.
  • Cho phép người dùng thêm, xem, đánh dấu hoàn thành và xóa công việc.

📚 Kiến thức sử dụng

  • List và Dictionary trong Python
  • Hàm và tham số
  • Vòng lặp while, if, elif, else
  • Xử lý input từ người dùng

🧱 Cấu trúc dữ liệu

tasks = [
{
"title": "Học Python",
"completed": False
}
]

🛠 Mã nguồn đầy đủ

tasks = []

def display_menu():
print("\n----- MENU TO-DO LIST -----")
print("1. Thêm công việc mới")
print("2. Xem danh sách công việc")
print("3. Đánh dấu công việc đã hoàn thành")
print("4. Xóa công việc")
print("5. Thoát chương trình")
print("---------------------------")

def addTask(tasks_list):
print("\n>> Thêm công việc mới <<")
title = input("Nhập tên công việc: ").strip()
if title:
task = {"title": title, "completed": False}
tasks_list.append(task)
print("✅ Đã thêm công việc!")
else:
print("❌ Tên công việc không được để trống.")

def viewTasks(tasks_list):
print("\n>> Danh sách công việc <<")
if not tasks_list:
print("Danh sách trống.")
else:
for i, task in enumerate(tasks_list, 1):
status = "✅" if task["completed"] else "❌"
print(f"{i}. {task['title']} [{status}]")

def markComplete(tasks_list):
print("\n>> Đánh dấu hoàn thành <<")
if not tasks_list:
print("Danh sách trống.")
return
viewTasks(tasks_list)
try:
index = int(input("Nhập số thứ tự công việc đã hoàn thành: "))
if 1 <= index <= len(tasks_list):
tasks_list[index - 1]["completed"] = True
print("🎉 Đã đánh dấu hoàn thành.")
else:
print("❌ Số thứ tự không hợp lệ.")
except ValueError:
print("❌ Vui lòng nhập một số.")

def deleteTask(tasks_list):
print("\n>> Xóa công việc <<")
if not tasks_list:
print("Danh sách trống.")
return
viewTasks(tasks_list)
try:
index = int(input("Nhập số thứ tự công việc muốn xóa: "))
if 1 <= index <= len(tasks_list):
deleted = tasks_list.pop(index - 1)
print(f"🗑️ Đã xóa công việc: {deleted['title']}")
else:
print("❌ Số thứ tự không hợp lệ.")
except ValueError:
print("❌ Vui lòng nhập một số.")

def main():
while True:
display_menu()
choice = input("Nhập lựa chọn của bạn (1-5): ").strip()

if choice == '1':
addTask(tasks)
elif choice == '2':
viewTasks(tasks)
elif choice == '3':
markComplete(tasks)
elif choice == '4':
deleteTask(tasks)
elif choice == '5':
print("👋 Cảm ơn bạn đã sử dụng chương trình. Tạm biệt!")
break
else:
print("❌ Lựa chọn không hợp lệ. Nhập số từ 1 đến 5.")

if __name__ == "__main__":
main()

🎥 Xem Video Hướng Dẫn

💡 Mẹo nâng cao (gợi ý cho ngày sau):

Lưu danh sách công việc vào file .json để sử dụng lại sau khi thoát.

Thêm thời gian tạo và deadline cho công việc (sử dụng datetime).

Sắp xếp danh sách theo deadline hoặc trạng thái.

✍️ Thực hành: Chạy chương trình, thêm 2–3 công việc, đánh dấu hoàn thành và xóa thử 1 công việc.

📝 Ngày 6: Sử dụng các toán tử logic (AND, OR, NOT) trong SQL Server

· 4 min read

🎯 Mục tiêu buổi học:

  • Hiểu cách sử dụng các toán tử logic trong điều kiện WHERE.
  • Kết hợp nhiều điều kiện với AND, OR, NOT.
  • Tránh những lỗi phổ biến khi dùng toán tử logic.

1️⃣ Giới thiệu toán tử logic

Khi viết truy vấn SQL, chúng ta thường cần lọc dữ liệu theo nhiều điều kiện. SQL Server cung cấp 3 toán tử logic quan trọng:

Toán tửÝ nghĩaVí dụ
ANDChỉ chọn các dòng thỏa mãn tất cả điều kiệnChọn nhân viên có lương > 5000 chức vụ là "Manager"
ORChọn các dòng thỏa mãn ít nhất một điều kiệnChọn nhân viên có lương > 5000 hoặc có chức vụ là "Manager"
NOTLọc bỏ những dòng thỏa mãn điều kiệnChọn tất cả nhân viên ngoại trừ những người có chức vụ là "Intern"

2️⃣ Ví dụ minh họa

🔹 Sử dụng AND

Giả sử bạn có bảng Employees với các cột EmployeeID, FirstName, Salary, JobTitle.
Bạn muốn tìm những nhân viên có lương trên 5000 và giữ chức vụ Manager:

SELECT * FROM Employees
WHERE Salary > 5000 AND JobTitle = 'Manager';

📌 Giải thích: Câu lệnh trên chỉ trả về các nhân viên có cả hai điều kiện đúng.

🔹 Sử dụng OR

Bây giờ, bạn muốn tìm những nhân viên có lương trên 5000 hoặc giữ chức vụ Manager:

SELECT * FROM Employees
WHERE Salary > 5000 OR JobTitle = 'Manager';

📌 Giải thích: Chỉ cần một trong hai điều kiện đúng là bản ghi sẽ được chọn.

🔹 Sử dụng NOT

Giả sử bạn muốn tìm tất cả nhân viên ngoại trừ những người có chức vụ "Intern":

SELECT * FROM Employees
WHERE NOT JobTitle = 'Intern';

📌 Giải thích: SQL Server sẽ lọc tất cả các bản ghi ngoại trừ những người có JobTitle là "Intern".

🔹 Kết hợp AND, OR, NOT Bạn có thể kết hợp nhiều toán tử logic trong cùng một câu truy vấn. Ví dụ: Tìm những nhân viên có lương trên 5000 hoặc là Manager, nhưng không phải là Intern:

SELECT * FROM Employees
WHERE (Salary > 5000 OR JobTitle = 'Manager') AND NOT JobTitle = 'Intern';

📌 Lưu ý: Dùng dấu ngoặc tròn ()` để kiểm soát thứ tự ưu tiên của điều kiện.

3️⃣ Những lỗi thường gặp khi sử dụng toán tử logic

Quên dấu ngoặc làm thay đổi thứ tự ưu tiên

SELECT * FROM Employees
WHERE Salary > 5000 OR JobTitle = 'Manager' AND NOT JobTitle = 'Intern';

📌 Sai: SQL sẽ ưu tiên thực hiện AND trước OR, có thể gây sai kết quả.

✅ Sửa đúng: Dùng dấu ngoặc để đảm bảo điều kiện chạy đúng.

4️⃣ Bài tập thực hành

Tìm nhân viên có lương trên 7000 và làm ở bộ phận "IT".

Tìm nhân viên có chức vụ là "Sales" hoặc có lương trên 6000.

Tìm tất cả nhân viên ngoại trừ những người có chức vụ "HR".

💡 Gợi ý đáp án:

-- Bài 1
SELECT * FROM Employees
WHERE Salary > 7000 AND Department = 'IT';

-- Bài 2
SELECT * FROM Employees
WHERE JobTitle = 'Sales' OR Salary > 6000;

-- Bài 3
SELECT * FROM Employees
WHERE NOT JobTitle = 'HR';

🚀 Chúc bạn học tốt! Ngày mai, chúng ta sẽ học cách sắp xếp dữ liệu với ORDER BY. Hẹn gặp lại ở Ngày 7 nhé! 🎯

Điều Khiển Luồng (Flow Control) trong Python

· 3 min read

Điều khiển luồng là một khái niệm quan trọng trong lập trình, cho phép bạn kiểm soát cách mà chương trình thực thi các lệnh. Trong Python, bạn có thể sử dụng các câu lệnh điều kiện và vòng lặp để điều khiển luồng của chương trình.

1. Câu Lệnh Điều Kiện

Câu lệnh điều kiện cho phép bạn kiểm tra các điều kiện và thực hiện các đoạn mã khác nhau dựa trên kết quả của các điều kiện đó.

Cú Pháp:

if điều_kiện:
# Thực hiện nếu điều kiện đúng
elif điều_kiện_khác:
# Thực hiện nếu điều kiện khác đúng
else:
# Thực hiện nếu tất cả các điều kiện trước đều sai

Ví dụ:

tuoi = 18
if tuoi < 18:
print("Bạn chưa đủ tuổi.")
elif tuoi == 18:
print("Chúc mừng bạn đã đủ tuổi!")
else:
print("Bạn đã trưởng thành.")

2. Vòng Lặp

Vòng lặp cho phép bạn thực hiện một đoạn mã nhiều lần. Python hỗ trợ hai loại vòng lặp chính: forwhile.

  • Vòng Lặp for: Dùng để lặp qua một chuỗi hoặc danh sách.

    Cú Pháp:

    for biến in danh_sách:
    # Thực hiện

    Ví dụ:

    danh_sach = [1, 2, 3, 4, 5]
    for so in danh_sach:
    print(so)
  • Vòng Lặp while: Tiếp tục thực hiện đoạn mã cho đến khi điều kiện trở thành sai.

    Cú Pháp:

    while điều_kiện:
    # Thực hiện

    Ví dụ:

    dem = 0
    while dem < 5:
    print(dem)
    dem += 1

3. Câu Lệnh breakcontinue

  • break: Ngừng vòng lặp ngay lập tức.

    Ví dụ:

    for so in range(10):
    if so == 5:
    break
    print(so)
  • continue: Bỏ qua phần còn lại của vòng lặp và tiếp tục với lần lặp tiếp theo.

    Ví dụ:

    for so in range(10):
    if so % 2 == 0:
    continue
    print(so)

Bài Tập Hướng Dẫn

Bài Tập 1: Câu Lệnh Điều Kiện

Viết một chương trình kiểm tra xem một số có phải là số chẵn hay không.

# Nhập số từ người dùng
so = int(input("Nhập một số: "))

# Kiểm tra và in ra kết quả
if so % 2 == 0:
print(f"{so} là số chẵn.")
else:
print(f"{so} là số lẻ.")

Bài Tập 2: Vòng Lặp

Viết một chương trình in ra các số từ 1 đến 10 và thông báo nếu số đó là số chẵn hay lẻ.

for so in range(1, 11):
if so % 2 == 0:
print(f"{so} là số chẵn.")
else:
print(f"{so} là số lẻ.")

Kết Luận

Điều khiển luồng là một phần thiết yếu trong lập trình, giúp bạn tạo ra các chương trình phức tạp và tương tác hơn. Nếu bạn cần thêm thông tin hoặc có câu hỏi cụ thể nào, hãy cho tôi biết!

Tìm Hiểu Về Hàm Trong Python

· 4 min read

Hàm là một trong những khái niệm cơ bản và quan trọng nhất trong lập trình Python. Chúng giúp tổ chức mã nguồn, tăng tính tái sử dụng và làm cho chương trình dễ dàng hơn để đọc và bảo trì. Dưới đây là một cái nhìn chi tiết về hàm trong Python, bao gồm cách định nghĩa, gọi hàm, và các khái niệm liên quan khác.

1. Định Nghĩa Hàm

Để định nghĩa một hàm trong Python, bạn sử dụng từ khóa def, theo sau là tên hàm và danh sách các tham số trong dấu ngoặc đơn. Sau đó, bạn sẽ viết mã của hàm trong khối lệnh.

Cú Pháp:

def ten_ham(tham_so1, tham_so2):
# Đoạn mã thực thi
return gia_tri

Ví dụ:

def chao_mung(ten):
print(f"Chào mừng {ten} đến với Python!")

Trong ví dụ này, hàm chao_mung nhận một tham số là ten và in ra một thông báo chào mừng.

2. Gọi Hàm

Sau khi định nghĩa hàm, bạn có thể gọi hàm bằng cách sử dụng tên của nó và truyền các tham số cần thiết.

Ví dụ:

chao_mung("Monica")

Khi bạn chạy đoạn mã này, nó sẽ in ra: "Chào mừng Monica đến với Python!"

3. Giá Trị Trả Về

Hàm có thể trả về giá trị bằng cách sử dụng từ khóa return. Điều này cho phép bạn lưu trữ kết quả của hàm vào một biến để sử dụng sau này.

Ví dụ:

def tong(a, b):
return a + b

ket_qua = tong(5, 3)
print(ket_qua) # In ra 8

Trong ví dụ này, hàm tong nhận hai tham số và trả về tổng của chúng.

4. Hàm Không Có Tham Số

Hàm có thể được định nghĩa mà không cần tham số. Điều này hữu ích khi bạn chỉ muốn thực hiện một tác vụ mà không cần dữ liệu đầu vào.

Ví dụ:

def in_thong_bao():
print("Đây là một thông báo!")

Khi bạn gọi in_thong_bao(), nó sẽ in ra thông báo mà không cần tham số.

5. Hàm với Tham Số Mặc Định

Bạn có thể đặt giá trị mặc định cho tham số trong hàm. Điều này cho phép bạn gọi hàm mà không cần cung cấp tất cả các tham số.

Ví dụ:

def chao_mung(ten="khách"):
print(f"Chào mừng {ten} đến với Python!")

chao_mung() # Sử dụng tham số mặc định
chao_mung("Monica") # Sử dụng tham số được chỉ định

Ở đây, nếu bạn không cung cấp tên, hàm sẽ sử dụng giá trị mặc định là "khách".

6. Hàm Lambda

Python cũng hỗ trợ hàm vô danh (lambda), cho phép bạn định nghĩa hàm ngắn gọn mà không cần sử dụng từ khóa def.

Ví dụ:

tong = lambda a, b: a + b
print(tong(5, 3)) # In ra 8

Hàm lambda thường được sử dụng khi bạn cần một hàm tạm thời.

7. Tầm Quan Trọng Của Hàm

Hàm không chỉ giúp mã nguồn trở nên gọn gàng hơn mà còn giúp cải thiện khả năng tái sử dụng mã. Bạn có thể định nghĩa các hàm cho các tác vụ lặp đi lặp lại, giúp giảm thiểu lỗi và tăng tốc độ phát triển phần mềm.

Kết Luận

Hàm là một phần thiết yếu trong lập trình Python, giúp bạn tổ chức mã nguồn một cách hiệu quả và tái sử dụng các đoạn mã. Bằng cách hiểu rõ cách định nghĩa và sử dụng hàm, bạn sẽ có thể viết mã sạch hơn và dễ bảo trì hơn. Nếu bạn muốn tìm hiểu thêm, hãy xem các tài nguyên như Automate the Boring Stuff with Python.

Nếu bạn có bất kỳ câu hỏi nào hoặc cần thêm thông tin, hãy cho tôi biết!

Câu Lệnh SELECT Trong SQL: Hướng Dẫn Chi Tiết

· 3 min read

1. Giới Thiệu Về Câu Lệnh SELECT

Câu lệnh SELECT là một trong những câu lệnh quan trọng nhất trong SQL, giúp truy vấn và lấy dữ liệu từ cơ sở dữ liệu. Nó là nền tảng của mọi thao tác truy vấn, cho phép người dùng chọn các cột cụ thể, lọc dữ liệu theo điều kiện, sắp xếp và nhóm dữ liệu.

2. Cấu Trúc Cơ Bản Của SELECT

SELECT column1, column2, ...
FROM table_name;
  • SELECT: Chỉ định các cột cần lấy dữ liệu.
  • FROM: Xác định bảng chứa dữ liệu.

Ví dụ:

SELECT first_name, last_name FROM employees;

Câu lệnh này lấy dữ liệu từ hai cột first_namelast_name trong bảng employees.

3. Sử Dụng SELECT Với DISTINCT

DISTINCT giúp loại bỏ các giá trị trùng lặp trong kết quả.

SELECT DISTINCT country FROM customers;

Câu lệnh trên trả về danh sách các quốc gia duy nhất trong bảng customers.

4. Lọc Dữ Liệu Với WHERE

Mệnh đề WHERE giúp lọc dữ liệu theo điều kiện nhất định.

SELECT * FROM employees WHERE department = 'IT';

Lệnh này chọn tất cả nhân viên thuộc phòng ban IT.

Các toán tử phổ biến trong WHERE:

  • =: Bằng
  • <> hoặc !=: Khác
  • > hoặc <: Lớn hơn hoặc nhỏ hơn
  • LIKE: Tìm kiếm mẫu dữ liệu
  • IN: Tìm giá trị trong danh sách
  • BETWEEN: Lọc trong khoảng giá trị

Ví dụ:

SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';

5. Sắp Xếp Dữ Liệu Với ORDER BY

Mệnh đề ORDER BY giúp sắp xếp kết quả theo một hoặc nhiều cột.

SELECT first_name, last_name FROM employees ORDER BY last_name ASC;
  • ASC: Sắp xếp tăng dần (mặc định)
  • DESC: Sắp xếp giảm dần

6. Giới Hạn Kết Quả Với LIMIT (MySQL) hoặc TOP (SQL Server)

Khi cần lấy một số lượng dòng giới hạn, ta có thể sử dụng:

  • LIMIT trong MySQL, PostgreSQL:
SELECT * FROM employees LIMIT 10;
  • TOP trong SQL Server:
SELECT TOP 10 * FROM employees;

7. Nhóm Dữ Liệu Với GROUP BY

Mệnh đề GROUP BY giúp nhóm dữ liệu theo một hoặc nhiều cột.

SELECT department, COUNT(*) AS total_employees FROM employees GROUP BY department;

Câu lệnh này đếm số lượng nhân viên trong từng phòng ban.

8. Lọc Dữ Liệu Sau Khi Nhóm Với HAVING

Khác với WHERE, HAVING dùng để lọc dữ liệu sau khi đã nhóm.

SELECT department, COUNT(*) AS total_employees FROM employees
GROUP BY department HAVING COUNT(*) > 10;

Lệnh trên chỉ hiển thị các phòng ban có hơn 10 nhân viên.

9. Kết Hợp Dữ Liệu Từ Nhiều Bảng Với JOIN

Khi cần lấy dữ liệu từ nhiều bảng liên quan, ta sử dụng JOIN.

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;

Câu lệnh này kết hợp bảng employeesdepartments để lấy tên nhân viên và tên phòng ban của họ.

10. Kết Luận

Câu lệnh SELECT là công cụ mạnh mẽ để truy vấn dữ liệu trong SQL. Nắm vững cách sử dụng SELECT cùng các mệnh đề như WHERE, ORDER BY, GROUP BY, HAVING, và JOIN giúp bạn thao tác dữ liệu hiệu quả hơn. Hãy thực hành nhiều để thành thạo các kỹ thuật này!

Dự kiến hệ thống KRX sẽ go-live chính thức vào tháng 5 tới

· 2 min read

Theo báo Nhân Dân, hệ thống KRX dự kiến sẽ chính thức go-live vào tháng 5 năm nay. Đây là một trong những bước tiến quan trọng nhằm hiện đại hóa thị trường chứng khoán Việt Nam, nâng cao hiệu suất giao dịch và tăng cường khả năng kết nối với thị trường quốc tế.

Hệ thống KRX

Những điểm nổi bật của hệ thống KRX:

  • Tăng tốc độ xử lý giao dịch, giúp giảm thời gian chờ và nâng cao trải nghiệm của nhà đầu tư.
  • Cung cấp các sản phẩm mới, bao gồm giao dịch T+0 và các công cụ phái sinh nâng cao.
  • Nâng cao năng lực giám sát thị trường, đảm bảo minh bạch và công bằng hơn trong giao dịch chứng khoán.
  • Tích hợp công nghệ tiên tiến, hỗ trợ các chuẩn mực giao dịch hiện đại.

Hệ thống KRX đã được chuẩn bị trong nhiều năm và hiện đang trong giai đoạn thử nghiệm cuối cùng trước khi triển khai chính thức. Việc hệ thống mới đi vào hoạt động sẽ đánh dấu một cột mốc quan trọng trong quá trình chuyển đổi số của thị trường chứng khoán Việt Nam.

🔗 Xem chi tiết bài viết gốc:
Nhân Dân

🔥 NÓNG: HOSE bắt đầu kiểm thử hệ thống KRX từ 17/03/2025

· 2 min read

Theo thông tin từ CafeF, Sở Giao dịch Chứng khoán TP.HCM (HOSE) sẽ chính thức bắt đầu kiểm thử hệ thống KRX từ ngày 17/03/2025. Đây là bước quan trọng trong quá trình chuẩn bị triển khai hệ thống giao dịch mới, giúp nâng cao hiệu suất thị trường chứng khoán Việt Nam.

Hệ thống KRX

🚀 Hệ thống KRX có gì đặc biệt?

🔹 Tăng tốc độ xử lý giao dịch, giảm tải hệ thống và nâng cao trải nghiệm nhà đầu tư.
🔹 Hỗ trợ giao dịch T+0, giúp thanh khoản thị trường tốt hơn.
🔹 Cung cấp các công cụ phái sinh mới, mở rộng cơ hội đầu tư.
🔹 Nâng cao năng lực giám sát và minh bạch thị trường.

📆 Lộ trình triển khai

  • 17/03/2025: Bắt đầu kiểm thử hệ thống KRX.
  • Tháng 5/2025: Dự kiến hệ thống go-live chính thức.

Hệ thống KRX là một trong những dự án chuyển đổi số quan trọng nhất của thị trường chứng khoán Việt Nam. Việc triển khai thành công sẽ giúp thị trường tiếp cận chuẩn mực quốc tế và thu hút nhiều nhà đầu tư hơn.

📢 Bạn nghĩ gì về sự thay đổi này? Hãy chia sẻ ý kiến của bạn!

🔗 Xem chi tiết bài viết gốc:

Biểu đồ phân phối chuẩn với khoảng tin cậy 95%

· 2 min read

Giới thiệu

Bài viết này hướng dẫn cách vẽ biểu đồ phân phối chuẩn với khoảng tin cậy 95% bằng thư viện Plotly trong Python.

Mã nguồn

import numpy as np
import plotly.graph_objects as go
from scipy.stats import norm

# Xác định các giá trị cho phân phối chuẩn
mu = 0
sigma = 1
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)
y = norm.pdf(x, mu, sigma)

# Tính z-score cho khoảng tin cậy 95%
confidence_level = 0.95
alpha = 1 - confidence_level
z = norm.ppf(1 - alpha / 2)

# Vùng tô màu cho khoảng tin cậy 95%
x_fill = np.linspace(-z, z, 1000)
y_fill = norm.pdf(x_fill, mu, sigma)

# Tạo biểu đồ bằng Plotly
fig = go.Figure()

# Đường phân phối chuẩn
fig.add_trace(go.Scatter(x=x, y=y, mode='lines', name='Phân phối chuẩn', line=dict(color='blue')))

# Đường z-score
fig.add_trace(go.Scatter(x=[z, z], y=[0, norm.pdf(z, mu, sigma)], mode='lines', name=f'z = {z:.2f}', line=dict(color='red', dash='dash')))
fig.add_trace(go.Scatter(x=[-z, -z], y=[0, norm.pdf(-z, mu, sigma)], mode='lines', name=f'z = -{z:.2f}', line=dict(color='red', dash='dash')))

# Vùng tô màu khoảng tin cậy 95%
fig.add_trace(go.Scatter(x=np.concatenate(([x_fill[0]], x_fill, [x_fill[-1]])),
y=np.concatenate(([0], y_fill, [0])),
fill='tozeroy', fillcolor='rgba(255, 0, 0, 0.3)',
line=dict(color='rgba(255, 0, 0, 0)'),
name='Khoảng tin cậy 95%'))

# Định dạng biểu đồ
fig.update_layout(title='Biểu đồ phân phối chuẩn với khoảng tin cậy 95%',
xaxis_title='Z-score',
yaxis_title='Mật độ xác suất',
template='plotly_white',
xaxis_rangeslider_visible=False,
width=1200, # Đặt chiều rộng lớn hơn
height=600 # Đặt chiều cao hợp lý
)

# Hiển thị biểu đồ
fig.show()

fig.write_html("bieu_do_phan_phoi_chuan.html", full_html=True, include_plotlyjs="cdn")

Kết luận

Mã nguồn trên giúp vẽ biểu đồ phân phối chuẩn với khoảng tin cậy 95% bằng Plotly. Bạn có thể xuất biểu đồ dưới dạng file HTML để dễ dàng chia sẻ hoặc nhúng vào trang web.

Gửi Email Hàng Loạt Bằng Python và SMTP

· 3 min read

Giới Thiệu

Bài viết này hướng dẫn cách gửi email hàng loạt từ file Excel bằng Python. Chúng ta sẽ sử dụng thư viện pandas để đọc danh sách email và smtplib để gửi email thông qua SMTP.

Cảnh Báo Bảo Mật ⚠️

Không bao giờ lưu trữ mật khẩu trực tiếp trong mã nguồn. Thay vào đó, bạn nên sử dụng:

  • Biến môi trường (os.environ)
  • Tệp cấu hình (config.ini, .env)
  • OAuth2 thay vì đăng nhập bằng tài khoản thông thường

Cài Đặt Thư Viện

Trước tiên, hãy cài đặt các thư viện cần thiết:

pip install pandas openpyxl

Cấu Trúc File Excel

File Excel cần có hai cột như sau:

NameEmail
Tuantuan@email.com
Anan@email.com

Lưu file với tên email_list.xlsx để chương trình có thể đọc dữ liệu.

Mã Python Gửi Email Hàng Loạt

import pandas as pd
import smtplib
import os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# Đọc dữ liệu từ file Excel
file_path = 'email_list.xlsx' # Đảm bảo tệp có cột "Email" và "Name"
df = pd.read_excel(file_path)

# Cấu hình SMTP server
smtp_server = 'smtp.gmail.com'
smtp_port = 587
smtp_username = os.getenv("SMTP_USER") # Lấy từ biến môi trường
smtp_password = os.getenv("SMTP_PASS") # Lấy từ biến môi trường

# Kiểm tra thông tin đăng nhập
if not smtp_username or not smtp_password:
raise ValueError("Chưa cấu hình thông tin đăng nhập SMTP")

# Thiết lập kết nối SMTP
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(smtp_username, smtp_password)

# Gửi email cho từng hàng trong file Excel
for index, row in df.iterrows():
recipient_email = row['Email']
recipient_name = row['Name']

# Tạo email
msg = MIMEMultipart()
msg['From'] = smtp_username
msg['To'] = recipient_email
msg['Subject'] = 'Cách Gửi Email Hàng Loạt Bằng Python'

body = f"""
Xin chào {recipient_name},

Đây là email thông báo quan trọng.

Trân trọng,
Nhóm hỗ trợ
"""
msg.attach(MIMEText(body, 'plain'))

# Gửi email
server.sendmail(smtp_username, recipient_email, msg.as_string())
print(f"Đã gửi email đến {recipient_email}")

# Đóng kết nối
server.quit()

Lưu Ý

  • Bạn cần bật Less Secure Apps hoặc sử dụng OAuth2 khi làm việc với Gmail.
  • Không chia sẻ mật khẩu SMTP trên mã nguồn công khai.
  • Thử nghiệm trên tài khoản test trước khi gửi email hàng loạt.

Gửi email hàng loạt bằng Python, Python gửi email tự động

SMTP Gmail Python, gửi email với pandas, smtplib Python

Học cách gửi email hàng loạt bằng Python với pandas và smtplib. Hướng dẫn chi tiết từng bước kèm mã nguồn dễ hiểu.

Liên Kết Hữu Ích

Chúc bạn thành công! 🚀

Học Lập Trình Python Mỗi Ngày: Xây Dựng Ứng Dụng Kiểm Tra Đạo Văn Bằng Machine Learning

· 3 min read

Bạn muốn học lập trình Python và phát triển mỗi ngày? Một cách tuyệt vời để nâng cao kỹ năng của bạn là thực hành với các dự án thực tế. Hôm nay, chúng ta sẽ cùng tìm hiểu cách xây dựng ứng dụng kiểm tra đạo văn bằng Python, Machine Learning và NLP.

1. Giới Thiệu Về Ứng Dụng Kiểm Tra Đạo Văn

Trong thời đại kỹ thuật số, việc kiểm tra nội dung trùng lặp trở nên quan trọng hơn bao giờ hết. Công cụ kiểm tra đạo văn giúp so sánh hai văn bản và tính toán mức độ tương đồng giữa chúng.

Chúng ta sẽ sử dụng các thư viện Python phổ biến như:

  • pdfplumber: Để trích xuất văn bản từ file PDF.
  • spaCy: Xử lý ngôn ngữ tự nhiên (NLP), giúp tiền xử lý dữ liệu văn bản.
  • scikit-learn: Để tính toán độ tương đồng văn bản bằng phương pháp TF-IDF và cosine similarity.
  • Streamlit: Tạo giao diện web đơn giản và nhanh chóng.

2. Cách Hoạt Động Của Ứng Dụng

Bước 1: Trích Xuất Văn Bản Từ File PDF

Chúng ta sử dụng thư viện pdfplumber để đọc và trích xuất nội dung từ file PDF:

import pdfplumber

def extract_text_from_pdf(pdf_path):
text = ""
with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
text += page.extract_text() + "\n"
return text

Bước 2: Tiền Xử Lý Văn Bản

Tiếp theo, chúng ta sẽ sử dụng spaCy để loại bỏ stopwords, dấu câu và chuyển đổi từ về dạng gốc (lemmatization):

import spacy

nlp = spacy.load("en_core_web_sm")

def preprocess_text(text):
doc = nlp(text)
tokens = [token.lemma_ for token in doc if not token.is_stop and not token.is_punct]
return " ".join(tokens)

Bước 3: Kiểm Tra Đạo Văn Bằng Cosine Similarity

Chúng ta sẽ sử dụng TF-IDF Vectorizer để chuyển đổi văn bản thành vector và tính toán độ tương đồng bằng cosine similarity:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

def check_plagiarism(text1, text2):
documents = [text1, text2]
vectorizer = TfidfVectorizer().fit_transform(documents)
vectors = vectorizer.toarray()
csim = cosine_similarity(vectors)
return csim[0, 1]

Bước 4: Xây Dựng Giao Diện Bằng Streamlit

Cuối cùng, chúng ta tạo giao diện web đơn giản với Streamlit, cho phép người dùng tải lên hai file PDF và kiểm tra mức độ trùng lặp nội dung:

import streamlit as st

st.title("Plagiarism Checker")

uploaded_file1 = st.file_uploader("Choose the first PDF file", type="pdf")
uploaded_file2 = st.file_uploader("Choose the second PDF file", type="pdf")

if uploaded_file1 is not None and uploaded_file2 is not None:
text1 = extract_text_from_pdf(uploaded_file1)
text2 = extract_text_from_pdf(uploaded_file2)

processed_text1 = preprocess_text(text1)
processed_text2 = preprocess_text(text2)

similarity = check_plagiarism(processed_text1, processed_text2)

st.write(f"Similarity: {similarity * 100:.2f}%")

3. Chạy Ứng Dụng Kiểm Tra Đạo Văn

Để chạy ứng dụng, bạn chỉ cần cài đặt các thư viện cần thiết và chạy lệnh sau trong terminal:

pip install pdfplumber spacy scikit-learn streamlit
python -m spacy download en_core_web_sm
streamlit run your_script.py

4. Kết Luận

Dự án này giúp bạn thực hành các kỹ thuật xử lý ngôn ngữ tự nhiên (NLP), làm việc với dữ liệu văn bản và xây dựng ứng dụng web bằng Python. Nếu bạn muốn phát triển thêm, có thể:

  • Mở rộng ứng dụng với nhiều file PDF hơn.
  • Tích hợp cơ sở dữ liệu để lưu trữ kết quả kiểm tra đạo văn.
  • Tăng cường mô hình bằng thuật toán NLP nâng cao như BERT.

Hãy thử xây dựng ngay hôm nay và tiếp tục học lập trình Python mỗi ngày! 🚀