Chào mừng các bạn đến với Rcom Dăm Yi blog - Kho tài liệu bổ ích!, Chúng tôi sẽ từng bước hoàn thiện để bạn đọc cảm thấy hài lòng, hữu ích!
Hiển thị các bài đăng có nhãn Thư viện Python. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Thư viện Python. Hiển thị tất cả bài đăng

Thứ Tư, 11 tháng 3, 2026

Lập Trình Game Python Với Pygame - Từ Zero Đến Hero

Lập Trình Game Với Pygame

Hành trình sáng tạo trò chơi từ những dòng mã đầu tiên

Kiến trúc cốt lõi của một trò chơi

Khác với ứng dụng văn phòng, Game chạy liên tục ở tốc độ cao. Cấu trúc gồm: Nhập liệu (Input) -> Cập nhật (Update) -> Hiển thị (Draw).

Các ví dụ thực hành chi tiết

Ví dụ 1 & 2: Cửa sổ và Vòng lặp Game

main.py
import pygame

# 1. Khởi tạo
pygame.init()
screen = pygame.display.set_mode((800, 600))
running = True

# 2. Vòng lặp Game
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    screen.fill((0, 0, 0)) # Xóa màn hình bằng màu đen
    pygame.display.update()

pygame.quit()
Giải thích:
  • pygame.init(): Đánh thức tất cả các module của Pygame.
  • pygame.event.get(): Lấy danh sách tất cả các thao tác (chuột, phím).
  • screen.fill(): Cực kỳ quan trọng để xóa các hình ảnh cũ trước khi vẽ hình mới.

Ví dụ 4: Di chuyển vật thể (Input Handling)

movement.py
x, y = 100, 100
vel = 5 # Vận tốc

# Trong vòng lặp while:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]: x -= vel
if keys[pygame.K_RIGHT]: x += vel
if keys[pygame.K_UP]: y -= vel
if keys[pygame.K_DOWN]: y += vel

pygame.draw.rect(screen, (255, 0, 0), (x, y, 50, 50))
Giải thích: Tọa độ trong Game có gốc (0,0) ở góc trên bên trái. Muốn đi xuống phải cộng y, muốn đi lên phải trừ y.

Ví dụ 6: Xử lý va chạm (Collision Detection)

collision.py
player_rect = pygame.Rect(x, y, 50, 50)
enemy_rect = pygame.Rect(400, 300, 50, 50)

if player_rect.colliderect(enemy_rect):
    print("Va chạm rồi!")
Giải thích: colliderect là hàm có sẵn cực mạnh của Pygame giúp kiểm tra xem hai hình chữ nhật có đè lên nhau hay không. Đây là nền tảng của các game bắn súng hoặc ăn xu.

Ví dụ 10: Giới hạn khung hình (FPS)

fps_control.py
clock = pygame.time.Clock()

while running:
    clock.tick(60) # Chạy đúng 60 khung hình/giây
    # ... logic game ...
Giải thích: Nếu không có clock.tick(60), game sẽ chạy nhanh hết mức có thể (tùy máy mạnh yếu), dẫn đến nhân vật di chuyển quá nhanh không thể kiểm soát.

Ví dụ 12: Màn hình Game Over (State Management)

game_state.py
game_active = True

while running:
    if game_active:
        # Chạy logic game
        if lives <= 0: game_active = False
    else:
        # Hiển thị màn hình Game Over
        screen.fill((200, 0, 0))
        show_text("NHẤN R ĐỂ CHƠI LẠI", 300, 300)
🎮 Thử thách cho học sinh: Hãy thử kết hợp Ví dụ 4 (Di chuyển) và Ví dụ 11 (Kẻ địch) để tạo ra một trò chơi né tránh chướng ngại vật đơn giản. Đây là bài tập thực hành tốt nhất để hiểu về logic Game!
Kết hợp Pandas & Django: Quản Lý Thiết Bị Dạy Học

Kết Hợp Pandas & Django

Xây dựng hệ thống Quản lý Thiết bị dạy học từ dữ liệu Excel

1. File Excel Thiết Bị
2. Pandas Xử Lý & Import
3. SQLite Database
4. Django Web Interface

Bước 1: Khai báo cấu trúc thiết bị (Model)

Chúng ta cần một "khuôn mẫu" để lưu trữ thông tin thiết bị trong Database.

models.py
from django.db import models

class ThietBi(models.Model):
    ma_so = models.CharField(max_length=20, unique=True)
    ten_thiet_bi = models.CharField(max_length=200)
    phong_kho = models.CharField(max_length=100)
    so_luong = models.IntegerField(default=0)
    tinh_trang = models.CharField(max_length=50, default="Tốt")

    def __str__(self):
        return self.ten_thiet_bi

Bước 3: Viết Script Import bằng Pandas

Đây là phần quan trọng nhất: Đọc file Excel báo cáo cuối năm và đẩy thẳng vào SQLite của Django.

import_data.py
import pandas as pd
from main.models import ThietBi

def import_excel_to_db(file_path):
    # 1. Dùng Pandas đọc Excel
    df = pd.read_excel(file_path)
    
    # 2. Lặp qua từng dòng dữ liệu
    for index, row in df.iterrows():
        ThietBi.objects.update_or_create(
            ma_so=row['Mã TB'],
            defaults={
                'ten_thiet_bi': row['Tên'],
                'phong_kho': row['Phòng'],
                'so_luong': row['Số lượng'],
            }
        )
    print("Import hoàn tất!")
💡 Giải thích:
  • df.iterrows(): Giúp duyệt qua từng hàng trong file Excel như một danh sách.
  • update_or_create: Nếu thiết bị đã tồn tại (dựa trên Mã số) thì cập nhật thông tin mới, nếu chưa có thì tạo mới. Tránh trùng lặp dữ liệu.

Bước 8: Thống kê báo cáo nhanh

Kết hợp sức mạnh tính toán của Pandas để tạo báo cáo nhanh trên Web.

views.py
def thong_ke_thiet_bi(request):
    # Lấy dữ liệu từ SQLite chuyển thành DataFrame
    data = ThietBi.objects.all().values()
    df = pd.DataFrame(data)
    
    # Thống kê tổng số lượng theo từng phòng kho
    report = df.groupby('phong_kho')['so_luong'].sum().to_dict()
    
    return render(request, 'report.html', {'report': report})
💡 Giải thích: Thay vì viết các câu lệnh SQL phức tạp, chúng ta đưa dữ liệu về dạng DataFrame để tận dụng hàm groupby() của Pandas chỉ trong 1 dòng code.

Bước 9: Xuất báo cáo ngược lại Excel

Khi Hiệu trưởng yêu cầu báo cáo, bạn có thể xuất dữ liệu từ Web ra file Excel chuẩn chỉ bằng 1 cú click.

views.py
import io
from django.http import HttpResponse

def export_to_excel(request):
    df = pd.DataFrame(list(ThietBi.objects.all().values()))
    
    output = io.BytesIO()
    with pd.ExcelWriter(output, engine='openpyxl') as writer:
        df.to_excel(writer, index=False, sheet_name='ThietBi')
    
    response = HttpResponse(output.getvalue(), content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment; filename=Bao_cao_thiet_bi.xlsx'
    return response

✅ Kết luận bài học

Sự kết hợp này mang lại quy trình khép kín:

  1. Dữ liệu đầu vào: Tận dụng các file Excel có sẵn từ kế toán/văn phòng.
  2. Lưu trữ: Dùng SQLite (đi kèm Django) nhẹ nhàng, không cần cài đặt server phức tạp.
  3. Hiển thị: Django giúp mọi giáo viên trong trường có thể truy cập qua mạng nội bộ để đăng ký mượn/trả thiết bị.
Lập Trình Web Với Framework Django - Python

Lập Trình Web Chuyên Nghiệp Với Django

Framework dành cho những người cầu toàn với thời hạn gấp rút

Kiến trúc MVT (Model - View - Template)

Khác với mô hình MVC thông thường, Django sử dụng kiến trúc MVT giúp tách biệt hoàn toàn giữa dữ liệu, giao diện và logic xử lý.

Chi tiết bài giảng & Ví dụ

Ví dụ 1: Lệnh khởi tạo hệ thống

Trước tiên, bạn cần cài đặt Django và khởi tạo cấu trúc thư mục.

pip install django
django-admin startproject mywebsite .
python manage.py startapp main
  • startproject: Tạo bộ khung quản lý web (cài đặt, database).
  • startapp: Tạo một "chức năng" cụ thể (như quản lý học sinh, tin tức).

Ví dụ 2: Tạo View đầu tiên (views.py)

main/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Chào mừng bạn đến với Web trường PCT!")
Giải thích: Hàm index nhận một yêu cầu (request) từ trình duyệt và trả về một phản hồi (response) bằng văn bản thuần túy.

Ví dụ 4: Sử dụng Template HTML

main/templates/index.html
<html>
<body>
    <h1>Danh sách môn học</h1>
    <ul>
    {% for mon in mon_hoc %}
        <li>{{ mon }}</li>
    {% endfor %}
    </ul>
</body>
</html>
Django sử dụng ngôn ngữ Template riêng. {% ... %} dùng cho logic (vòng lặp, điều kiện) và {{ ... }} dùng để hiển thị biến.

Ví dụ 6: Thiết kế Model (Lớp học)

main/models.py
from django.db import models

class HocSinh(models.Model):
    ho_ten = models.CharField(max_length=100)
    ngay_sinh = models.DateField()
    diem_tb = models.FloatField()

    def __str__(self):
        return self.ho_ten
Đây là cách Django định nghĩa bảng trong Database bằng mã Python. Bạn không cần viết lệnh SQL, Django sẽ tự động tạo bảng cho bạn qua lệnh makemigrations.

Ví dụ 7: Kích hoạt trang Admin siêu tốc

main/admin.py
from django.contrib import admin
from .models import HocSinh

admin.site.register(HocSinh)
Chỉ với 2 dòng code, bạn đã có một trang quản trị (Admin Dashboard) chuyên nghiệp để thêm, sửa, xóa học sinh mà không cần code giao diện.

Ví dụ 10: Logic ứng dụng To-Do List hoàn chỉnh

views.py - Final App
from django.shortcuts import render, redirect
from .models import Task

def task_list(request):
    tasks = Task.objects.all() # Lấy tất cả công việc
    if request.method == "POST":
        new_task = request.POST.get("task_name")
        Task.objects.create(name=new_task) # Lưu vào DB
        return redirect('task_list')
    return render(request, 'tasks.html', {'tasks': tasks})
Ví dụ này kết hợp việc lấy dữ liệu từ Database (ORM) và xử lý dữ liệu gửi lên từ người dùng (POST request) để tạo ra một ứng dụng tương tác thực sự.

🎯 Hướng phát triển nâng cao

Sau khi nắm vững 10 ví dụ này, học sinh có thể tự xây dựng trang Tra cứu điểm thi cho nhà trường bằng cách kết hợp Pandas (để nạp dữ liệu từ Excel) vào Django (để hiển thị lên Web).

Phân Tích Dữ Liệu Với Thư Viện Pandas - Python

Xử Lý Dữ Liệu Với Thư Viện Pandas

Biến Python thành công cụ thay thế Excel chuyên nghiệp

Giới thiệu chung

Pandas là thư viện mã nguồn mở cung cấp các cấu trúc dữ liệu hiệu suất cao (như DataFrame) giúp việc làm sạch, phân tích và xử lý dữ liệu trở nên cực kỳ đơn giản.

Ví dụ thực hành chi tiết

Ví dụ 1: Tạo DataFrame từ Dictionary

Python
import pandas as pd

data = {
    'Họ tên': ['An', 'Bình', 'Chi'],
    'Điểm': [8.5, 9.0, 7.5],
    'Lớp': ['12A1', '12A2', '12A1']
}

df = pd.DataFrame(data)
print(df)
Giải thích:
  • pd.DataFrame(data): Chuyển đổi một từ điển (Dictionary) thành bảng dữ liệu có hàng và cột.
  • Mỗi Key trở thành tiêu đề cột, Value (danh sách) trở thành dữ liệu hàng.

Ví dụ 2: Đọc dữ liệu từ file Excel

Python
# Đọc file Excel (Cần cài thêm openpyxl)
df = pd.read_excel('danh_sach_hoc_sinh.xlsx')

# Đọc file CSV
# df = pd.read_csv('du_lieu.csv')

print(df.info())
Giải thích:
  • read_excel(): Hàm quyền lực nhất để lấy dữ liệu từ các báo cáo kế toán/nhà trường.
  • df.info(): Xem tổng quan về kiểu dữ liệu và số lượng dòng không trống.

Ví dụ 5: Lọc dữ liệu theo điều kiện

Python
# Lọc những học sinh có điểm >= 8.0
hoc_sinh_gioi = df[df['Điểm'] >= 8.0]

# Lọc học sinh lớp 12A1 có điểm trên 7
loc_pht = df[(df['Lớp'] == '12A1') & (df['Điểm'] > 7)]

print(loc_pht)
Giải thích:
  • Pandas sử dụng cơ chế Boolean Indexing để lọc.
  • Ký hiệu & đại diện cho điều kiện "VÀ", | cho điều kiện "HOẶC".

Ví dụ 9: Gom nhóm dữ liệu (GroupBy)

Python
# Tính điểm trung bình theo từng lớp
diem_lop = df.groupby('Lớp')['Điểm'].mean()

# Đếm số lượng học sinh mỗi lớp
so_luong = df.groupby('Lớp')['Họ tên'].count()

print(diem_lop)
Giải thích:
  • groupby(): Tương tự Pivot Table trong Excel, giúp tổng hợp dữ liệu cực nhanh.
  • mean(), sum(), count(): Các hàm tính toán đi kèm sau khi gom nhóm.

Ví dụ 10: Xuất dữ liệu sau xử lý ra Excel

Python
# Lưu kết quả lọc vào một file Excel mới
loc_pht.to_excel('ket_qua_loc.xlsx', index=False)

print("Đã xuất file thành công!")
Giải thích:
  • to_excel(): Xuất DataFrame ra file.
  • index=False: Loại bỏ cột số thứ tự mặc định của Pandas để file Excel trông sạch sẽ hơn.
💡 Lời khuyên cho giáo viên: Khi dạy Pandas, hãy cho học sinh thực hành trực tiếp trên file điểm của lớp. Việc thấy code tự động tính điểm trung bình của 40 bạn trong nháy mắt sẽ tạo hứng thú rất lớn.
Học Lập Trình Tkinter Python - Từ Cơ Bản Đến Nâng Cao

Lập Trình Giao Diện Với Python Tkinter

Hệ thống bài giảng từ cơ bản đến ứng dụng thực tế (12 Ví dụ)

Kiến thức trọng tâm

Tkinter là thư viện chuẩn của Python dùng để tạo GUI. Để xây dựng một ứng dụng, chúng ta luôn đi theo trình tự: Khởi tạo -> Thêm Widget -> Bố trí -> Xử lý sự kiện.

Hệ thống ví dụ thực hành

Ví dụ 1: Cấu trúc khởi tạo CƠ BẢN

Python
import tkinter as tk
root = tk.Tk()
root.title("Xin chào Tkinter")
root.geometry("300x200")
root.mainloop()
  • tk.Tk(): Tạo ra cửa sổ "cha" (root).
  • geometry("WxH"): Định nghĩa kích thước cửa sổ.
  • mainloop(): Giữ cửa sổ luôn hiển thị.

Ví dụ 2: Hiển thị Label & Định dạng

Python
import tkinter as tk
root = tk.Tk()
lbl = tk.Label(root, text="Học Python tại Phan Chu Trinh", fg="blue", font=("Arial", 14, "bold"))
lbl.pack(pady=20)
root.mainloop()
  • fg: Màu chữ (Foreground).
  • font: Định dạng phông chữ, cỡ chữ, kiểu chữ.
  • pack(pady=20): Đặt widget vào cửa sổ và tạo khoảng cách trên-dưới 20px.

Ví dụ 5: Máy tính cộng số (Xử lý sự kiện)

Python
import tkinter as tk

def tinh():
    n1 = int(e1.get())
    n2 = int(e2.get())
    kq.config(text=f"Tổng là: {n1 + n2}")

root = tk.Tk()
e1 = tk.Entry(root); e1.pack()
e2 = tk.Entry(root); e2.pack()
btn = tk.Button(root, text="Cộng", command=tinh); btn.pack()
kq = tk.Label(root, text="Kết quả"); kq.pack()
root.mainloop()
  • e1.get(): Lấy giá trị từ ô nhập liệu (luôn là chuỗi).
  • config(): Thay đổi thuộc tính (ở đây là thay đổi văn bản kết quả) của widget khi chương trình đang chạy.

Ví dụ 9: Hộp thoại thông báo (Messagebox)

Python
import tkinter as tk
from tkinter import messagebox

def thong_bao():
    messagebox.showinfo("Thông báo", "Bạn đã lưu dữ liệu thành công!")

root = tk.Tk()
tk.Button(root, text="Lưu", command=thong_bao).pack(pady=50)
root.mainloop()
  • messagebox.showinfo(tiêu đề, nội dung): Hiển thị cửa sổ pop-up thông báo.

Ví dụ 11: Vẽ đồ họa (Canvas) NÂNG CAO

Python
import tkinter as tk
root = tk.Tk()
cv = tk.Canvas(root, width=200, height=200, bg="white")
cv.pack()

# Vẽ hình chữ nhật màu đỏ
cv.create_rectangle(50, 50, 150, 150, fill="red")
# Vẽ đường thẳng
cv.create_line(0, 0, 200, 200, fill="blue", width=3)

root.mainloop()
  • Canvas: Vùng không gian để vẽ hình đồ họa, biểu đồ.
  • create_rectangle(x1, y1, x2, y2): Vẽ hình chữ nhật dựa trên tọa độ góc trên bên trái và góc dưới bên phải.

Ví dụ 12: Đồng hồ kỹ thuật số thực tế

Python
import tkinter as tk
import time

def cap_nhat_gio():
    chuoi_gio = time.strftime("%H:%M:%S")
    lbl_clock.config(text=chuoi_gio)
    lbl_clock.after(1000, cap_nhat_gio) # Gọi lại hàm sau 1 giây

root = tk.Tk()
root.title("Đồng hồ PCT")
lbl_clock = tk.Label(root, font=("Courier", 40), bg="black", fg="lime")
lbl_clock.pack()

cap_nhat_gio()
root.mainloop()
  • time.strftime("%H:%M:%S"): Lấy giờ hệ thống định dạng Giờ:Phút:Giây.
  • after(ms, function): Kỹ thuật đệ quy giúp ứng dụng tự cập nhật mà không làm treo giao diện.

Tổng kết ứng dụng

Từ 12 ví dụ trên, bạn có thể kết hợp để tạo ra các sản phẩm như:

📚 Giáo dục: Phần mềm trộn đề thi (Sử dụng Entry, Button, Messagebox).
🛠 Quản lý: Quản lý thiết bị dạy học (Sử dụng Grid, SQLite, Treeview).
Bài giảng Python Tkinter - THPT Phan Chu Trinh

Tìm hiểu Thư viện Tkinter trong Python

Tài liệu hỗ trợ nâng cao cho học sinh & giáo viên

1.2. Cấu trúc cơ bản của chương trình Tkinter

Mọi chương trình GUI (Giao diện người dùng) với Tkinter đều tuân thủ các bước sau:

BướcMô tả lệnh
1. Importimport tkinter as tk
2. Cửa sổroot = tk.Tk() (Khởi tạo cửa sổ chính)
3. WidgetThêm Label, Button, Entry...
4. Vòng lặproot.mainloop() (Duy trì ứng dụng)
Python Code
import tkinter as tk

# Tạo cửa sổ chính
root = tk.Tk()
root.title("Chương trình Tkinter đầu tiên")
root.geometry("400x200") # Rộng x Cao

# Hiển thị cửa sổ và chờ thao tác
root.mainloop()

1.3. Widget trong Tkinter

Widget là "linh hồn" của giao diện. Dưới đây là các thành phần bạn sẽ dùng thường xuyên nhất:

WidgetChức năng
LabelHiển thị văn bản hướng dẫn
ButtonNút thực hiện lệnh (Event Handling)
EntryÔ nhập liệu 1 dòng (Username, Điểm số...)
TextNhập nội dung dài (Ghi chú, đề bài...)
CheckbuttonLựa chọn nhiều mục (Trắc nghiệm nhiều đáp án)

1.4 - 1.8. Các ví dụ thực hành tiêu biểu

Ví dụ 5: Máy tính cộng đơn giản

Chương trình cho phép nhập 2 số và hiển thị kết quả khi nhấn nút.

Python Code
import tkinter as tk

def tinh_tong():
    try:
        # Lấy dữ liệu từ Entry và ép kiểu sang số
        so1 = int(e1.get())
        so2 = int(e2.get())
        tong = so1 + so2
        lbl_kq.config(text=f"Kết quả: {tong}")
    except:
        lbl_kq.config(text="Lỗi: Hãy nhập số!")

root = tk.Tk()
root.title("Máy tính Mini")

tk.Label(root, text="Nhập số thứ nhất:").pack()
e1 = tk.Entry(root)
e1.pack()

tk.Label(root, text="Nhập số thứ hai:").pack()
e2 = tk.Entry(root)
e2.pack()

btn = tk.Button(root, text="Tính Tổng", command=tinh_tong)
btn.pack(pady=10)

lbl_kq = tk.Label(root, text="Kết quả: ", font=("Arial", 12, "bold"))
lbl_kq.pack()

root.mainloop()

1.9. Các phương pháp bố trí giao diện

Để giao diện chuyên nghiệp, chúng ta thường dùng grid() (chia ô như Excel) thay vì pack().

Ví dụ Grid Layout
import tkinter as tk
root = tk.Tk()

# Dòng 0
tk.Label(root, text="Tài khoản:").grid(row=0, column=0, padx=5, pady=5)
tk.Entry(root).grid(row=0, column=1)

# Dòng 1
tk.Label(root, text="Mật khẩu:").grid(row=1, column=0, padx=5, pady=5)
tk.Entry(root, show="*").grid(row=1, column=1)

root.mainloop()

1.10. Khi nào nên ứng dụng Tkinter?

Tkinter là lựa chọn số 1 cho các phần mềm nhỏ hỗ trợ giáo dục:

📝 Phần mềm trộn đề thi trắc nghiệm
📊 Quản lý điểm & chuyên cần
📦 Quản lý thiết bị dạy học
⏱ Đồng hồ đếm ngược giờ thi
Lời khuyên: Hãy bắt đầu với các Widget cơ bản trước khi chuyển sang các thư viện giao diện phức tạp hơn như PySide6 hay CustomTkinter.

Bài đăng phổ biến

💬 Bình luận

💬 Bình luận

📌 Danh sách bình luận