Bỏ qua

THỰC HÀNH TỔNG HỢP 1 - KIẾN THỨC NỀN TẢNG

I. Mục tiêu buổi học

Mục tiêu chính

Buổi học này nhằm củng cố và thực hành tất cả kiến thức đã học từ Buổi 1-5, bao gồm:

  • Biến và kiểu dữ liệu cơ bản (int, float, str, bool)
  • Nhập xuất và ép kiểu dữ liệu
  • Toán học với Python và các phép tính
  • Xử lý chuỗi và các thao tác string

Kỹ năng đạt được

Sau buổi học, học viên sẽ có khả năng:

  • Tích hợp nhiều kiến thức để giải quyết bài toán thực tế
  • Tự tin viết chương trình Python hoàn chỉnh
  • Debug và tối ưu code hiệu quả
  • Áp dụng best practices trong lập trình

II. Cấu trúc buổi học (90 phút)

Hoạt động Thời gian Nội dung
Ôn tập nhanh 15 phút Kiểm tra và nhắc lại kiến thức đã học
Thực hành có hướng dẫn 35 phút 3 bài tập từ cơ bản đến nâng cao
Thực hành tự lập 30 phút 2 bài tập thách thức
Code review 10 phút Thảo luận và tối ưu code

III. Ôn tập kiến thức (15 phút)

Checklist kiến thức cần nhớ

✅ Biến và kiểu dữ liệu:

  • Khai báo biến đúng quy tắc
  • 4 kiểu dữ liệu: int, float, str, bool
  • Hàm type() để kiểm tra kiểu

✅ Input/Output:

  • input() luôn trả về string
  • print() với nhiều tham số
  • Ép kiểu: int(), float(), str()

✅ Toán học:

  • 7 phép toán: +, -, *, /, //, %, **
  • Hàm: round(), abs(), min(), max()

✅ Chuỗi:

  • Cắt chuỗi: [start:end]
  • Phương thức: .upper(), .lower(), .strip(), .replace()

IV. Thực hành có hướng dẫn (35 phút)

Bài 1: Máy tính BMI (12 phút)

Đề bài: Viết chương trình tính chỉ số BMI và đưa ra nhận xét sức khỏe.

Phân tích đề

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

  1. Nhập chiều cao (m) và cân nặng (kg) từ người dùng
  2. Tính BMI theo công thức: BMI = cân nặng / (chiều cao)²
  3. Làm tròn kết quả đến 2 chữ số thập phân
  4. Đưa ra nhận xét dựa trên thang đo BMI chuẩn

Input/Output mẫu:

Input Tính toán Output
Chiều cao: 1.75 BMI = 70 / (1.75)² BMI: 22.86
Cân nặng: 70 BMI = 70 / 3.0625 = 22.86 Nhận xét: Bình thường

Thang đo BMI: - BMI < 18.5: Thiếu cân - 18.5 ≤ BMI < 25: Bình thường
- 25 ≤ BMI < 30: Thừa cân - BMI ≥ 30: Béo phì

Gợi ý code
print("=== TÍNH CHỈ SỐ BMI ===")

# Nhập dữ liệu
height = float(input("Nhập chiều cao (m): "))
weight = float(input("Nhập cân nặng (kg): "))

# Tính BMI
bmi = weight / (height ** 2)
bmi = round(bmi, 2)  # Làm tròn 2 chữ số

# Đưa ra nhận xét
print(f"Chỉ số BMI của bạn: {bmi}")

if bmi < 18.5:
    print("Nhận xét: Thiếu cân")
elif bmi < 25:
    print("Nhận xét: Bình thường")
elif bmi < 30:
    print("Nhận xét: Thừa cân")
else:
    print("Nhận xét: Béo phì")

Bài 2: Xử lý thông tin học sinh (12 phút)

Đề bài: Nhập thông tin học sinh và format đẹp cho output.

Phân tích đề

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

  1. Nhập thông tin: họ tên, tuổi, điểm Toán, điểm Văn
  2. Xử lý dữ liệu: format tên, tính điểm trung bình
  3. Xếp loại học lực dựa trên điểm trung bình
  4. Hiển thị thông tin với format đẹp mắt

Input/Output mẫu:

Input Xử lý Output
Họ tên: "nguyễn văn an" .title() Họ tên: Nguyễn Văn An
Tuổi: 16 Tuổi: 16
Điểm Toán: 8.5 (8.5 + 7.8) / 2 = 8.15 Điểm TB: 8.2
Điểm Văn: 7.8 8.15 ≥ 8.0 → "Giỏi" Xếp loại: Giỏi
Gợi ý code
print("=== THÔNG TIN HỌC SINH ===")

# Nhập thông tin
name = input("Họ và tên: ").strip()
age = int(input("Tuổi: "))
math_score = float(input("Điểm Toán: "))
literature_score = float(input("Điểm Văn: "))

# Xử lý dữ liệu
name = name.title()  # Viết hoa chữ cái đầu
average = (math_score + literature_score) / 2
average = round(average, 1)

# Xếp loại
if average >= 8.0:
    grade = "Giỏi"
elif average >= 6.5:
    grade = "Khá"
elif average >= 5.0:
    grade = "Trung bình"
else:
    grade = "Yếu"

# Output đẹp
print("\n" + "="*30)
print("THÔNG TIN HỌC SINH")
print("="*30)
print(f"Họ tên    : {name}")
print(f"Tuổi      : {age}")
print(f"Điểm TB   : {average}")
print(f"Xếp loại  : {grade}")
print("="*30)

Bài 3: Game đoán số đơn giản (11 phút)

Đề bài: Tạo game đoán số từ 1-10 với 3 lần thử.

Phân tích đề

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

  1. Tạo số ngẫu nhiên từ 1-10 bằng thư viện random
  2. Cho người chơi 3 lần đoán
  3. Mỗi lần đoán, đưa ra gợi ý "lớn hơn" hoặc "nhỏ hơn"
  4. Thông báo kết quả win/lose

Logic game:

Trường hợp Điều kiện Phản hồi
Đoán đúng guess == secret_number Chúc mừng! Bạn đã đoán đúng!
Đoán nhỏ guess < secret_number Số bạn đoán nhỏ hơn!
Đoán lớn guess > secret_number Số bạn đoán lớn hơn!
Hết lượt attempts == 0 Hết lượt! Số đúng là: [số]
Gợi ý code
import random

print("=== GAME ĐOÁN SỐ ===")
print("Tôi đã nghĩ ra một số từ 1-10. Bạn có 3 lần đoán!")

secret_number = random.randint(1, 10)
attempts = 3

for i in range(attempts):
    guess = int(input(f"Lần {i+1}: Nhập số dự đoán: "))

    if guess == secret_number:
        print("Chúc mừng! Bạn đã đoán đúng!")
        break
    elif guess < secret_number:
        print("Số bạn đoán nhỏ hơn!")
    else:
        print("Số bạn đoán lớn hơn!")

    if i == attempts - 1:
        print(f"Hết lượt! Số đúng là: {secret_number}")

V. Thực hành tự lập (30 phút)

Bài 4: Máy tính tiền điện (15 phút)

Đề bài: Viết chương trình tính tiền điện theo bậc thang.

Phân tích đề

Bậc thang giá điện:

Bậc Khoảng (kWh) Giá (đ/kWh)
Bậc 1 0 - 50 1,600
Bậc 2 51 - 100 1,700
Bậc 3 101 - 200 2,000
Bậc 4 > 200 2,300

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

  1. Nhập số kWh tiêu thụ từ người dùng
  2. Tính tiền điện theo từng bậc (tính lũy tiến)
  3. Hiển thị chi tiết từng bậc
  4. Format tiền tệ với dấu phẩy ngăn cách

Ví dụ tính toán với 180 kWh: - Bậc 1: 50 × 1,600 = 80,000 đ - Bậc 2: 50 × 1,700 = 85,000 đ
- Bậc 3: 80 × 2,000 = 160,000 đ - Tổng: 325,000 đ

Gợi ý code
print("=== TÍNH TIỀN ĐIỆN ===")

kwh = float(input("Nhập số kWh tiêu thụ: "))

# Định nghĩa bậc thang
tiers = [
    (50, 1600),   # Bậc 1: 0-50 kWh
    (50, 1700),   # Bậc 2: 51-100 kWh  
    (100, 2000),  # Bậc 3: 101-200 kWh
    (float('inf'), 2300)  # Bậc 4: >200 kWh
]

total_cost = 0
remaining_kwh = kwh

print(f"\nChi tiết tính tiền cho {kwh} kWh:")
print("-" * 40)

for i, (limit, price) in enumerate(tiers, 1):
    if remaining_kwh <= 0:
        break

    usage = min(remaining_kwh, limit)
    cost = usage * price
    total_cost += cost

    print(f"Bậc {i}: {usage:6.1f} kWh × {price:,} = {cost:>10,.0f} đ")
    remaining_kwh -= usage

print("-" * 40)
print(f"Tổng tiền điện: {total_cost:,.0f} đ")

Bài 5: Phân tích chuỗi text (15 phút)

Đề bài: Viết chương trình phân tích một đoạn văn bản.

Phân tích đề

Yêu cầu phân tích:

  1. Thống kê cơ bản: Đếm số từ, số câu, số ký tự
  2. Phân tích từ: Tìm từ dài nhất và ngắn nhất
  3. Biến đổi định dạng: Uppercase, lowercase, title case
  4. Chỉnh sửa: Thay thế từ bất kỳ

Input/Output mẫu:

Chức năng Input Output
Thống kê "Python là ngôn ngữ lập trình." 5 từ, 1 câu, 31 ký tự
Từ dài nhất ["Python", "là", "ngôn", "ngữ", "lập", "trình"] "trình" (5 ký tự)
Từ ngắn nhất ["Python", "là", "ngôn", "ngữ", "lập", "trình"] "là" (2 ký tự)
Gợi ý code
print("=== PHÂN TÍCH VĂN BẢN ===")

text = input("Nhập đoạn văn: ").strip()

# Thống kê cơ bản
words = text.split()
word_count = len(words)
char_count = len(text)
sentence_count = text.count('.') + text.count('!') + text.count('?')

# Tìm từ dài nhất và ngắn nhất
if words:
    longest_word = max(words, key=len)
    shortest_word = min(words, key=len)
else:
    longest_word = shortest_word = ""

# Hiển thị kết quả
print(f"\nTHỐNG KÊ VĂN BẢN:")
print("-" * 30)
print(f"Số từ      : {word_count}")
print(f"Số câu     : {sentence_count}")
print(f"Số ký tự   : {char_count}")
print(f"Từ dài nhất: {longest_word} ({len(longest_word)} ký tự)")
print(f"Từ ngắn nhất: {shortest_word} ({len(shortest_word)} ký tự)")

# Các định dạng khác
print(f"\nCÁC ĐỊNH DẠNG KHÁC:")
print(f"Viết hoa   : {text.upper()}")
print(f"Viết thường: {text.lower()}")
print(f"Title Case : {text.title()}")

# Thay thế từ
old_word = input("\nNhập từ muốn thay thế: ")
new_word = input("Nhập từ mới: ")
new_text = text.replace(old_word, new_word)
print(f"Sau thay thế: {new_text}")

VI. Code Review và tối ưu (10 phút)

Các lỗi thường gặp

Lỗi thường gặp:

# Không xử lý lỗi input
age = int(input("Tuổi: "))  # Crash nếu nhập chữ

# Không format output
print("Điểm TB:", (8+9)/2)  # Output: 8.5000000001

# Biến không có ý nghĩa
a = input("Tên: ")
b = int(input("Tuổi: "))

Code tốt:

# Xử lý lỗi cơ bản
try:
    age = int(input("Tuổi: "))
except ValueError:
    print("Vui lòng nhập số!")
    age = 0

# Format số đẹp
average = round((math_score + lit_score) / 2, 1)

# Tên biến có ý nghĩa
student_name = input("Tên học sinh: ")
student_age = int(input("Tuổi: "))

Best Practices

  1. Tên biến có ý nghĩa: student_name thay vì n
  2. Comment giải thích: Đặc biệt với công thức phức tạp
  3. Format output đẹp: Sử dụng f-string và round()
  4. Kiểm tra input: Validate dữ liệu đầu vào
  5. Tách logic: Mỗi đoạn code làm 1 việc cụ thể

VII. Bài tập về nhà

Bài 1: Quản lý chi tiêu hàng ngày

Yêu cầu:

  • Nhập thu nhập hàng tháng
  • Nhập các khoản chi tiêu: ăn uống, đi lại, giải trí, khác
  • Tính tổng chi tiêu và số tiền còn lại
  • Đưa ra lời khuyên tài chính

Bài 2: Game số học

Yêu cầu:

  • Random 2 số và 1 phép tính (+, -, *)
  • Người chơi nhập kết quả
  • Tính điểm (đúng +10, sai -5)
  • Chơi 5 lượt và tính tổng điểm

Bài 3: Phân tích mật khẩu

Yêu cầu:

  • Nhập mật khẩu từ người dùng
  • Kiểm tra độ mạnh:
  • Độ dài >= 8 ký tự
  • Có chữ hoa, chữ thường
  • Có số và ký tự đặc biệt
  • Đưa ra điểm số và lời khuyên

VIII. Ghi chú quan trọng

Lưu ý khi làm bài

  1. Đọc kỹ đề bài - Hiểu rõ input và output mong muốn
  2. Chia nhỏ bài toán - Giải từng bước một
  3. Test với nhiều case - Thử các trường hợp khác nhau
  4. Code clean - Tên biến rõ ràng, comment khi cần

Chuẩn bị cho buổi sau

Buổi tiếp theo sẽ học về List (Danh sách) - cấu trúc dữ liệu quan trọng để lưu nhiều giá trị. Hãy ôn lại:

  • Vòng lặp for (sẽ học chi tiết sau)
  • Khái niệm index (chỉ số)
  • Chuỗi và cách truy cập từng ký tự

💡 Tip học tập: Thực hành là chìa khóa thành công trong lập trình. Hãy code nhiều hơn, đọc ít hơn!