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.040/20.114 câuCòn 16.074
4021What 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{"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 →
Aquit()
Bstop()
Cexit()
Dend()
Lời giải
Đáp án đúng: "quit()". Khi làm việc ở trình thông dịch tương tác (interactive mode, chế độ gõ lệnh trực tiếp sau dấu nhắc >>>), cách kết thúc phiên mà tài liệu nhập môn Python hay dạy là gõ quit(), lệnh này đóng trình thông dịch và trả về dòng lệnh của hệ điều hành. "exit()" thực ra cũng hoạt động vì Python định nghĩa exit và quit là hai đối tượng tương đương do mô-đun site nạp sẵn, nên nó chỉ là một cách khác chứ không phải cách được câu hỏi nhắm tới; trong chương trình thật nên dùng sys.exit(). "stop()" sai vì Python không có hàm dựng sẵn nào tên stop, gọi sẽ báo NameError. "end()" cũng sai vì không có hàm dựng sẵn end; end chỉ là tên tham số của print dùng để đổi ký tự kết thúc dòng.
Mở trang câu hỏi này →
AUnderline all of the conditional code
BIndent the line below the if statement
CStart the statement with a "#" character
DBegin the statement with a curly brace {
Lời giải
Đáp án đúng: "Indent the line below the if statement". Python không dùng ngoặc nhọn để gom khối lệnh mà dùng thụt lề (indentation): sau dòng if kết thúc bằng dấu hai chấm, mọi dòng thụt vào sâu hơn thuộc khối chỉ chạy khi điều kiện đúng, và dòng đầu tiên thụt lề trở lại ngang if đánh dấu khối đã kết thúc. Thụt lề sai sẽ gây IndentationError hoặc làm lệnh chạy ngoài ý muốn. "Underline all of the conditional code" sai vì mã nguồn là văn bản thuần, không có định dạng gạch chân; trình thông dịch không thấy được kiểu chữ. "Start the statement with a "#" character" sai vì ký tự "#" mở đầu chú thích, Python bỏ qua toàn bộ phần sau nó nên dòng đó không chạy gì cả. "Begin the statement with a curly brace {" là cách của C, Java hay JavaScript; trong Python dấu ngoặc nhọn dùng để tạo dict hoặc set, không mở khối lệnh.
Mở trang câu hỏi này →
ASELECT FROM Breed,Cats
BSELECT Cats FROM Breed
CFROM Cats SELECT Breed
DSELECT Breed FROM Cats
Lời giải
Đáp án đúng: "SELECT Breed FROM Cats". Cú pháp cơ bản của câu truy vấn SQL là SELECT danh sách cột FROM tên bảng: ngay sau SELECT là cột cần lấy, ở đây là cột Breed, còn sau FROM là bảng chứa cột đó, tức bảng Cats. Phương án "SELECT FROM Breed,Cats" bỏ trống danh sách cột và đặt cả tên cột lẫn tên bảng sau FROM như thể cả hai đều là bảng, nên câu lệnh lỗi cú pháp. Phương án "SELECT Cats FROM Breed" đảo vai trò, coi Cats là cột và Breed là bảng, trái với mô tả của câu hỏi. Phương án "FROM Cats SELECT Breed" đặt mệnh đề FROM lên trước; tuy về mặt logic hệ quản trị xử lý FROM trước, câu chữ SQL chuẩn vẫn bắt buộc SELECT đứng đầu nên câu này không chạy. Muốn lấy mọi cột của bảng thì viết SELECT * FROM Cats.
Mở trang câu hỏi này →
AUTF-128
BUTF-8
CUTF-32
DUTF-64
Lời giải
Đáp án đúng: "UTF-8". Khi trao đổi dữ liệu giữa các hệ thống qua mạng, tệp hay API, UTF-8 là bảng mã Unicode phổ biến nhất vì nó mã hoá mỗi ký tự bằng 1 đến 4 byte với độ dài thay đổi, tương thích ngược với ASCII (chữ tiếng Anh vẫn chiếm đúng 1 byte) và không phụ thuộc thứ tự byte của máy; trong Python 3, encode() và decode() mặc định dùng UTF-8. "UTF-32" là mã hoá Unicode có thật nhưng dùng cố định 4 byte cho mọi ký tự, tốn dung lượng nên chủ yếu dùng nội bộ khi cần truy cập ký tự theo chỉ số, hiếm khi dùng để truyền dữ liệu. "UTF-128" không tồn tại; con số 128 dễ làm nhớ tới 128 ký tự của bảng ASCII chứ không phải một đơn vị mã hoá. "UTF-64" cũng không tồn tại: Unicode chỉ định nghĩa UTF-8, UTF-16 và UTF-32, và không gian mã chỉ tới U+10FFFF nên 32 bit đã thừa chỗ.
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 →
APostgres
BOracle
CSQL Server
DSQLite
EMySQL
Lời giải
Đáp án đúng: "SQLite". Phần cơ sở dữ liệu của PRP201c theo chương trình Python for Everybody (PY4E) dùng SQLite: một cơ sở dữ liệu nhúng, lưu toàn bộ dữ liệu trong một tệp duy nhất, có sẵn trong Python qua mô-đun sqlite3 và được xem bằng công cụ DB Browser for SQLite. Vì không cần cài máy chủ nên sinh viên chạy được ngay trên máy mình. "Postgres" (PostgreSQL) là hệ quản trị cơ sở dữ liệu mã nguồn mở mạnh, chạy theo mô hình máy chủ, cần cài đặt và cấu hình riêng. "Oracle" là hệ thương mại của hãng Oracle, dùng nhiều trong doanh nghiệp lớn. "SQL Server" là sản phẩm của Microsoft, cũng chạy dạng máy chủ. "MySQL" là hệ mã nguồn mở phổ biến cho web. Cả bốn hệ này đều dùng SQL gần giống nhau, nhưng không phải phần mềm được dùng trong lớp này.
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 →
4030How 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 →
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 →
AAscending
BDescending
CSORT
DORDER
Lời giải
Đáp án đúng: "Ascending". Mệnh đề ORDER BY trong SQL sắp xếp các dòng kết quả theo một hay nhiều cột; nếu không ghi gì sau tên cột thì cơ sở dữ liệu mặc định dùng ASC, tức thứ tự tăng dần (ascending): số nhỏ trước, chuỗi theo thứ tự chữ cái. Ví dụ SELECT name FROM Users ORDER BY name cho cùng kết quả với ORDER BY name ASC. "Descending" là thứ tự giảm dần, chỉ có khi ghi rõ từ khoá DESC sau tên cột, như ORDER BY age DESC để đưa người lớn tuổi nhất lên đầu. "SORT" không phải từ khoá của SQL chuẩn; SQL dùng ORDER BY để sắp xếp chứ không có lệnh SORT. "ORDER" chỉ là một nửa tên của mệnh đề ORDER BY, bản thân nó không phải một chế độ sắp xếp nên không thể là chế độ mặc định.
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 →
Atn.read_until(b"Login:")
Btn.read_until(b"user: ")
Ctn.read_until(b"user:")
Dtn.read_until(b"Username: ")
Lời giải
Đáp án đúng: "tn.read_until(b"Username: ")". Câu hỏi dùng module telnetlib: sau khi tạo đối tượng tn = telnetlib.Telnet(host), phương thức read_until đọc dữ liệu từ kết nối cho tới khi gặp đúng chuỗi byte được chỉ định, nên phải truyền đúng dấu nhắc (prompt) mà thiết bị in ra; router Cisco khi bật xác thực đăng nhập in dấu nhắc mặc định là chữ Username, dấu hai chấm và một dấu cách, sau đó script mới gửi tên người dùng bằng tn.write. Trong Python 3 đối số phải là kiểu bytes nên có tiền tố b. "tn.read_until(b"Login:")" chờ chuỗi Login mà router Cisco không in theo mặc định, nên lệnh sẽ đứng chờ tới hết thời gian chờ. "tn.read_until(b"user: ")" sai chữ: read_until so khớp từng byte và phân biệt hoa thường, mà dấu nhắc thật bắt đầu bằng U hoa và có chữ name. "tn.read_until(b"user:")" sai tương tự, lại thiếu cả dấu cách sau dấu hai chấm. Lưu ý telnetlib bị đánh dấu lỗi thời từ Python 3.11 và đã bị gỡ khỏi thư viện chuẩn ở Python 3.13 (PEP 594), nên mã này chỉ chạy trên phiên bản cũ hơn; ngày nay thường dùng SSH qua Paramiko hoặc Netmiko.
Mở trang câu hỏi này →
Đề bài
<a>
  <b>X</b>
  <c>
    <d>Y</d>
    <e>Z</e>
  </c>
</a>
Ab
Ba
Cc
De
Lời giải
Đáp án đúng: "c". Trong XML, các phần tử lồng nhau tạo thành cây; nút cha (parent node) của một nút là phần tử bao trực tiếp nó, tức thẻ mở gần nhất chưa đóng ngay phía trên nó. Thẻ e nằm giữa thẻ mở và thẻ đóng của c, cùng cấp với d, nên c là cha trực tiếp của e còn d là anh em (sibling) của e. Chọn "b" là sai vì b chỉ chứa chữ X và đã đóng trước khi c mở, nên b là anh em của c chứ không bao e. Chọn "a" là sai vì a là nút gốc, chỉ là tổ tiên (ancestor) của e qua trung gian c, không phải cha trực tiếp. Chọn "e" là sai vì một nút không thể là cha của chính nó; e chỉ chứa nút văn bản Z.
Mở trang câu hỏi này →
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 →
AIt compels employees to operate in an ethical and integral manner.
BIt prevents regulatory scrutiny of the organization’s practices.
CIt lets external stakeholders know that you are an ethical company.
DIt creates consistency in the ethical practices across the organization, rather than patchy implementation of the practices.
Lời giải
Đáp án đúng gồm hai ý: "It lets external stakeholders know that you are an ethical company." và "It creates consistency in the ethical practices across the organization, rather than patchy implementation of the practices.". Một bộ quy tắc đạo đức có hai giá trị chính: với bên ngoài, nó công khai cam kết của tổ chức với khách hàng, đối tác, nhà đầu tư, tạo cơ sở để họ tin và giám sát; với bên trong, nó đặt một chuẩn chung để mọi phòng ban áp dụng giống nhau, thay vì mỗi nơi làm một kiểu chắp vá. "It compels employees to operate in an ethical and integral manner." nói quá: bộ quy tắc định hướng và đặt kỳ vọng nhưng không tự ép được ai hành xử đạo đức; điều đó cần văn hoá, đào tạo và cơ chế thực thi. "It prevents regulatory scrutiny of the organization’s practices." sai vì có bộ quy tắc không miễn trừ tổ chức khỏi giám sát của cơ quan quản lý; tuân thủ pháp luật vẫn được kiểm tra độc lập.
Mở trang câu hỏi này →
APerforming data audits
BSuperficial efforts to appear ethical without real action
CEncrypting company emails
DApplying for ethical certifications
Lời giải
Đáp án đúng: "Superficial efforts to appear ethical without real action". Ethics washing (tẩy trắng đạo đức) là khi tổ chức tung ra tuyên bố, nguyên tắc AI, hội đồng đạo đức hay chiến dịch truyền thông để trông có trách nhiệm, nhưng không thay đổi cách thu thập dữ liệu, thiết kế sản phẩm hay ra quyết định; nó làm xói mòn niềm tin khi công chúng phát hiện khoảng cách giữa lời nói và việc làm. "Performing data audits" là hoạt động thực chất giúp phát hiện vấn đề, ngược với tẩy trắng. "Encrypting company emails" là biện pháp bảo mật kỹ thuật, không liên quan tới hình ảnh đạo đức. "Applying for ethical certifications" chỉ trở thành tẩy trắng nếu chứng nhận là vỏ bọc không có hành động phía sau; tự thân việc xin chứng nhận không phải là định nghĩa của khái niệm này.
Mở trang câu hỏi này →
AIncorporating ethical guidelines into data analytics processes
BRelying solely on automated systems for decision-making
CCentralizing decision-making to reduce ethical risks
DPrioritizing cost reduction over ethical outcomes
Lời giải
Đáp án đúng: "Incorporating ethical guidelines into data analytics processes". Đưa hướng dẫn đạo đức vào ngay quy trình phân tích dữ liệu, chẳng hạn kiểm tra thiên lệch khi chọn dữ liệu, đánh giá quyền riêng tư trước khi dùng thuộc tính nhạy cảm, ghi lại giả định của mô hình, biến đạo đức thành một phần công việc hằng ngày của người làm khoa học dữ liệu chứ không chỉ là khẩu hiệu, từ đó nuôi dưỡng văn hoá tổ chức có đạo đức. "Relying solely on automated systems for decision-making" sai vì phó mặc hoàn toàn cho máy làm mất sự giám sát và trách nhiệm giải trình của con người. "Centralizing decision-making to reduce ethical risks" sai vì dồn quyền quyết định vào ít người làm giảm sự tham gia và góc nhìn đa dạng, trong khi văn hoá đạo đức cần mọi người cùng có trách nhiệm. "Prioritizing cost reduction over ethical outcomes" sai vì đặt việc cắt giảm chi phí lên trên kết quả đạo đức chính là điều văn hoá đạo đức cần ngăn.
Mở trang câu hỏi này →
AComprehensive coverage of areas of concerns by the code of ethics
BLack of clarity in the code of ethics
CPrescriptive language used in the code of ethics
DLack of awareness of the code of ethics and where it is meant to be applied
Lời giải
Đáp án đúng gồm hai ý: "Lack of clarity in the code of ethics" và "Lack of awareness of the code of ethics and where it is meant to be applied". Bộ quy tắc đạo đức chỉ được áp dụng khi nhân viên hiểu nó nói gì và biết nó tồn tại, áp vào tình huống nào; quy tắc mơ hồ khiến người ta không biết hành xử ra sao, còn nếu không ai biết đến quy tắc hay phạm vi của nó thì nó chỉ nằm trên giấy. "Comprehensive coverage of areas of concerns by the code of ethics" là điểm mạnh, bao quát đầy đủ giúp áp dụng chứ không cản trở. "Prescriptive language used in the code of ethics" tức ngôn ngữ quy định cụ thể nên làm gì, không nên làm gì; điều này làm quy tắc rõ ràng, dễ thực hiện hơn, nên không phải nguyên nhân khiến quy tắc ít được áp dụng.
Mở trang câu hỏi này →