Python không cho phép cộng int vào str trực tiếp. Cần chuyển đổi qua mã ASCII/Unicode.
Cách 1: ord() + chr() - Chuẩn, rõ ràng
char = 't'
# Chuyển char -> mã ASCII/Unicode
code = ord(char) # 116
# Tăng mã
code += 1 # 117
# Chuyển ngược
next_char = chr(code) # 'u'
print(f"Ký tự sau '{char}' là '{next_char}'")
Kết quả
Ký tự sau 't' là 'u'
Cách 2: bytes - Thao tác trên byte level
char = 't'
# Str -> bytes (UTF-8)
b = bytes(char, 'utf-8') # b't'
# Tăng byte đầu tiên
next_byte = b[0] + 1 # 117
# Byte -> char
next_char = chr(next_byte)
print(f"Ký tự sau '{char}' là '{next_char}'")
Cách 3: Increment ký tự trong chuỗi dài
name = "tutorialspoint"
# Chuyển toàn bộ sang bytes
b = bytes(name, 'utf-8')
# Tăng ký tự tại index 6 ('a' -> 'b')
index = 6
new_byte = b[index] + 1
# Tạo bytes mới (bytes immutable!)
new_bytes = b[:index] + bytes([new_byte]) + b[index+1:]
# Decode về str
new_name = new_bytes.decode('utf-8')
print(f"Sau khi tăng 'a': {new_name}") # tutoriblspoint
Lưu ý quan trọng
- String immutable → không sửa được in-place.
- Bytes immutable → phải tạo bytes mới.
- Cách
ord/chrhoạt động với Unicode đầy đủ (bao gồm emoji, tiếng Việt...). - Cách
bytesphụ thuộc encoding (UTF-8: 1 char có thể >1 byte).
Ví dụ Unicode
# Tiếng Việt ch = 'à' print(chr(ord(ch) + 1)) # á # Emoji emoji = '😀' # U+1F600 print(chr(ord(emoji) + 1)) # 😁 (U+1F601)
Kết luận
Dùng ord() + chr() để tăng ký tự an toàn, hỗ trợ Unicode đầy đủ. Cách bytes phức tạp hơn, chỉ dùng khi cần thao tác byte-level cụ thể.