Formatted String
Tìm hiểu về cách sử dụng formatted string trong Python
📚 Tổng quan
F-String (Formatted String Literals) là cách hiện đại và hiệu quả nhất để format chuỗi trong Python, được giới thiệu từ Python 3.6.
🎯 Mục tiêu bài học
- Hiểu được cú pháp f-string
- Biết cách sử dụng f-string với biến, biểu thức
- Thành thạo format số, chuỗi, ngày tháng
- Áp dụng vào bài tập thực tế
🔤 Cú pháp cơ bản
1. Cú pháp f-string
f"Chuỗi với {biến} và {biểu_thức}"
2. Ví dụ đơn giản
name = "An" age = 15 print(f"Tôi tên là {name} và {age} tuổi") # Output: Tôi tên là An và 15 tuổi
📝 Các cách sử dụng f-string
1. Với biến đơn giản
# Biến chuỗi name = "Minh" print(f"Xin chào {name}!") # Biến số score = 95 print(f"Điểm của bạn là {score}") # Biến boolean is_student = True print(f"Bạn có phải học sinh không? {is_student}")
2. Với biểu thức
# Tính toán trong f-string a = 10 b = 5 print(f"Tổng: {a + b}") print(f"Hiệu: {a - b}") print(f"Tích: {a * b}") print(f"Thương: {a / b}") # So sánh age = 18 print(f"Bạn có đủ tuổi lái xe không? {age >= 18}")
3. Với phương thức
# Phương thức chuỗi text = "python programming" print(f"Chữ hoa: {text.upper()}") print(f"Chữ thường: {text.lower()}") print(f"Tiêu đề: {text.title()}") # Phương thức list numbers = [1, 2, 3, 4, 5] print(f"Số phần tử: {len(numbers)}") print(f"Tổng: {sum(numbers)}") print(f"Giá trị lớn nhất: {max(numbers)}")
🔢 Format số
1. Format số nguyên
number = 42 print(f"Số: {number}") print(f"Số với 5 chữ số: {number:05d}") print(f"Số với dấu cách: {number:5d}")
2. Format số thực
pi = 3.14159 print(f"Pi: {pi}") print(f"Pi với 2 chữ số thập phân: {pi:.2f}") print(f"Pi với 4 chữ số thập phân: {pi:.4f}") print(f"Pi với 10 ký tự: {pi:10.2f}")
3. Format phần trăm
percentage = 0.85 print(f"Phần trăm: {percentage:.1%}") print(f"Phần trăm với 2 chữ số: {percentage:.2%}")
4. Format số với dấu phẩy
big_number = 1234567 print(f"Số lớn: {big_number:,}") print(f"Số lớn với dấu phẩy: {big_number:,}")
📅 Format ngày tháng
from datetime import datetime now = datetime.now() print(f"Ngày hiện tại: {now}") print(f"Ngày: {now:%Y-%m-%d}") print(f"Giờ: {now:%H:%M:%S}") print(f"Ngày đầy đủ: {now:%d/%m/%Y %H:%M}")
🎨 Format nâng cao
1. Căn lề
text = "Python" print(f"|{text:10}|") # Căn trái print(f"|{text:>10}|") # Căn phải print(f"|{text:^10}|") # Căn giữa
2. Fill character
text = "Python" print(f"|{text:*>10}|") # Fill bằng * print(f"|{text:-^10}|") # Fill bằng - print(f"|{text:=<10}|") # Fill bằng =
3. Format với dấu ngoặc nhọn
# Để hiển thị dấu ngoặc nhọn print(f"{{Python}}") # Output: {Python} print(f"{{{{Python}}}}") # Output: {{Python}}
🔧 Ứng dụng thực tế
1. Tạo báo cáo điểm
def create_grade_report(name, math, english, science): average = (math + english + science) / 3 return f""" === BÁO CÁO ĐIỂM === Học sinh: {name} Toán: {math:5.1f} Tiếng Anh: {english:5.1f} Khoa học: {science:5.1f} Điểm trung bình: {average:5.2f} ================== """ # Sử dụng report = create_grade_report("An", 8.5, 9.0, 7.5) print(report)
2. Tính tiền hóa đơn
def calculate_bill(items): total = 0 bill = "=== HÓA ĐƠN ===\n" for item, price in items.items(): bill += f"{item:15} {price:8,.0f} VND\n" total += price bill += f"{'Tổng cộng':15} {total:8,.0f} VND\n" bill += "================" return bill # Sử dụng items = {"Cơm gà": 25000, "Nước cam": 15000, "Bánh": 8000} print(calculate_bill(items))
3. Hiển thị thời gian
import time def show_timer(seconds): for i in range(seconds, 0, -1): minutes = i // 60 secs = i % 60 print(f"\rThời gian còn lại: {minutes:02d}:{secs:02d}", end="") time.sleep(1) print("\nHết thời gian!") # Sử dụng show_timer(10)
🎯 Bài tập thực hành
Bài tập 1: Tạo thẻ học sinh
def create_student_card(name, student_id, class_name, gpa): card = f""" ╔══════════════════════════════════════╗ ║ THẺ HỌC SINH ║ ╠══════════════════════════════════════╣ ║ Tên: {name:25} ║ ║ Mã số: {student_id:22} ║ ║ Lớp: {class_name:25} ║ ║ GPA: {gpa:26.2f} ║ ╚══════════════════════════════════════╝ """ return card # Test print(create_student_card("Nguyễn Văn An", "HS001", "10A1", 8.75))
Bài tập 2: Tính lãi suất ngân hàng
def calculate_interest(principal, rate, years): interest = principal * (1 + rate/100) ** years - principal return f""" === TÍNH LÃI SUẤT === Số tiền gốc: {principal:15,.0f} VND Lãi suất: {rate:15.2f}% Thời gian: {years:15} năm Lãi thu được: {interest:15,.0f} VND Tổng tiền: {principal + interest:15,.0f} VND ==================== """ # Test print(calculate_interest(10000000, 7.5, 3))
Bài tập 3: Tạo bảng cửu chương
def multiplication_table(n): table = f"=== BẢNG CỬU CHƯƠNG {n} ===\n" for i in range(1, 11): result = n * i table += f"{n:2d} x {i:2d} = {result:3d}\n" return table # Test print(multiplication_table(7))
⚠️ Lưu ý quan trọng
1. Phiên bản Python
- F-string chỉ có từ Python 3.6+
- Với Python < 3.6, dùng hoặc
.format()
%
2. Hiệu suất
# Tốt - f-string nhanh nhất name = "An" print(f"Xin chào {name}") # Chậm hơn - .format() print("Xin chào {}".format(name)) # Chậm nhất - % print("Xin chào %s" % name)
3. Debugging
# Debug với f-string x = 10 y = 20 print(f"{x=}, {y=}") # Output: x=10, y=20 print(f"{x + y=}") # Output: x + y=30
🎯 Bài tập về nhà
Bài 1: Tạo menu nhà hàng
menu_items = { "Phở bò": 45000, "Cơm tấm": 35000, "Bún chả": 40000, "Chả cá": 50000 } # Tạo menu đẹp với f-string
Bài 2: Tính điểm GPA
subjects = { "Toán": 8.5, "Văn": 7.8, "Anh": 9.2, "Lý": 8.0, "Hóa": 7.5 } # Tính và hiển thị GPA với f-string
Bài 3: Tạo lịch học
schedule = { "Thứ 2": ["Toán", "Văn", "Anh"], "Thứ 3": ["Lý", "Hóa", "Sinh"], "Thứ 4": ["Toán", "Văn", "Sử"], "Thứ 5": ["Địa", "Anh", "Toán"], "Thứ 6": ["Văn", "Lý", "Hóa"] } # Tạo lịch học đẹp với f-string
📋 Tóm tắt
✅ Đã học:
- Cú pháp f-string:
f"chuỗi {biến}"
- Format số: ,
{số:.2f}
{số:,}
- Căn lề: ,
{text:>10}
{text:^10}
- Ứng dụng thực tế
🎯 Kỹ năng đạt được:
- Thành thạo f-string
- Format dữ liệu đẹp
- Tạo báo cáo, menu, bảng
- Code sạch và hiệu quả
📚 Tài liệu tham khảo:
- Python Documentation: String Formatting
- Real Python: f-strings
- PEP 498: Literal String Interpolation