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.

3.980/20.114 câuCòn 16.134
AOne or more digits
BSeveral digits followed by a plus sign
CAny mathematical expression
DAny number of digits at the beginning of a line
EZero or more digits
Lời giải
Đáp án đúng: "One or more digits". Trong biểu thức chính quy (regular expression), [0-9] là một lớp ký tự (character class) khớp đúng một chữ số từ 0 tới 9, còn dấu + đứng sau nghĩa là phần đứng trước được lặp một lần trở lên; ghép lại, [0-9]+ khớp một dãy liền gồm ít nhất một chữ số, như 7 hay 2024. Phương án "Several digits followed by a plus sign" sai vì + ở đây là ký tự đặc biệt chỉ số lần lặp; muốn khớp dấu cộng thật phải thoát thành \+. Phương án "Any mathematical expression" sai vì mẫu chỉ khớp chữ số, không khớp toán tử hay khoảng trắng. Phương án "Any number of digits at the beginning of a line" sai vì mẫu không có ký tự neo ^ nên có thể khớp ở bất kỳ vị trí nào trong dòng. Phương án "Zero or more digits" mô tả mẫu [0-9]* dùng dấu sao, chứ không phải dấu cộng.
Mở trang câu hỏi này →
Aconnect
Bresend
Creject
Ddisconnect
Lời giải
Đáp án đúng: "connect". Lời gọi chặn (blocking call) là lời gọi khiến chương trình dừng lại chờ tới khi thao tác hoàn tất mới trả về. Với socket ở chế độ mặc định, connect() chặn cho tới khi bắt tay ba bước của TCP xong hoặc thất bại; tương tự recv() chặn chờ dữ liệu và accept() chặn chờ kết nối tới. Câu hỏi viết ở số nhiều nhưng chỉ có connect là lời gọi chặn chuẩn, nên chỉ chọn một. "resend" không phải phương thức của socket; việc gửi lại gói tin bị mất do TCP tự làm bên trong hệ điều hành, chương trình không gọi. "reject" cũng không phải lời gọi socket; máy chủ từ chối kết nối bằng cách không lắng nghe hoặc đóng kết nối, phía khách nhận ConnectionRefusedError. "disconnect" không tồn tại trong module socket; ngắt kết nối dùng close() hoặc shutdown(), và ở chế độ mặc định chúng trả về ngay chứ không chờ sự kiện.
Mở trang câu hỏi này →
ASyntaxError
BIndexError
CFileNotFoundError
DNameError
Lời giải
Đáp án đúng: "FileNotFoundError". Khi mở tệp bằng open('ten.txt') mà tệp không tồn tại, Python 3 phát sinh FileNotFoundError, một lớp con của OSError; đây là lỗi lúc chạy (runtime) điển hình mà ta bọc lời gọi open trong try/except để báo cho người dùng và thoát gọn thay vì để chương trình đổ traceback. "SyntaxError" sai vì lỗi cú pháp phát hiện khi biên dịch, trước khi khối try kịp chạy, nên không bắt được bằng try/except trong cùng tệp. "IndexError" sai vì nó phát sinh khi truy cập chỉ số vượt ngoài danh sách hoặc chuỗi, không gắn với việc mở tệp. "NameError" sai vì nó báo dùng tên biến chưa định nghĩa; bắt nó cũng được nhưng đó là lỗi lập trình, không phải lỗi đặc trưng khi làm việc với tệp.
Mở trang câu hỏi này →
Afunction_name arguments
Bfunction_name(arguments)
Cfunction_name[arguments]
Lời giải
Đáp án đúng: "function_name(arguments)". Gọi hàm (function call) trong Python là viết tên hàm rồi đặt đối số trong cặp ngoặc tròn, các đối số cách nhau bởi dấu phẩy, ví dụ print('Hi'), max('Hello world') hay len(lst). Ngay cả khi không có đối số vẫn phải có ngoặc rỗng, như input(); chỉ viết tên hàm thì Python hiểu là chính đối tượng hàm chứ không chạy nó. "function_name arguments" giống cách gõ lệnh trong shell hoặc lệnh print của Python 2; ở Python 3 hai tên đứng cạnh nhau không có toán tử là lỗi cú pháp. "function_name[arguments]" dùng ngoặc vuông, vốn là cú pháp truy cập phần tử theo chỉ số hoặc theo key của list, chuỗi, dict; áp lên một hàm sẽ gây TypeError vì hàm không hỗ trợ kiểu truy cập này.
Mở trang câu hỏi này →
A{}
B()
C[]
DNone
Lời giải

Đáp án đúng: "[]". Cặp ngoặc vuông rỗng tạo một list (danh sách) rỗng, ví dụ friends = [], sau đó có thể thêm phần tử bằng friends.append('Joe'); cách viết tương đương là gọi hàm list(). Phương án "{}" tạo một dict (từ điển) rỗng chứ không phải list, và cũng không phải set rỗng, vì set rỗng phải viết set(). Phương án "()" tạo một tuple rỗng; tuple giống list ở chỗ giữ thứ tự phần tử nhưng là kiểu bất biến (immutable), không append được. Phương án "None" là giá trị đặc biệt biểu thị không có giá trị, thuộc kiểu NoneType; biến bằng None không phải list và gọi append trên nó sẽ ném AttributeError. Có thể tự kiểm bằng type([]), kết quả là lớp list.

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 →
A3.2e-3
B3.2e3
C0.32
D32e-3
Lời giải
Đáp án đúng: "3.2e3". Python viết số thực theo ký hiệu khoa học (scientific notation) bằng chữ e: phần trước e là phần định trị, phần sau e là số mũ cơ số 10, nên 3.2×10³ viết là 3.2e3 và có giá trị 3200.0, luôn mang kiểu float. "3.2e-3" sai vì số mũ âm nghĩa là 3.2×10⁻³ = 0.0032, nhầm dấu của số mũ. "0.32" sai vì đó là 3.2×10⁻¹, chỉ dời dấu chấm một chỗ sang trái. "32e-3" sai vì bằng 32×10⁻³ = 0.032, vừa đổi định trị vừa đổi dấu số mũ. Mẹo kiểm tra: gõ 3.2e3 == 3200 vào trình thông dịch sẽ được True.
Mở trang câu hỏi này →
AA variable
BA constant
CA parameter
DA pointer
Lời giải
Đáp án đúng: "A constant". 98.6 là một hằng (constant), hay literal: giá trị viết thẳng trong mã, cố định, không đổi khi chương trình chạy; ở đây là hằng số thực kiểu float. Python chỉ việc đưa giá trị đó cho print để in ra màn hình. "A variable" sai vì biến là một cái tên như x hay temp gắn với giá trị và có thể gán lại; 98.6 không phải tên, không thể viết 98.6 = 5. "A parameter" chưa đúng trọng tâm: tham số là tên biến trong phần định nghĩa hàm, dùng để nhận giá trị truyền vào; 98.6 là đối số (argument) được truyền cho print, nhưng bản thân nó vẫn là một hằng. "A pointer" sai vì Python không cho lập trình viên thao tác con trỏ như ngôn ngữ C; mọi tên chỉ là tham chiếu tới đối tượng, và 98.6 càng không phải một con trỏ.
Mở trang câu hỏi này →
A2
B6
C3
D5
Lời giải
Đáp án đúng: "2". Lần theo mã: dòng 1 gán aStr = 'Hello Bob' chạy bình thường; dòng 2 gọi int(aStr) nhưng chuỗi 'Hello Bob' không phải số nên Python ném ValueError, và vì không có try/except, chương trình dừng ngay tại đó. Cần nói thẳng: theo nghĩa chặt, dòng cuối cùng chạy thành công là dòng 1, vì dòng 2 bắt đầu thực thi nhưng thất bại; dòng 1 không có trong các lựa chọn, nên đáp án chốt là 2, tức dòng cuối cùng được thực thi, nơi chương trình dừng lại. Phương án "3" không bao giờ chạy vì chương trình đã dừng ở dòng 2; ngoài ra printf không tồn tại trong Python (hàm in là print), nên dù có tới được đây cũng ném NameError. Phương án "5" không được chạy tới, dù int('123') bản thân là hợp lệ và cho 123. Phương án "6" cũng không được chạy tới, và vì lại dùng printf nên nếu chạy cũng lỗi NameError.
Mở trang câu hỏi này →
AAddition +
BMultiplication *
CSubtraction -
DParentheses ()
Lời giải
Đáp án đúng: "Parentheses ()". Python tính biểu thức theo thứ tự ưu tiên toán tử (operator precedence): ngoặc tròn cao nhất, tiếp theo là luỹ thừa, rồi nhóm nhân, chia, chia lấy phần nguyên và chia lấy dư, cuối cùng là cộng và trừ; các toán tử cùng mức được tính từ trái sang phải. Vì vậy (1 + 2) * 3 cho 9, còn 1 + 2 * 3 cho 7. Ngoặc là công cụ để người viết ép thứ tự tính và làm biểu thức dễ đọc. "Multiplication *" được ưu tiên hơn cộng trừ nhưng vẫn đứng sau ngoặc: trong 2 * (3 + 4) phép cộng trong ngoặc được tính trước. "Addition +" thuộc mức ưu tiên thấp nhất trong nhóm số học nên được tính sau cùng. "Subtraction -" cùng mức với phép cộng, được tính từ trái sang phải cùng với cộng, cũng sau nhân chia và sau ngoặc.
Mở trang câu hỏi này →
A<class int>
B<class str>
C<class float>
D<class bool>
Lời giải

Đáp án đúng: "<class float> ". Hàm type() trả về kiểu (class) của đối tượng; số 3.2 có dấu chấm thập phân nên là số thực dấu phẩy động (floating-point), kiểu float, và Python 3 hiển thị kiểu dưới dạng <class 'float'>, phương án chỉ lược bỏ dấu nháy quanh tên kiểu. "<class int> " sai vì int là kiểu số nguyên, chỉ dành cho literal không có phần thập phân như 3; muốn ra int phải ép int(3.2), khi đó còn 3. "<class str> " sai vì 3.2 không đặt trong dấu nháy; chỉ '3.2' mới là chuỗi. "<class bool> " sai vì bool chỉ có hai giá trị True và False, dù 3.2 được coi là "truthy" khi đặt trong điều kiện if thì kiểu của nó vẫn là float.

Mở trang câu hỏi này →
3972For the following code: astr = 'Hello Bob'4 lựa chọncó code
Đề bài
istr = 0
try:
    istr = int(astr)
except:
    istr = -1

What will the value be for istr after this code executes?

A-1
BIt will be the 'Not a number' value (i.e. NaN)
CIt will be a random number depending on the operating system the program runs on
Dfalse
Lời giải
Đáp án đúng: "-1". Lần theo mã: istr được gán 0, rồi vào khối try gọi int(astr) với astr = 'Hello Bob'. Chuỗi này không biểu diễn số nguyên nên int() phát sinh ValueError; ngoại lệ làm phép gán istr = int(astr) không bao giờ hoàn tất, luồng chạy nhảy sang khối except, nơi istr được gán -1. Vì vậy sau đoạn mã istr bằng -1. Đây là mẫu try/except quen thuộc để chương trình không dừng khi người dùng nhập sai. "It will be the 'Not a number' value (i.e. NaN)" sai vì int() không trả về NaN khi gặp chuỗi lạ mà ném ngoại lệ; NaN là giá trị float đặc biệt, chỉ có qua float('nan') hay phép tính số thực. "It will be a random number depending on the operating system the program runs on" sai vì Python xử lý giống nhau trên mọi hệ điều hành và không sinh số ngẫu nhiên ở đây. "false" sai vì không có dòng nào gán giá trị bool; vả lại Python viết hằng này là False với chữ hoa đầu.
Mở trang câu hỏi này →
Awhile
Bpayroll
Cnames
Dpizza
Lời giải
Đáp án đúng: "while". Từ khoá (reserved word) là những từ Python dành riêng cho cú pháp, không được dùng làm tên biến hay tên hàm; while mở một vòng lặp chạy lặp lại khi điều kiện còn đúng, cùng nhóm với if, for, def, return, import, True, None. Viết while = 5 sẽ báo SyntaxError. Phương án "payroll" chỉ là một định danh (identifier) bình thường, hợp lệ để đặt tên biến như payroll = 1000, Python không gán nghĩa đặc biệt nào cho nó. Phương án "names" cũng là tên tự do, hay dùng cho một list chứa các tên, không phải từ khoá. Phương án "pizza" là tên biến hợp lệ hoàn toàn; Python không hiểu nghĩa của tên biến, chỉ cần tên bắt đầu bằng chữ cái hoặc dấu gạch dưới và không trùng từ khoá. Có thể xem danh sách từ khoá đầy đủ bằng import keyword rồi in keyword.kwlist.
Mở trang câu hỏi này →
Apython hello.py
Brun hello.py
Cexecute hello.py
Dopen hello.py
Lời giải
Đáp án đúng: "python hello.py". Để chạy một script, ta gọi trình thông dịch Python ở dòng lệnh (terminal hoặc Command Prompt) và truyền tên tệp làm đối số; trình thông dịch đọc tệp rồi thực thi lần lượt từng câu lệnh từ trên xuống. Tuỳ hệ thống, lệnh có thể là python3 hello.py trên Linux, macOS hoặc py hello.py trên Windows, nhưng bản chất đều là gọi trình thông dịch kèm tên tệp. "run hello.py" không phải lệnh chuẩn của hệ điều hành; một số IDE có nút Run, IPython có lệnh đặc biệt %run, nhưng ở dòng lệnh thông thường thì không có. "execute hello.py" cũng không phải lệnh có sẵn trên hệ điều hành phổ biến nào. "open hello.py" trên macOS chỉ mở tệp bằng ứng dụng mặc định, thường là trình soạn thảo, còn trong Python thì open() là hàm mở tệp để đọc hoặc ghi, không thực thi mã trong tệp.
Mở trang câu hỏi này →
Đề bài
if x < 2:
    print('Below 2')
elif x >= 2:
    print('Two or more')
else:
    print('Something else')
Ax = -2.0
BThis code will never print 'Something else' regardless of the value for 'x'
Cx = 2.0
Dx = -22
Lời giải
Đáp án đúng: "This code will never print 'Something else' regardless of the value for 'x'". Câu dẫn hỏi giá trị của x sau khi chạy, nhưng đoạn mã không hề gán x và các phương án là của câu hỏi gốc "giá trị nào của x làm in ra Something else", nên phải đọc câu hỏi theo nghĩa nhánh else. Hai điều kiện x < 2 và x >= 2 bù nhau, phủ kín mọi số thực, nên với bất kỳ giá trị số nào một trong hai nhánh đầu luôn chạy và nhánh else không bao giờ tới được (mã chết, dead code). "x = -2.0" sai vì -2.0 < 2 nên in Below 2. "x = 2.0" sai vì 2.0 >= 2 nên in Two or more. "x = -22" sai vì -22 < 2 nên cũng in Below 2. Lưu ý riêng: giá trị float('nan') làm mọi phép so sánh đều sai nên sẽ lọt xuống else, đây là ngoại lệ hiếm ngoài phạm vi câu hỏi.
Mở trang câu hỏi này →
A==
B>=
C<=
D=
Lời giải
Đáp án đúng: "=". Dấu bằng đơn là toán tử gán (assignment): x = 5 lấy giá trị bên phải cất vào biến bên trái, không trả lời câu hỏi đúng hay sai nào, nên nó không phải toán tử so sánh hay logic. Trong Python, viết dấu gán đơn trong điều kiện if là lỗi cú pháp, chính để tránh nhầm với so sánh. "==" là toán tử so sánh bằng, cho True khi hai vế có giá trị bằng nhau, ví dụ 3 == 3.0 là True. ">=" so sánh lớn hơn hoặc bằng, như 5 >= 5 cho True. "<=" so sánh nhỏ hơn hoặc bằng, như 2 <= 1 cho False. Cả ba toán tử này đều trả về giá trị bool nên thuộc nhóm toán tử so sánh, vì vậy không được chọn ở câu hỏi phủ định này; chỉ dấu gán là ngoại lệ.
Mở trang câu hỏi này →
AA user-defined function
BA built-in function
CThe central processing unit
DA conditional statement
Lời giải
Đáp án đúng: "A built-in function". input() là hàm dựng sẵn (built-in function) của Python: có sẵn ngay khi chạy trình thông dịch, không cần import hay tự định nghĩa; nó tạm dừng chương trình, chờ người dùng gõ một dòng rồi trả về dòng đó dưới dạng chuỗi, ví dụ name = input('Tên bạn: '). Cùng nhóm với nó là print(), len(), int(), type(). Phương án "A user-defined function" sai vì hàm tự định nghĩa là hàm do lập trình viên viết bằng def, còn input có sẵn trong ngôn ngữ. Phương án "The central processing unit" là bộ xử lý trung tâm (CPU), một thành phần phần cứng thực thi lệnh, không phải tính năng của ngôn ngữ. Phương án "A conditional statement" là câu lệnh điều kiện như if, elif, else dùng để rẽ nhánh; input không quyết định nhánh nào chạy mà chỉ nhận dữ liệu vào.
Mở trang câu hỏi này →
AREST uses formatted text (JSON)
BREST sends binary only
CSocket always encrypts data
DREST uses formatted text (HTML)
Lời giải
Đáp án đúng: "REST uses formatted text (JSON)". Khi gọi một REST API (giao diện lập trình theo kiến trúc REST), dữ liệu được đóng gói trong yêu cầu và phản hồi HTTP, và nội dung thường là văn bản có cấu trúc dạng JSON (JavaScript Object Notation), khai báo qua header Content-Type là application/json, nên Python đọc bằng json.loads; còn socket thô chỉ truyền một dòng byte, ứng dụng hai đầu tự quy ước định dạng. "REST sends binary only" sai vì REST chạy trên HTTP và chủ yếu trao đổi văn bản; có thể gửi dữ liệu nhị phân như ảnh hay tệp nhưng không phải chỉ nhị phân. "Socket always encrypts data" sai vì socket TCP gửi dữ liệu thô, không mã hoá; muốn mã hoá phải bọc thêm TLS bằng module ssl. "REST uses formatted text (HTML)" lệch trọng tâm: HTML là định dạng trang web để hiển thị cho người đọc, còn API trả dữ liệu cho chương trình xử lý, nên chủ yếu dùng JSON, trước đây có cả XML.
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 →
AMatch any number of lowercase letters followed by any number of digits
BMatch a lowercase letter or a digit
CMatch an entire line as long as it is lowercase letters or digits
DMatch any text that is surrounded by square braces
Lời giải
Đáp án đúng: "Match a lowercase letter or a digit". Trong biểu thức chính quy (regular expression), cặp ngoặc vuông tạo một lớp ký tự (character class) khớp đúng MỘT ký tự thuộc tập liệt kê; a-z là dải chữ thường, 0-9 là dải chữ số, nên [a-z0-9] khớp một ký tự là chữ thường hoặc chữ số. Muốn khớp nhiều ký tự phải thêm lượng từ như + hay * phía sau. "Match any number of lowercase letters followed by any number of digits" sai vì lớp ký tự không có thứ tự trước sau và không lặp; mẫu đó phải viết [a-z]*[0-9]*. "Match an entire line as long as it is lowercase letters or digits" cần thêm neo đầu dòng, neo cuối dòng cùng lượng từ, tức ^[a-z0-9]+$. "Match any text that is surrounded by square braces" sai vì ngoặc vuông ở đây là cú pháp chứ không phải ký tự cần khớp; muốn khớp ngoặc vuông thật phải thoát nó bằng dấu gạch ngược.
Mở trang câu hỏi này →