Mã ASCII và ứng dụng trong Python

Tìm hiểu về mã ASCII, cách sử dụng ord() và chr() trong Python

📚 Tổng quan

ASCII (American Standard Code for Information Interchange) là bảng mã ký tự chuẩn được sử dụng để biểu diễn các ký tự trong máy tính. Mỗi ký tự được gán một số duy nhất từ 0 đến 127.

🎯 Mục tiêu bài học

  • Hiểu được khái niệm và ý nghĩa của mã ASCII
  • Biết cách sử dụng hàm
    ord()
    chr()
    trong Python
  • Áp dụng ASCII vào các bài toán thực tế
  • Thành thạo việc kiểm tra và chuyển đổi ký tự

🔤 Cú pháp cơ bản

1. Hàm ord() - Chuyển ký tự thành mã ASCII

ord(ky_tu) # Trả về mã ASCII của ký tự

2. Hàm chr() - Chuyển mã ASCII thành ký tự

chr(ma_ascii) # Trả về ký tự tương ứng với mã ASCII

📊 Bảng mã ASCII cơ bản

Chữ hoa (A-Z): 65-90

# Chữ hoa print("Chữ hoa:") for i in range(65, 91): print(f"{i}: {chr(i)}", end=" ") print()

Chữ thường (a-z): 97-122

# Chữ thường print("Chữ thường:") for i in range(97, 123): print(f"{i}: {chr(i)}", end=" ") print()

Số (0-9): 48-57

# Số print("Số:") for i in range(48, 58): print(f"{i}: {chr(i)}", end=" ") print()

Ký tự đặc biệt

# Khoảng trắng: 32 print(f"Khoảng trắng: {ord(' ')}") # Dấu chấm: 46 print(f"Dấu chấm: {ord('.')}") # Dấu phẩy: 44 print(f"Dấu phẩy: {ord(',')}")

💻 Cách sử dụng ord() và chr()

1. Chuyển đổi cơ bản

# Từ ký tự sang mã ASCII print(f"A -> {ord('A')}") # 65 print(f"a -> {ord('a')}") # 97 print(f"0 -> {ord('0')}") # 48 print(f" -> {ord(' ')}") # 32 (khoảng trắng) # Từ mã ASCII sang ký tự print(f"65 -> {chr(65)}") # A print(f"97 -> {chr(97)}") # a print(f"48 -> {chr(48)}") # 0 print(f"32 -> '{chr(32)}'") # ' ' (khoảng trắng)

2. Tìm ký tự liền trước và liền sau

def tim_ky_tu_lien_ke(ky_tu): """Tìm ký tự liền trước và liền sau""" ma_ascii = ord(ky_tu) lien_truoc = chr(ma_ascii - 1) lien_sau = chr(ma_ascii + 1) print(f"Ký tự '{ky_tu}' có mã ASCII: {ma_ascii}") print(f"Liền trước: '{lien_truoc}' (mã {ma_ascii - 1})") print(f"Liền sau: '{lien_sau}' (mã {ma_ascii + 1})") # Ví dụ tim_ky_tu_lien_ke('B') # A và C tim_ky_tu_lien_ke('5') # 4 và 6

3. Kiểm tra loại ký tự

def kiem_tra_loai_ky_tu(ky_tu): """Kiểm tra và phân loại ký tự""" ma_ascii = ord(ky_tu) if 65 <= ma_ascii <= 90: return "Chữ hoa" elif 97 <= ma_ascii <= 122: return "Chữ thường" elif 48 <= ma_ascii <= 57: return "Số" elif ma_ascii == 32: return "Khoảng trắng" else: return "Ký tự đặc biệt" # Ví dụ print(f"'A' là: {kiem_tra_loai_ky_tu('A')}") print(f"'a' là: {kiem_tra_loai_ky_tu('a')}") print(f"'5' là: {kiem_tra_loai_ky_tu('5')}") print(f"' ' là: {kiem_tra_loai_ky_tu(' ')}") print(f"'.' là: {kiem_tra_loai_ky_tu('.')}")

🔍 Ứng dụng thực tế

1. Chuyển đổi chữ hoa/thường

def chuyen_chu_hoa(ky_tu): """Chuyển chữ thường thành chữ hoa""" ma_ascii = ord(ky_tu) if 97 <= ma_ascii <= 122: # Chữ thường return chr(ma_ascii - 32) return ky_tu def chuyen_chu_thuong(ky_tu): """Chuyển chữ hoa thành chữ thường""" ma_ascii = ord(ky_tu) if 65 <= ma_ascii <= 90: # Chữ hoa return chr(ma_ascii + 32) return ky_tu # Ví dụ print(f"a -> {chuyen_chu_hoa('a')}") # A print(f"A -> {chuyen_chu_thuong('A')}") # a

2. Mã hóa đơn giản

def ma_hoa_ceasar(text, buoc_nhay): """Mã hóa Caesar cipher""" ket_qua = "" for ky_tu in text: if ky_tu.isalpha(): # Xác định vị trí bắt đầu (A=0 hoặc a=0) if ky_tu.isupper(): vi_tri = ord(ky_tu) - ord('A') vi_tri_moi = (vi_tri + buoc_nhay) % 26 ket_qua += chr(vi_tri_moi + ord('A')) else: vi_tri = ord(ky_tu) - ord('a') vi_tri_moi = (vi_tri + buoc_nhay) % 26 ket_qua += chr(vi_tri_moi + ord('a')) else: ket_qua += ky_tu return ket_qua # Ví dụ text = "HELLO" ma_hoa = ma_hoa_ceasar(text, 3) print(f"'{text}' -> '{ma_hoa}'") # HELLO -> KHOOR

🎯 Bài tập thực hành

Bài tập 1: Tạo bảng ASCII

Viết chương trình in ra bảng ASCII từ 32 đến 126 (các ký tự có thể in được):

def in_bang_ascii(): print("Bảng mã ASCII (32-126):") print("Mã | Ký tự") print("----+------") for i in range(32, 127): if i == 32: print(f"{i:3d} | SPACE") else: print(f"{i:3d} | {chr(i)}")

Bài tập 2: Đếm loại ký tự

Viết chương trình đếm số lượng chữ hoa, chữ thường, số và ký tự đặc biệt trong một chuỗi:

def dem_loai_ky_tu(chuoi): chu_hoa = chu_thuong = so = ky_tu_dac_biet = 0 for ky_tu in chuoi: ma_ascii = ord(ky_tu) if 65 <= ma_ascii <= 90: chu_hoa += 1 elif 97 <= ma_ascii <= 122: chu_thuong += 1 elif 48 <= ma_ascii <= 57: so += 1 else: ky_tu_dac_biet += 1 return chu_hoa, chu_thuong, so, ky_tu_dac_biet # Ví dụ text = "Hello World 123!" hoa, thuong, so, dac_biet = dem_loai_ky_tu(text) print(f"Chữ hoa: {hoa}") print(f"Chữ thường: {thuong}") print(f"Số: {so}") print(f"Ký tự đặc biệt: {dac_biet}")

Bài tập 3: Tìm ký tự gần nhất

Viết chương trình tìm ký tự có mã ASCII gần nhất với một ký tự cho trước:

def tim_ky_tu_gan_nhat(ky_tu, danh_sach_ky_tu): """Tìm ký tự có mã ASCII gần nhất""" ma_muc_tieu = ord(ky_tu) ky_tu_gan_nhat = None khoang_cach_nho_nhat = float('inf') for kt in danh_sach_ky_tu: khoang_cach = abs(ord(kt) - ma_muc_tieu) if khoang_cach < khoang_cach_nho_nhat: khoang_cach_nho_nhat = khoang_cach ky_tu_gan_nhat = kt return ky_tu_gan_nhat, khoang_cach_nho_nhat # Ví dụ ky_tu = 'M' danh_sach = ['A', 'P', 'Z', 'K'] gan_nhat, khoang_cach = tim_ky_tu_gan_nhat(ky_tu, danh_sach) print(f"Ký tự gần '{ky_tu}' nhất là '{gan_nhat}' (khoảng cách: {khoang_cach})")

Bài tập 4: Kiểm tra mật khẩu

Viết chương trình kiểm tra độ mạnh của mật khẩu dựa trên ASCII:

def kiem_tra_mat_khau(mat_khau): """Kiểm tra độ mạnh mật khẩu""" co_chu_hoa = co_chu_thuong = co_so = co_ky_tu_dac_biet = False for ky_tu in mat_khau: ma_ascii = ord(ky_tu) if 65 <= ma_ascii <= 90: co_chu_hoa = True elif 97 <= ma_ascii <= 122: co_chu_thuong = True elif 48 <= ma_ascii <= 57: co_so = True else: co_ky_tu_dac_biet = True diem = 0 if co_chu_hoa: diem += 1 if co_chu_thuong: diem += 1 if co_so: diem += 1 if co_ky_tu_dac_biet: diem += 1 if len(mat_khau) >= 8: diem += 1 if diem <= 2: return "Yếu" elif diem <= 4: return "Trung bình" else: return "Mạnh" # Ví dụ mat_khau1 = "abc123" mat_khau2 = "Abc123!@" print(f"'{mat_khau1}': {kiem_tra_mat_khau(mat_khau1)}") print(f"'{mat_khau2}': {kiem_tra_mat_khau(mat_khau2)}")

📝 Tóm tắt

  • ASCII là bảng mã ký tự chuẩn, mỗi ký tự có một mã số duy nhất
  • ord() chuyển ký tự thành mã ASCII
  • chr() chuyển mã ASCII thành ký tự
  • Ứng dụng: chuyển đổi chữ hoa/thường, mã hóa, kiểm tra loại ký tự
  • ASCII giúp hiểu cách máy tính xử lý và lưu trữ ký tự

🔗 Liên kết bài học