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ề stringprint()
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:
- Nhập chiều cao (m) và cân nặng (kg) từ người dùng
- Tính BMI theo công thức: BMI = cân nặng / (chiều cao)²
- Làm tròn kết quả đến 2 chữ số thập phân
- Đư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:
- Nhập thông tin: họ tên, tuổi, điểm Toán, điểm Văn
- Xử lý dữ liệu: format tên, tính điểm trung bình
- Xếp loại học lực dựa trên điểm trung bình
- 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:
- Tạo số ngẫu nhiên từ 1-10 bằng thư viện random
- Cho người chơi 3 lần đoán
- Mỗi lần đoán, đưa ra gợi ý "lớn hơn" hoặc "nhỏ hơn"
- 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:
- Nhập số kWh tiêu thụ từ người dùng
- Tính tiền điện theo từng bậc (tính lũy tiến)
- Hiển thị chi tiết từng bậc
- 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:
- Thống kê cơ bản: Đếm số từ, số câu, số ký tự
- Phân tích từ: Tìm từ dài nhất và ngắn nhất
- Biến đổi định dạng: Uppercase, lowercase, title case
- 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¶
- Tên biến có ý nghĩa:
student_name
thay vìn
- Comment giải thích: Đặc biệt với công thức phức tạp
- Format output đẹp: Sử dụng f-string và round()
- Kiểm tra input: Validate dữ liệu đầu vào
- 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¶
- Đọc kỹ đề bài - Hiểu rõ input và output mong muốn
- Chia nhỏ bài toán - Giải từng bước một
- Test với nhiều case - Thử các trường hợp khác nhau
- 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!