Ngân hàng câu hỏi của chương

Câu hỏi: PRP201c - Phần 2: Cấu trúc dữ liệu và xử lý văn bản

41 câu trắc nghiệm kèm lời giải của môn PRP201c - Lập trình Python, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/41 câuCòn 21
Aprint(x[14/17])
Bprint(x[14:17])
Cprint(x[14:3])
Dprint(x[14+3])
Lời giải
Đáp án đúng: "print(x[14:17])". Cú pháp cắt chuỗi (slicing) x[start:stop] lấy các ký tự từ chỉ số start đến trước chỉ số stop, chỉ số đếm từ 0. Trong 'From marquard@uct.ac.za', chữ F ở vị trí 0, dấu cách ở 4, ký tự @ ở 13, nên u ở 14, c ở 15, t ở 16 và dấu chấm ở 17; x[14:17] lấy đúng ba vị trí 14, 15, 16 thành 'uct', vị trí 17 bị loại vì stop không được tính. "print(x[14/17])" sai vì 14/17 là phép chia ra số thực khoảng 0,82, mà chỉ số chuỗi phải là số nguyên nên Python báo TypeError. "print(x[14:3])" hiểu nhầm số thứ hai là độ dài; thực ra 3 là vị trí dừng, nhỏ hơn 14 nên lát cắt rỗng và lệnh in ra chuỗi rỗng. "print(x[14+3])" tính 14+3 = 17 rồi lấy một ký tự duy nhất ở vị trí 17, tức dấu chấm, không phải ba ký tự cần tìm.
Mở trang câu hỏi này →
Aupper()
Buppercase()
CtoUpperCase()
DupperCase()
Lời giải
Đáp án đúng: "upper()". Trong Python, chuỗi (str) là đối tượng có sẵn nhiều phương thức (method); str.upper() trả về một chuỗi mới với mọi chữ cái chuyển thành chữ hoa, còn chuỗi gốc không đổi vì chuỗi là kiểu bất biến (immutable), ví dụ 'hello'.upper() cho 'HELLO'. Phương án "uppercase()" không phải phương thức của str, gọi nó sẽ ném AttributeError. Phương án "toUpperCase()" là tên phương thức tương ứng trong JavaScript và Java, không tồn tại trong Python. Phương án "upperCase()" viết kiểu camelCase cũng không có trong Python; các phương thức chuỗi của Python viết thường toàn bộ, và vì Python phân biệt chữ hoa chữ thường nên upperCase là một tên khác hẳn upper. Phương thức đi cặp với upper() là lower(), chuyển chuỗi sang chữ thường.
Mở trang câu hỏi này →
AThe values of x and y are unchanged
BBoth x and y are -5
CBoth x and y are 5
DThe values of x and y are swapped
Lời giải
Đáp án đúng: "The values of x and y are unchanged". Lần theo vế phải: tuple (y, x) được tạo trước với giá trị (-5, 5), sau đó lát cắt [::-1] đảo ngược tuple thành (5, -5); cuối cùng phép gán nhiều biến (tuple unpacking) gán phần tử đầu cho x và phần tử sau cho y, nên x = 5 và y = -5, đúng như ban đầu. Việc đảo hai lần (đổi chỗ khi tạo tuple rồi đảo lại bằng [::-1]) triệt tiêu nhau. "The values of x and y are swapped" chỉ đúng nếu viết x, y = (y, x) mà không có [::-1]. "Both x and y are -5" sai vì x nhận 5, không có bước nào chép -5 vào cả hai biến. "Both x and y are 5" sai vì y nhận phần tử thứ hai của (5, -5) là -5.
Mở trang câu hỏi này →
4How do you read a file line by line?4 lựa chọn
Afile.read()
Bfor line in file:
Cfile.write()
Dfile.line()
Lời giải
Đáp án đúng: "for line in file:". Đối tượng tệp trong Python là một iterable (đối tượng lặp được): mỗi vòng lặp for lấy phần tử kế tiếp thì tệp trả về một dòng, kèm cả ký tự xuống dòng ở cuối, nên đây là cách chuẩn để đọc tệp lần lượt từng dòng; cách này đọc dần nên tiết kiệm bộ nhớ khi tệp rất lớn. "file.read()" đọc toàn bộ nội dung tệp thành một chuỗi duy nhất, không tách theo dòng; muốn có từng dòng phải gọi thêm splitlines hoặc dùng readlines. "file.write()" dùng để ghi dữ liệu vào tệp, ngược hẳn với việc đọc, và chỉ chạy khi tệp được mở ở chế độ 'w' hoặc 'a'. "file.line()" không phải phương thức của đối tượng tệp, gọi nó sẽ gây AttributeError; phương thức gần nghĩa có thật là readline(), mỗi lần gọi đọc đúng một dòng.
Mở trang câu hỏi này →
Đề bài
d = dict()
for c in word:
    d[c] = d.get(c, 0) + 1
print(d)
A{'b': 1, 'r': 2, 'o': 1, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 1}
B{'b': 1, 'r': 1, 'o': 2, 'n': 1, 't': 1, 's': 2, 'a': 2, 'u': 2}
C{'b': 1, 'r': 2, 'o': 2, 'n': 1, 's': 2, 'a': 2, 'u': 2, 't': 1}
D{'b': 1, 'r': 1, 'o': 1, 'n': 1, 't': 1, 's': 1, 'a': 1, 'u': 1}
Lời giải
Đáp án đúng: "{'b': 1, 'r': 2, 'o': 2, 'n': 1, 's': 2, 'a': 2, 'u': 2, 't': 1}". Đoạn mã dùng mẫu đếm tần suất bằng dict: d.get(c, 0) trả về số đếm hiện có của ký tự c, hoặc 0 nếu chưa có khoá đó, rồi cộng 1 và gán lại. Lần theo từng chữ của brontosaurus (b-r-o-n-t-o-s-a-u-r-u-s) ta có b 1, r 2, o 2, n 1, t 1, s 2, a 1, u 2, và vì từ Python 3.7 dict giữ thứ tự chèn khoá, kết quả thật in ra là {'b': 1, 'r': 2, 'o': 2, 'n': 1, 't': 1, 's': 2, 'a': 1, 'u': 2}. Cần nói thẳng: không phương án nào khớp từng ký tự; phương án được chọn là phương án gần nhất, đúng số đếm của r, o, s, u, chỉ lệch số đếm của a (từ này chỉ có một chữ a) và vị trí khoá t. Phương án "{'b': 1, 'r': 2, 'o': 1, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 1}" sai ở o, n, s, u và a. Phương án "{'b': 1, 'r': 1, 'o': 2, 'n': 1, 't': 1, 's': 2, 'a': 2, 'u': 2}" đếm r chỉ một lần dù r xuất hiện hai lần, lại sai cả a. Phương án "{'b': 1, 'r': 1, 'o': 1, 'n': 1, 't': 1, 's': 1, 'a': 1, 'u': 1}" coi mọi chữ chỉ xuất hiện một lần, tức là bỏ mất bước cộng dồn.
Mở trang câu hỏi này →
AFilename = savefilename()
BFilename = asksavefilename()
CFilename = asksaveasfilename()
DNo such option in python
Lời giải
Đáp án đúng: "Filename = asksaveasfilename()". Trong Tkinter, mô-đun tkinter.filedialog cung cấp hàm asksaveasfilename() mở hộp thoại "Save As" (lưu thành) và trả về đường dẫn tệp người dùng gõ hoặc chọn, còn chuỗi rỗng nếu bấm huỷ; hàm chỉ trả tên tệp, việc ghi nội dung do chương trình tự làm bằng open(). Mô-đun này còn có askopenfilename() cho hộp thoại mở tệp. "Filename = savefilename()" sai vì filedialog không có hàm nào tên savefilename. "Filename = asksavefilename()" sai vì tên hàm thiếu chữ "as", gọi sẽ gây AttributeError hoặc NameError. "No such option in python" sai vì thư viện chuẩn đi kèm Tkinter đã có sẵn hộp thoại lưu tệp này.
Mở trang câu hỏi này →
A{"apple", "banana", "cherry"}
B{"name": "apple", "color": "green"}
C["apple", "banana", "cherry"]
D("apple", "banana", "cherry")
Lời giải
Đáp án đúng: "["apple", "banana", "cherry"]". List (danh sách) trong Python được viết bằng cặp ngoặc vuông, các phần tử cách nhau bởi dấu phẩy; list có thứ tự, cho phép phần tử trùng lặp và thay đổi được (mutable), ví dụ có thể gọi append hay gán lại một phần tử theo chỉ số. "{"apple", "banana", "cherry"}" dùng ngoặc nhọn chỉ chứa giá trị nên là set (tập hợp): không có thứ tự, không giữ phần tử trùng và không truy cập được theo chỉ số. "{"name": "apple", "color": "green"}" dùng ngoặc nhọn với các cặp khoá và giá trị ngăn bởi dấu hai chấm nên là dictionary (từ điển), tra cứu theo khoá chứ không theo vị trí. "("apple", "banana", "cherry")" dùng ngoặc tròn nên là tuple (bộ giá trị): cũng có thứ tự như list nhưng bất biến (immutable), không sửa được sau khi tạo.
Mở trang câu hỏi này →
8What does the following Python code print out?4 lựa chọncó code
Đề bài
a = [1, 2, 3, 8]
b = [4, 5, 6]
c = a + b
print (c)
A28
B[1, 2, 3, 8, 4, 5, 6]
CIt raises an exception
D7
Lời giải
Đáp án đúng: "[1, 2, 3, 8, 4, 5, 6]". Với hai list (danh sách), toán tử + thực hiện phép nối (concatenation): nó tạo một list mới chứa các phần tử của a theo đúng thứ tự, tiếp theo là các phần tử của b, còn a và b giữ nguyên. Vì vậy c là [1, 2, 3, 8] nối với [4, 5, 6] và print(c) in ra list bảy phần tử đó. Phương án "28" là một số nguyên, kiểu kết quả chỉ có khi cộng số học; + giữa hai list không cộng giá trị các phần tử, và ngay cả sum(a + b) cũng cho 29 chứ không phải 28. Phương án "It raises an exception" sai vì + giữa hai list là hoàn toàn hợp lệ; ngoại lệ TypeError chỉ xảy ra khi cộng list với kiểu khác, chẳng hạn a + 5. Phương án "7" trùng với độ dài len(c), nhưng print(c) in chính nội dung list chứ không in số phần tử. Khoảng trắng trong print (c) không ảnh hưởng gì tới kết quả.
Mở trang câu hỏi này →
A[ 'abcd', 786 , 2.23, 'john', 70.2 ]
Blist
CError
DNone of the others
Lời giải
Đáp án đúng: "[ 'abcd', 786 , 2.23, 'john', 70.2 ]". Câu này viết theo Python 2, nơi print là câu lệnh (statement) nên print list in ra biểu diễn của danh sách, tức toàn bộ các phần tử theo đúng thứ tự trong ngoặc vuông; cần nói rõ trên Python 3 print là hàm nên dòng print list báo lỗi cú pháp, phải viết print(list), và khi đó kết quả in ra có dạng ['abcd', 786, 2.23, 'john', 70.2], Python tự chuẩn hoá khoảng trắng chứ không giữ dấu cách thừa như cách chép trong phương án, nhưng nội dung và thứ tự phần tử vẫn là danh sách đó nên phương án này vẫn là đáp án. "list" sai vì print in giá trị mà biến list đang trỏ tới, không in tên biến. "Error" chỉ đúng nếu chạy nguyên văn trên Python 3, còn theo ngữ nghĩa Python 2 mà câu hỏi dùng thì lệnh chạy bình thường. "None of the others" sai vì đã có phương án khớp với nội dung in ra. Lưu ý thêm: đặt tên biến là list che mất hàm dựng sẵn list(), nên tránh trong mã thật.
Mở trang câu hỏi này →
ASET
BTUPLE
CLIST
DDICTIONARY
Lời giải
Đáp án đúng: "LIST". List (danh sách) trong Python giữ đúng thứ tự phần tử theo lúc thêm vào (ordered), cho phép sửa, thêm, xoá phần tử sau khi tạo (changeable, hay mutable) và chấp nhận phần tử trùng nhau, ví dụ [1, 2, 2, 3] là hợp lệ. "SET" là tập hợp: không có thứ tự cố định, không truy cập theo chỉ số và tự loại bỏ phần tử trùng, nên {1, 2, 2} chỉ còn {1, 2}. "TUPLE" có thứ tự và cho phép trùng, nhưng là bất biến (immutable): tạo xong không gán lại phần tử được, nên trượt tiêu chí changeable. "DICTIONARY" lưu cặp key–value; từ Python 3.7 dict giữ thứ tự chèn và sửa được, nhưng mỗi key phải duy nhất, nên không cho phép thành viên trùng như câu hỏi yêu cầu.
Mở trang câu hỏi này →
A["apple", "banana", "cherry"]
B{"name": "apple", "color": "green"}
C{"apple", "banana", "cherry"}
D("apple", "banana", "cherry")
Lời giải
Đáp án đúng: "("apple", "banana", "cherry")". Tuple (bộ giá trị) trong Python được viết bằng cặp ngoặc tròn, các phần tử cách nhau bởi dấu phẩy; tuple có thứ tự, truy cập được theo chỉ số nhưng bất biến (immutable): sau khi tạo không thêm, xoá hay gán lại phần tử được, nhờ vậy tuple dùng được làm khoá của dictionary và nhẹ hơn list. "["apple", "banana", "cherry"]" dùng ngoặc vuông nên là list, cũng có thứ tự nhưng thay đổi được. "{"name": "apple", "color": "green"}" dùng ngoặc nhọn với các cặp khoá và giá trị nên là dictionary (từ điển), tra cứu theo khoá. "{"apple", "banana", "cherry"}" dùng ngoặc nhọn chỉ chứa giá trị nên là set (tập hợp), không có thứ tự và không giữ phần tử trùng. Lưu ý chính dấu phẩy mới tạo nên tuple: một phần tử phải viết kèm dấu phẩy như ("apple",).
Mở trang câu hỏi này →
APython compares the second element and finds 1 < 3
BPython compares the third element and finds 2 < 4
CPython compares the first element and finds 0 < 0
DPython compares the second element and finds 1 > 3
Lời giải
Đáp án đúng: "Python compares the second element and finds 1 < 3". Tuple được so sánh theo thứ tự từ điển (lexicographic): Python so cặp phần tử đầu tiên, nếu bằng nhau thì chuyển sang cặp kế tiếp, và dừng ngay ở cặp đầu tiên khác nhau; kết quả của cặp đó quyết định cả phép so sánh, các phần tử phía sau không được xét. Ở đây 0 == 0 nên chưa phân định, sang phần tử thứ hai thấy 1 < 3, vậy cả biểu thức là True. "Python compares the third element and finds 2 < 4" sai vì phép so sánh đã dừng ở phần tử thứ hai; dù phần tử thứ ba có lớn hơn thì kết quả vẫn là True. "Python compares the first element and finds 0 < 0" sai vì 0 < 0 là False; phần tử đầu bằng nhau chỉ khiến Python đi tiếp chứ không quyết định kết quả. "Python compares the second element and finds 1 > 3" sai vì 1 > 3 là False; nếu thật như vậy thì biểu thức đã trả về False.
Mở trang câu hỏi này →
A[17, 123]
B[5, 17]
C[17, 5]
DIndexError
Lời giải
Đáp án đúng: "[17, 5]". List (danh sách) trong Python là kiểu khả biến (mutable) và đánh chỉ số từ 0: numbers[0] là 17, numbers[1] là 123. Câu lệnh gán numbers[1] = 5 thay phần tử ở chỉ số 1 bằng 5 ngay trên chính list đó, nên numbers trở thành [17, 5]. Phương án "[17, 123]" cho rằng list không đổi, điều chỉ xảy ra với kiểu bất biến như tuple hay str, mà khi đó phép gán còn ném TypeError chứ không lặng lẽ giữ nguyên. Phương án "[5, 17]" vừa đặt 5 lên đầu vừa làm mất 123, không khớp với phép gán theo chỉ số, vốn chỉ thay đúng một vị trí và giữ nguyên thứ tự. Phương án "IndexError" sai vì chỉ số 1 nằm trong phạm vi hợp lệ 0 tới 1 của list hai phần tử; IndexError chỉ xảy ra với numbers[2] trở lên. Nói chặt, bản thân câu lệnh gán không trả về giá trị, câu hỏi muốn hỏi nội dung list sau khi gán.
Mở trang câu hỏi này →
14What is the output of print('X\nY')?4 lựa chọn
AXnY
BX Y
CX newline Y
DError
Lời giải
Đáp án đúng: "X newline Y". Trong chuỗi Python, cặp ký tự \n là chuỗi thoát (escape sequence) biểu diễn một ký tự xuống dòng, nên chuỗi 'X\nY' thực chất chỉ có ba ký tự: X, ký tự newline và Y. Khi print in ra, con trỏ xuống dòng sau X, nên màn hình hiện X ở dòng thứ nhất và Y ở dòng thứ hai; phương án mô tả đúng điều đó bằng lời. "XnY" sai vì kể cả dùng chuỗi thô (raw string) r'X\nY', khi đó dấu gạch chéo được giữ nguyên và in ra X, gạch chéo, n, Y; không trường hợp nào dấu gạch chéo tự biến mất để còn lại XnY. "X Y" sai vì \n không phải dấu cách; muốn in dấu cách phải viết 'X Y' hoặc print('X', 'Y'). "Error" sai vì \n là chuỗi thoát hợp lệ, lệnh chạy bình thường.
Mở trang câu hỏi này →
APython lists store multiple values and dictionaries store a single value
BPython dictionaries are a collection and lists are not a collection
CPython lists are indexed using integers and dictionaries can use strings as indexes
DPython lists can store strings and dictionaries can only store words
Lời giải
Đáp án đúng: "Python lists are indexed using integers and dictionaries can use strings as indexes". List là dãy có thứ tự, mỗi phần tử được truy cập bằng vị trí nguyên bắt đầu từ 0, như lst[0]; dictionary (từ điển) là tập các cặp key–value, truy cập bằng key do ta tự đặt, thường là chuỗi, như counts['bob']. Đó là khác biệt cốt lõi: list tra theo vị trí, dict tra theo nhãn. "Python lists store multiple values and dictionaries store a single value" sai vì cả hai đều chứa nhiều giá trị; một dict có thể có hàng nghìn cặp. "Python dictionaries are a collection and lists are not a collection" sai vì list và dict đều là collection (kiểu tập hợp, một biến chứa nhiều giá trị). "Python lists can store strings and dictionaries can only store words" sai vì giá trị trong dict có thể là bất kỳ đối tượng nào: số, chuỗi, list, thậm chí dict khác; key cũng có thể là số nguyên hay tuple, miễn là kiểu bất biến băm được.
Mở trang câu hỏi này →
16What would the following Python code print out?4 lựa chọncó code
Đề bài
stuff = dict()
print(stuff['candy'])
A-1
B0
CThe program would fail with a traceback
Dcandy
Lời giải
Đáp án đúng: "The program would fail with a traceback". dict() tạo một từ điển rỗng, và truy cập bằng ngoặc vuông stuff['candy'] với một khoá (key) chưa tồn tại sẽ phát sinh ngoại lệ KeyError: 'candy'; không có try/except nên chương trình dừng và in traceback (vết lỗi). Muốn lấy giá trị mặc định khi thiếu khoá thì dùng stuff.get('candy', 0) hoặc kiểm tra 'candy' in stuff trước. "-1" sai vì đó là quy ước của str.find khi không tìm thấy, từ điển không trả -1. "0" sai vì từ điển không tự trả 0 cho khoá thiếu; chỉ get với mặc định 0 hoặc collections.defaultdict(int) mới làm vậy. "candy" sai vì truy cập theo khoá trả về giá trị gắn với khoá, không trả lại chính tên khoá, và ở đây chưa có giá trị nào.
Mở trang câu hỏi này →
17What is the purpose of the following Python code?4 lựa chọncó code
Đề bài
fhand = open('mbox.txt')
x = 0
for line in fhand:
    x = x + 1

print x

ARemove the leading and trailing spaces from each line in mbox.txt
BCount the lines in the file 'mbox.txt'
CConvert the lines in mbox.txt to upper case
DReverse the order of the lines in mbox.txt
Lời giải
Đáp án đúng: "Count the lines in the file 'mbox.txt'". Lần theo mã: open mở tệp và trả về đối tượng tệp fhand; biến x khởi tạo bằng 0; vòng lặp for line in fhand chạy một lần cho mỗi dòng của tệp, mỗi lần cộng x thêm 1, thân vòng lặp không hề động tới nội dung của line; cuối cùng in x, tức tổng số dòng. Đây là mẫu biến đếm (counter) kinh điển khi xử lý tệp. Lưu ý print x không có ngoặc là cú pháp Python 2; ở Python 3 phải viết print(x), nếu không sẽ báo SyntaxError, nhưng mục đích của đoạn mã không đổi. "Remove the leading and trailing spaces from each line in mbox.txt" cần gọi line.strip() rồi ghi kết quả ra đâu đó, mã không có bước này. "Convert the lines in mbox.txt to upper case" cần gọi line.upper(), cũng không xuất hiện. "Reverse the order of the lines in mbox.txt" cần đọc mọi dòng vào một list rồi đảo bằng reverse() hoặc lát cắt [::-1]; hơn nữa tệp được mở ở chế độ đọc mặc định nên mã không thể sửa nội dung tệp.
Mở trang câu hỏi này →
Afind()
Bstartswith()
Crstrip()
Dsplit()
Lời giải
Đáp án đúng: "rstrip()". Mỗi dòng đọc từ tệp bằng vòng lặp for line in fhand đều còn giữ ký tự xuống dòng \n ở cuối; khi gọi print(line), print lại tự thêm một ký tự xuống dòng nữa, nên giữa các dòng From xuất hiện một dòng trống thừa. Gọi line.rstrip() xoá khoảng trắng ở bên phải chuỗi, trong đó có \n, nên các dòng được in liền nhau như trong tệp. Phương án "find()" chỉ tìm vị trí một chuỗi con và trả về chỉ số hoặc -1, không xoá ký tự nào. Phương án "startswith()" kiểm tra chuỗi có bắt đầu bằng một tiền tố hay không, hữu ích để lọc các dòng bắt đầu bằng From, nhưng không bỏ được ký tự xuống dòng. Phương án "split()" tách chuỗi thành list các từ; nó có bỏ \n nhưng biến dòng thành list chứ không còn là dòng văn bản để in như cũ. Một cách khác là print(line, end='').
Mở trang câu hỏi này →
AWelcome# 111#924.66
BWelcome#111#924.66
CWelcome#111#.66
DWelcome # 111#924.66
Lời giải
Đáp án đúng: "Welcome # 111#924.66". Đặc tả định dạng "10s" đệm chuỗi bên phải cho đủ độ rộng 10 ký tự, nên Welcome (7 ký tự) được in kèm 3 dấu cách, rồi end = '#' in dấu thăng thay cho xuống dòng; "4d" in số nguyên căn phải trong 4 ô nên 111 có một dấu cách đứng trước; ".2f" làm tròn 924.656 tới hai chữ số thập phân thành 924.66. Kết quả thật là Welcome kèm ba dấu cách, tiếp theo là dấu thăng, một dấu cách, 111, dấu thăng và 924.66; bản chép của phương án này đã gộp ba dấu cách sau Welcome còn một, nhưng nó là phương án duy nhất giữ khoảng đệm sau Welcome và dấu cách trước 111, nên là đáp án. "Welcome# 111#924.66" sai vì bỏ mất khoảng đệm của "10s" sau Welcome. "Welcome#111#924.66" sai vì bỏ cả khoảng đệm của "10s" lẫn dấu cách đệm của "4d". "Welcome#111#.66" sai thêm vì ".2f" giữ nguyên phần nguyên 924, chỉ giới hạn số chữ số sau dấu chấm.
Mở trang câu hỏi này →
AreplaceString()
Brepl()
Cswitch()
Dreplace()
Lời giải
Đáp án đúng: "replace()". Chuỗi Python có phương thức replace(old, new) trả về một chuỗi MỚI trong đó mọi lần xuất hiện của old được thay bằng new, có thể thêm đối số thứ ba để giới hạn số lần thay; ví dụ 'Hello Bob'.replace('Bob', 'Jane') cho 'Hello Jane'. Vì chuỗi là bất biến (immutable), chuỗi gốc không đổi, phải gán kết quả vào biến nếu muốn giữ. "replaceString()" là kiểu tên tự đặt giống Java, không tồn tại trong kiểu str, gọi sẽ gây AttributeError. "repl()" không phải phương thức chuỗi; REPL là tên vòng đọc, thực thi, in của chế độ tương tác, còn thay thế theo biểu thức chính quy thì dùng hàm re.sub. "switch()" không có trong str; switch là câu lệnh rẽ nhánh của C hay Java, còn Python từ bản 3.10 dùng match và case cho việc đó.
Mở trang câu hỏi này →