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}{biểu_thức}"

2. Ví dụ đơn giản

name = "An" age = 15 print(f"Tôi tên là {name}{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
    .format()
    hoặc
    %

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