Chuỗi là kiểu dữ liệu được tạo nên từ danh sách các kí tự (character), nó có thể là một từ, một câu hoặc kể cả một đoạn văn. Để biểu diễn một chuỗi, chúng ta sẽ bao quanh chúng bằng cặp ngoặc kép (") hoặc cặp ngoặc đơn (') đều được.
Ví dụ như với câu lệnh print cơ bản nhất mà chúng ta biết, thì giá trị truyền vào có thể là một chuỗi:
print("Hello world")
Ở câu lệnh trên, chuỗi là "Hello world". Hơn nữa, các bạn cần phải lưu ý tránh nhầm lẫn giữa biến và chuỗi. Biến sẽ không được bao quanh bởi các cặp ngoặc.
a = 5 # Gán biến a là 5
print(a) # In ra biến a
print("a") # In ra chuỗi "a"
Giống như các kiểu dữ liệu khác, chuỗi cũng có thể gán cho một biến bằng cú pháp thông thường:
Cú pháp:
<bien> = <gia_tri>
Ví dụ như nếu bạn muốn gán "I am Phuc" vào biến chuoi_1 và in ra, thì bạn có thể làm như sau.
Như đã lưu ý ở bài về nhập, xuất dữ liệu. lệnh input() bình thường sẽ nhập vào một chuỗi (xâu ký tự), nên các em chỉ cần viết bình thường mà không cần làm gì thêm.
Ví dụ. Nhập vào họ tên bạn và xuất ra màn hình dòng chữ: "Xin chào {tên bạn}"
name = input("Hay nhap ten ban:")
print("Xin chao ", name)
Như đã được trình bày ở đầu bài, chuỗi có thể được xem là một danh sách các kí tự. Do đó, bạn có thể truy cập vào một kí tự của chuỗi như cách ta truy cập vào một phần tử trong danh sách:
Cú pháp:
<bien>[<vi_tri>]
Bạn cũng cần lưu ý rằng vị trí ở đây sẽ được tính từ 0 như cách mà danh sách hoạt động. Ví dụ như bạn muốn truy cập vào kí tự "h" trong chuỗi "Phuc" và in ra, bạn có thể viết như sau.
Nhiệm vụ 1. Viết chương trình cho phép người dùng nhập vào một xâu S. Tiếp tục cho người dùng nhập một số nguyên a. Xuất ra màn hình 2 dòng:
Dòng đầu là xâu S
Dòng thứ 2 là ký tự tại vị trí a.
Ví dụ:
input | output
------------------------
Chao ban | o
3
Nhiệm vụ 1. Viết chương trình cho phép người dùng nhập vào một xâu S. Tiếp tục cho người dùng nhập một số nguyên a. Xuất ra màn hình 2 dòng:
Dòng đầu là xâu S
Dòng thứ 2 là ký tự tại vị trí a.
Ví dụ:
input | output
------------------------
Chao ban | Chao ban
3 | o
Thay vì truy cập vào duy nhất một kí tự, bạn có thể lấy một đoạn (lát cắt) của chuỗi bằng cách nhập vào hai vị trí đầu cuối của đoạn cần lấy. Tuy nhiên, cần lưu ý là vị trí sau cần phải tăng lên một đơn vị bởi vì vị trí cuối cùng là vị trí dừng.
Cú pháp:
bien[<vi_tri_dau>:<vi_tri_sau>]
Ví dụ như bạn muốn lấy đoạn "Ph" trong chuỗi "Phuc". Thì bạn sẽ bắt đầu từ vị trí 0, và kết thúc tại vị trí 1.
Nhiệm vụ 2. Viết chương trình cho phép người dùng nhập vào một xâu S. Tiếp tục cho người dùng nhập hai số nguyên a, b. Xuất ra màn hình 2 dòng:
Dòng đầu là xâu S
Dòng thứ 2 là dãy ký tự từ a đến
Ví dụ:
input | output
------------------------
Chao ban | Chao ban
2 5 | ao b
Một điểm lưu ý quan trọng về sự khác biệt của chuỗi so với danh sách, đó là chuỗi không thay đổi được (immutable), nhưng danh sách thì có thể thay đổi (mutable).
Ví dụ như nếu bạn có danh sách thì bạn có thể thay đổi phần tử của chúng như sau:
a = [0, 1, 2]
a[1] = 3
print(a) # [0, 3, 2]
Tuy nhiên, đối với chuỗi, bạn sẽ bị báo lỗi như sau.
'str' object does not support item assignment
Nếu như bạn muốn thay đổi kí tự trong chuỗi, thì bạn có thể tạo chuỗi mới từ chuỗi ban đầu.
a = "012"
b = a[0] + "3" + a[2]
print(b) # 032
Để thuận tiện cho việc xử lý chuỗi, chúng ta có thể tách một chuỗi thành nhiều phần. Ví dụ như khi người dùng nhập vào một chuỗi gồm họ và tên, bạn có thể tách chuỗi tại cách dấu cách (space) để từ đó trích xuất được tên của người dùng.
Cú pháp:
<bien>.split(<ki_tu_ngan_cach>)
Với cú pháp trên, bạn sẽ tách <bien> thành nhiều chuỗi con tại các kí tự ngăn cách được truyền vào. Kết quả trả về sẽ là một danh sách các chuỗi. Lưu ý rằng <ki_tu_ngan_cach> cũng phải là một chuỗi.
Để hình dung rõ hơn, dưới đây là ví dụ ta rút trích tên của người dùng từ họ và tên. Đầu tiên, ta sẽ tách họ và tên tại dấu cách, lưu kết quả vào biến tach_chuoi. Sau đó, để lấy phần tử cuối cùng trong danh sách, ta sử dụng vị trí -1 (cuối danh sách).
Nhiệm vụ 3. Viết chương trình cho phép người dùng nhập vào họ tên của một người. Xuất ra 3 dòng
Dòng đầu là họ tên đầy đủ
Dòng thứ 2 là họ của người đó
Dòng thứ 3 là tên của người đó
Ví dụ:
input | output
------------------------
Ly Tu Trong | Ly Tu Trong
| Ly
| Trong
Ngược lại với tách chuỗi, bạn cũng có thể gộp các chuỗi trong danh sách lại với nhau. Ví dụ như khi bạn có tên các ứng viên của một cuộc phỏng vấn, và cần gộp các tên này lại, ngăn cách bởi dấu chấm phẩy (;) thì đây là tình huống bạn có thể sử dụng.
Cú pháp:
<ki_tu_gop>.join(<danh_sach_chuoi>)
Để mô phỏng bài toán trên, ta có thể viết chương trình như sau.
Nhiệm vụ 4. Viết chương trình cho phép người dùng nhập vào hai số nguyên a, b. Xuất ra biểu thức dạng như sau:
a + b = tổng của a và b
Ví dụ:
input | output
------------------------
5 6 | 5 + 6 = 11
Nhiệm vụ 5. Viết chương trình cho phép người dùng nhập vào số nguyên N và một dãy N số nguyên number. Xuất ra biểu thức dạng như sau:
num1 + num2+ ...+numn= tổng của N số
Ví dụ:
input | output
------------------------
4 |
4 3 6 7 | 4+3+6+7 = 20
Để lấy được chiều dài của chuỗi, bạn có thể đơn giản sử dụng hàm len (viết tắt của chữ length). Một điểm lưu ý rằng các kí tự đặc biệt như dấu cách (space), cũng sẽ được tính là một kí tự.
Cú pháp:
len(<chuoi>)
Ví dụ như chuỗi "Xin chao" sẽ có chiều dài là 8. Bao gồm "Xin" là 3 kí tự; 1 dấu cách (space) và 4 kí tự "chao".
Có một số bạn sẽ thắc mắc rằng "Nếu mình sử dụng dấu ngoặc kép để khai báo một chuỗi, vậy thì làm sao để biểu diễn dấu ngoặc kép trong chuỗi?". Đối với một số kí tự đặc biệt, bạn có thể sử dụng thêm dấu xẹt "\" (backslash) trước chúng để biểu diễn:
Ví dụ như:
Dấu ngoặc kép \"
Dấu ngoặc đơn \'
Dấu xuống hàng \n (newline)
Bạn có thể tham khảo đoạn chương trình sau.
Ngoài các hàm thông dụng trên, các bạn còn có nhiều hàm hỗ trợ bạn xử lý chuỗi. Ở mục này, mình sẽ đề cập vài hàm bạn có thể sử dụng. Nếu bạn muốn tìm hiểu thêm nữa, thì bạn có thể tham khảo tại đây: W3School-String.
Hàm lowercase sẽ giúp bạn chuyển toàn bộ các kí tự in hoa thành kí tự viết thường.
Cú pháp:
<chuoi>.lower()
Nhiệm vụ 6. Viết chương trình cho phép nhập vào họ tên người dùng. Xuất ra họ tên người dùng ở dạng in thường
ví dụ:
input | output
-----------------------
Nguyen Du | nguyen du
Tương tự, chúng ta sẽ có hàm để viết in hoa tất cả các kí tự trong chuỗi lên.
Cú pháp:
<chuoi>.upper()
Bạn cũng có thể ép kiểu (type-casting) từ một biến có kiểu số thành kiểu chuỗi.
Cú pháp:
str(<bien>)
Ví dụ như là bạn muốn đếm xem một số có bao nhiêu chữ số, thì bạn có thể ép về kiểu chuỗi xong rồi lấy chiều dài của chuỗi đó.
Các em truy cập tkncoder.net --> bài tập --> danh sách bài tập
--> mở tìm kiếm --> tại ô mã bài các em gõ "K11_C5" --> bấm tìm kiếm
--> Cố gắng làm càng nhiều bài tập trong mục này càng tốt.