Kí tự của xâu có chỉ số
Với `s = "Mây"`, `len(s)` bằng 3 và `s[0]` là `"M"`, `s[2]` là `"y"`. Một kí tự vẫn có kiểu `str`, không có kiểu kí tự riêng trong ví dụ Python này. Xâu rỗng `""` có độ dài 0. Với văn bản Unicode, `len` đếm các đơn vị kí tự theo cách Python lưu; một số dấu hoặc biểu tượng ghép có thể làm số đếm khác cách mắt nhìn. Bài dùng chữ đơn giản để luyện chỉ số, không lấy len làm quy tắc đếm mọi chữ hiển thị.
Bài luyện
Với `s = "Mây"`, giá trị `s[2]` là gì?
M ở chỉ số 0.
â ở chỉ số 1.
y ở chỉ số 2.
Xâu cũng đánh chỉ số từ 0.
Lời giải
Các kí tự M, â, y lần lượt có chỉ số 0, 1, 2. Vì vậy `s[2]` là xâu một kí tự `"y"`.
Xâu không cho gán một kí tự
Khác list, lệnh `s[0] = "N"` báo `TypeError` khi s là xâu. Muốn đổi `"Mây"` thành `"Nây"`, tạo xâu mới và gán lại tên:
```python
s = "Mây"
s = "N" + s[1:]
print(s)
```
Lát `s[1:]` lấy từ chỉ số 1 đến hết, là `"ây"`; ghép thêm `"N"` được `"Nây"`. Nếu s rỗng, lát từ 1 vẫn rỗng nhưng không có kí tự đầu để “thay”; phải xác định mục tiêu khi xử lí trường hợp rỗng.
Bài luyện
Muốn đổi `"Mây"` thành `"Nây"`, lệnh nào hợp lệ với xâu?
Xâu không cho gán từng kí tự.
Tạo xâu mới từ N và phần còn lại.
insert là phương thức list, không của str ở đây.
Không xóa trực tiếp một kí tự của str.
Lời giải
Xâu bất biến. `s[1:]` là `"ây"`; ghép `"N"` tạo `"Nây"` rồi gán lại cho s.
Bài luyện
Lệnh `s[0] = "N"` với `s = "Mây"` gây loại lỗi nào?
Xâu không hỗ trợ gán mục theo chỉ số.
Chỉ số 0 có tồn tại, nên không phải lỗi vượt phạm vi.
Kiểu str không cho item assignment.
Không có phép chia trong lệnh.
Lời giải
Chỉ số 0 hợp lệ để **đọc**, nhưng đối tượng str không hỗ trợ gán kí tự tại vị trí đó, nên Python báo `TypeError`.
Đang học