Tất cả câu hỏi

Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.

4.000/20.114 câuCòn 16.114
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 →
3982What 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 →
3983What 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 →
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 →
A!=
B<>
CNOT
DBoth != and <>
Lời giải
Đáp án đúng: "Both != and <>". Trong SQL, <> là toán tử khác (not equal) theo chuẩn ANSI SQL, còn != là cách viết tương đương được hầu hết hệ quản trị cơ sở dữ liệu hỗ trợ, gồm SQLite, MySQL, PostgreSQL và SQL Server; WHERE age <> 18 và WHERE age != 18 cho cùng một kết quả. Vì cả hai ký hiệu đều kiểm tra sự khác nhau nên phương án gộp này là đầy đủ nhất. Phương án "!=" đúng nhưng chỉ nêu một trong hai cách viết, chọn riêng nó là bỏ sót ký hiệu chuẩn. Phương án "<>" cũng đúng nhưng chưa đầy đủ vì bỏ sót cách viết quen thuộc với lập trình viên Python. Phương án "NOT" là toán tử logic phủ định cả một điều kiện, ví dụ WHERE NOT age = 18; nó đảo kết quả đúng sai của điều kiện đứng sau chứ bản thân không phải toán tử so sánh khác.
Mở trang câu hỏi này →
ASELECT
BGET
CFETCH
DFIND
Lời giải
Đáp án đúng: "SELECT". SELECT là lệnh truy vấn của SQL để lấy (retrieve) các dòng: SELECT danh sách cột FROM tên bảng, có thể kèm WHERE để lọc, và kết quả là một tập dòng; trong Python với sqlite3, ta gọi cur.execute với câu SELECT rồi lặp trên cursor hoặc gọi fetchall() để nhận các dòng. "GET" là phương thức của HTTP dùng để yêu cầu tài nguyên từ máy chủ web, không phải lệnh SQL. "FETCH" trong SQL chuẩn chỉ xuất hiện trong ngữ cảnh con trỏ cơ sở dữ liệu hoặc mệnh đề FETCH FIRST để giới hạn số dòng, luôn đi kèm một câu SELECT chứ không tự lấy dòng; trong sqlite3 của Python, fetchone và fetchall là phương thức của cursor. "FIND" không phải từ khoá SQL; nó gợi nhớ phương thức find() của chuỗi Python hoặc lệnh find của MongoDB.
Mở trang câu hỏi này →
3987What 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 →
A4
B2
C4.2
D0.42
Lời giải
Đáp án đúng: "2". Toán tử % trong Python là phép lấy phần dư (modulo): a % b cho số dư khi chia a cho b. 42 chia 10 được thương nguyên 4 và dư 2, vì 4 × 10 = 40 và 42 − 40 = 2, nên 42 % 10 bằng 2. Phép này hay dùng để lấy chữ số hàng đơn vị của một số hoặc kiểm tra chẵn lẻ bằng n % 2. "4" là thương của phép chia lấy phần nguyên, tức kết quả của 42 // 10, không phải phần dư. "4.2" là kết quả của phép chia thường 42 / 10, luôn cho số thực float trong Python 3. "0.42" là 42 chia cho 100, không ứng với phép toán nào trong biểu thức; nó có thể đến từ việc hiểu nhầm % là phần trăm.
Mở trang câu hỏi này →
3989Which statement is used to stop a loop?4 lựa chọn
Aexit
Bbreak
Cstop
Dreturn
Lời giải
Đáp án đúng: "break". Lệnh break thoát ngay khỏi vòng lặp for hoặc while gần nhất chứa nó, chương trình chạy tiếp ở dòng đầu tiên sau vòng lặp; đây là cách chuẩn để dừng vòng lặp khi đã gặp điều kiện mong muốn, ví dụ trong while True đọc dữ liệu cho tới khi người dùng gõ done. Phương án "exit" không phải từ khoá của Python; exit() là hàm thoát cả chương trình (chủ yếu dùng trong trình thông dịch tương tác), không chỉ dừng vòng lặp. Phương án "stop" không phải từ khoá hay hàm có sẵn nào của Python, viết vào sẽ ném NameError. Phương án "return" là từ khoá thật nhưng dùng để kết thúc một hàm và trả giá trị; nếu vòng lặp nằm trong hàm thì return cũng khiến vòng lặp dừng, nhưng đó là hệ quả của việc rời cả hàm, và đặt return ngoài hàm là SyntaxError. Đi cặp với break là continue, bỏ qua phần còn lại của lượt hiện tại để sang lượt kế tiếp.
Mở trang câu hỏi này →
AUsers->name = 'new name' WHERE ...
BUsers.name='new name' WHERE ...
CUPDATE Users SET name='new name' WHERE ...
DUPDATE Users (name) VALUES ('new name') WHERE ...
Lời giải

Đáp án đúng: "UPDATE Users SET name='new name' WHERE ...". Cú pháp chuẩn để sửa dữ liệu là UPDATE tên bảng, rồi SET cột bằng giá trị mới, rồi WHERE điều kiện; SET liệt kê các cột cần đổi, còn WHERE giới hạn những dòng bị ảnh hưởng, thiếu WHERE thì mọi dòng trong bảng đều bị đổi. "Users->name = 'new name' WHERE ..." dùng toán tử mũi tên kiểu truy cập thành viên của C hay PHP, không phải SQL, và thiếu hẳn từ khoá UPDATE. "Users.name='new name' WHERE ..." giống phép gán thuộc tính trong Python; SQL có cho viết tên bảng chấm tên cột để chỉ một cột trong truy vấn, nhưng không có lệnh nào bắt đầu bằng phép gán như vậy. "UPDATE Users (name) VALUES ('new name') WHERE ..." trộn cú pháp của INSERT INTO vào UPDATE; VALUES chỉ dùng khi chèn dòng mới, còn UPDATE bắt buộc dùng SET.

Mở trang câu hỏi này →
3991Which one is NOT a legal variable name?4 lựa chọn
A_myvar
BMyvar
CMy_var
DMy-var
Lời giải
Đáp án đúng: "My-var". Tên biến (identifier) trong Python chỉ được gồm chữ cái, chữ số và dấu gạch dưới, không bắt đầu bằng chữ số và không trùng từ khoá; dấu gạch ngang không được phép vì Python hiểu nó là toán tử trừ, nên My-var = 1 bị đọc thành My - var = 1 và báo SyntaxError. Câu hỏi tìm tên KHÔNG hợp lệ nên các tên hợp lệ không được chọn: "_myvar" hợp lệ vì được phép bắt đầu bằng dấu gạch dưới, theo quy ước còn ngụ ý biến dùng nội bộ; "Myvar" hợp lệ vì chỉ gồm chữ cái, và Python phân biệt hoa thường nên Myvar khác myvar; "My_var" hợp lệ vì dấu gạch dưới được dùng để nối các từ, cách viết snake_case mà PEP 8 khuyên dùng cho tên biến là dạng chữ thường my_var.
Mở trang câu hỏi này →
Aprint(typeof(x))
Bprint(type(x))
Cprint(typeof x)
Dprint(typeOf(x))
Lời giải

Đáp án đúng: "print(type(x))". Hàm có sẵn type() nhận một đối tượng và trả về kiểu của nó, nên print(type(x)) với x = 5 in ra <class 'int'>, với x = 'abc' in ra <class 'str'>. Đây là cách kiểm tra kiểu nhanh khi gỡ lỗi, còn muốn kiểm một giá trị có thuộc một kiểu hay không thì dùng isinstance(x, int). "print(typeof(x))" sai vì typeof là toán tử của JavaScript; Python không có tên typeof nên báo NameError. "print(typeof x)" vẫn là cú pháp JavaScript, hai tên đứng cạnh nhau không có toán tử nên Python báo SyntaxError ngay khi đọc mã. "print(typeOf(x))" cũng không tồn tại; Python phân biệt chữ hoa chữ thường và không có hàm typeOf nào, kết quả là NameError.

Mở trang câu hỏi này →
A"foo'bar"
B'foo"bar'
C"""foo'bar"""
D'foo'bar'
Lời giải
Đáp án đúng: ""foo'bar"". Chuỗi foo'bar chứa một dấu nháy đơn, nên cách tự nhiên là bao nó bằng nháy kép: bên trong cặp nháy kép, dấu nháy đơn chỉ là một ký tự bình thường, không kết thúc chuỗi. Cần nói thẳng: chuỗi nháy ba """foo'bar""" cũng hợp lệ và tạo ra đúng giá trị foo'bar, vì trong chuỗi nháy ba cả nháy đơn lẫn nháy kép đều được phép; câu này vốn có thể chọn nhiều cách, nhưng ở đây chỉ cho chọn một nên đáp án lấy cách viết bằng nháy kép, là cách thông dụng nhất. Phương án "'foo"bar'" hợp lệ về cú pháp nhưng tạo ra chuỗi foo"bar chứa dấu nháy kép, khác giá trị cần có. Phương án "'foo'bar'" lỗi cú pháp: dấu nháy đơn thứ hai đóng chuỗi ngay sau foo, phần bar' còn lại khiến Python báo SyntaxError; muốn dùng nháy đơn bao ngoài thì phải thoát dấu nháy bên trong thành 'foo\'bar'.
Mở trang câu hỏi này →
AAn "in-progress" phone conversation
BFiber optic cables
CThe wheels on an automobile
DThe chain on a bicycle
EThe ringer on a telephone
Lời giải
Đáp án đúng: "An "in-progress" phone conversation". Socket (ổ cắm mạng) là điểm cuối của một kết nối hai chiều giữa hai chương trình: sau khi connect thành công, hai bên có thể lần lượt gửi bằng send và nhận bằng recv cho tới khi một bên gọi close, giống hệt một cuộc gọi điện thoại đang diễn ra mà hai người nói qua nói lại cho tới lúc gác máy. "Fiber optic cables" là phương tiện truyền vật lý ở tầng thấp nhất, tương ứng với đường dây chứ không phải kết nối logic giữa hai ứng dụng. "The wheels on an automobile" là bộ phận cơ khí lăn trên đường, không có hai đầu trao đổi thông tin với nhau. "The chain on a bicycle" chỉ truyền lực một chiều từ bàn đạp tới bánh xe, không phải kênh trao đổi qua lại. "The ringer on a telephone" chỉ là chuông báo có cuộc gọi tới, giống tín hiệu chờ kết nối chứ chưa phải cuộc trò chuyện đang mở.
Mở trang câu hỏi này →
A++
B$
C?
D^
Lời giải
Đáp án đúng: "?". Trong biểu thức chính quy (regular expression), + và * mặc định là tham lam (greedy): chúng khớp chuỗi dài nhất có thể. Thêm dấu chấm hỏi ngay sau chúng thành +? hoặc *? biến chúng thành không tham lam (non-greedy), khớp chuỗi ngắn nhất thoả mẫu; ví dụ re.findall('^F.+?:', 'From: Using the :') cho ['From:'] thay vì cả đoạn tới dấu hai chấm cuối. "++" sai vì trong mô-đun re dấu cộng đôi chỉ được hỗ trợ từ Python 3.11 và mang nghĩa possessive (chiếm hữu, không quay lui), không phải non-greedy. "$" sai vì nó neo vị trí cuối chuỗi hoặc cuối dòng. "^" sai vì nó neo đầu chuỗi, hoặc trong ngoặc vuông như [^a] thì mang nghĩa phủ định tập ký tự.
Mở trang câu hỏi này →
Arequests.tail('https://httpbin.org/tail')
Brequests.put('https://httpbin.org/put', data={'key':'value'})
Crequests.put('https://httpbin.org/tail')
Drequests.get('https://httpbin.org/put', data={'key':'value'})
Lời giải

Đáp án đúng: "

Lời giải
requests.put('https://httpbin.org/put', data={
  'key':'value'
}

)". Thư viện requests cung cấp mỗi phương thức HTTP thành một hàm cùng tên: get, post, put, delete, head, patch, options. Dịch vụ httpbin gắn mỗi đường dẫn với đúng phương thức của nó: /put chỉ nhận yêu cầu PUT và gửi lại nội dung đã nhận, nên gọi requests.put tới /put kèm data là yêu cầu khớp cả hàm lẫn đường dẫn. "requests.tail('https://httpbin.org/tail')" sai vì HTTP không có phương thức TAIL và requests không có hàm tail, Python báo AttributeError trước khi gửi gì đi. "requests.put('https://httpbin.org/tail')" gọi đúng hàm nhưng httpbin không có đường dẫn /tail, máy chủ trả mã 404 Not Found. "

Lời giải
requests.get('https://httpbin.org/put', data={
  'key':'value'
}

)" dùng GET cho đường dẫn chỉ nhận PUT nên bị trả mã 405 Method Not Allowed; ngoài ra GET thường không mang thân dữ liệu, tham số của GET nên đặt trong params.

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 →
3998What does the Python int() function do?4 lựa chọn
AReturns an integer object from any number or string
BConnect to the network and retrieve a web page.
CRead the memory of the running program
DTake a screen shot from an area of the screen
Lời giải
Đáp án đúng: "Returns an integer object from any number or string". int() là hàm dựng sẵn để chuyển đổi kiểu: int(3.9) cắt bỏ phần thập phân còn 3, int('42') đổi chuỗi chữ số thành số nguyên 42, int('ff', 16) đọc chuỗi theo cơ số 16; nếu chuỗi không biểu diễn số nguyên như int('abc') thì ném ValueError, nên cụm "any number or string" cần hiểu là số hoặc chuỗi chứa số hợp lệ. "Connect to the network and retrieve a web page." là việc của urllib.request.urlopen hoặc của socket, không liên quan đến chuyển kiểu. "Read the memory of the running program" không phải chức năng của int(); Python thông thường không cho chương trình đọc trực tiếp vùng nhớ của chính nó theo cách đó. "Take a screen shot from an area of the screen" là việc của thư viện bên ngoài như Pillow với ImageGrab hoặc pyautogui, không phải hàm dựng sẵn chuyển kiểu.
Mở trang câu hỏi này →
AIt's syntax is simpler and aligns with JavaScript
BIt is more verbose
CIt is human-unreadable
DIt requires no formatting
Lời giải
Đáp án đúng: "It's syntax is simpler and aligns with JavaScript". JSON (JavaScript Object Notation) biểu diễn dữ liệu bằng đối tượng, mảng, chuỗi và số theo đúng cú pháp literal của JavaScript, không cần thẻ mở thẻ đóng như XML, nên gọn hơn, dễ phân tích và ánh xạ thẳng sang dict, list trong Python (qua json.loads); vì vậy JSON được ưa dùng cho REST API. "It is more verbose" sai vì dài dòng (verbose) là nhược điểm của XML với các thẻ lặp tên, và nếu đúng thì đó cũng không phải ưu điểm. "It is human-unreadable" sai vì JSON là văn bản thuần, người đọc được dễ dàng. "It requires no formatting" sai vì JSON có quy tắc định dạng chặt: khoá phải đặt trong nháy kép, không có dấu phẩy thừa, chuỗi dùng nháy kép; sai định dạng thì bộ phân tích báo lỗi.
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 →