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.960/20.114 câuCòn 16.154
Aurllib
Bos
Clibrary
Dlib
Lời giải
Đáp án đúng: "urllib". Gói chuẩn urllib của Python có mô-đun urllib.request với hàm urlopen() mở một URL và trả về một đối tượng giống tệp, đọc được bằng read() hoặc lặp qua từng dòng như tệp thường, ví dụ fhand = urllib.request.urlopen('http://data.pr4e.org/romeo.txt'). Gói này đi kèm Python, không cần cài thêm. Phương án "os" là mô-đun làm việc với hệ điều hành như đường dẫn, thư mục, biến môi trường, không mở trang web. Phương án "library" chỉ là từ chung nghĩa là thư viện, không phải tên mô-đun nào của Python. Phương án "lib" cũng không phải mô-đun chuẩn để đọc web; đó chỉ là tên viết tắt thường gặp của thư mục chứa thư viện. Ngoài urllib, người ta còn hay dùng gói requests cài thêm qua pip.
Mở trang câu hỏi này →
A"She said 'Hi'"
B'She said "Hi"'
C'She said 'Hi''
DAll of the above
Lời giải
Đáp án đúng: ""She said 'Hi'"". Trong Python, chuỗi được bọc bằng nháy kép hoặc nháy đơn, và một loại nháy có thể nằm trong chuỗi bọc bằng loại kia mà không cần thoát ký tự, nên đây là chuỗi hợp lệ chứa nháy đơn bên trong. Nói thẳng chỗ tranh cãi: câu hỏi đòi chuỗi chứa cả nháy đơn lẫn nháy kép, nhưng thực ra không phương án nào chứa đồng thời hai loại; muốn vậy phải dùng nháy ba hoặc thoát ký tự bằng dấu gạch chéo ngược. Đáp án được chọn là cách viết tiêu biểu cho việc lồng một loại nháy vào loại kia. Cũng phải thừa nhận "'She said "Hi"'" hợp lệ y như vậy (nháy kép trong chuỗi nháy đơn), về ngữ nghĩa Python đúng ngang hàng, chỉ khác loại nháy bên ngoài. "'She said 'Hi''" gây SyntaxError: nháy đơn trước Hi đóng chuỗi sớm, khiến Hi thành một tên trần đứng sau chuỗi. "All of the above" sai vì có một phương án lỗi cú pháp.
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': 2, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 1}
B{'b': 1, 'r': 1, 'o': 2, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 2}
C{'b': 1, 'r': 1, 'o': 2, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 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': 2, 't': 1, 's': 1, 'a': 2, 'u': 1}". Mã duyệt từng chữ của brontosaurus và đếm bằng d.get(c, 0) + 1, từ điển giữ thứ tự chèn nên kết quả thật là {'b': 1, 'r': 2, 'o': 2, 'n': 1, 't': 1, 's': 2, 'a': 1, 'u': 2}; nói thẳng là đề này không có phương án nào khớp hoàn toàn. Phương án được chọn đúng b, t, r, o, tổng các số đếm bằng 12 đúng số chữ của từ, nhưng sai bốn khoá n (thật là 1), s (thật là 2), a (thật là 1) và u (thật là 2). "{'b': 1, 'r': 1, 'o': 2, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 2}" cũng có tổng 12 và cũng sai đúng bốn khoá (r chỉ đếm 1 lần dù xuất hiện hai lần, cùng n, s, a), nên về mức độ sai hai phương án này ngang nhau; đề không in khoá, đáp án chốt ở đây chỉ là quy ước ưu tiên phương án đếm đúng hai chữ lặp đầu tiên. "{'b': 1, 'r': 1, 'o': 2, 'n': 2, 't': 1, 's': 1, 'a': 2, 'u': 1}" sai vì tổng chỉ 11, thiếu một chữ, và sai r, n, s, a. "{'b': 1, 'r': 1, 'o': 1, 'n': 1, 't': 1, 's': 1, 'a': 1, 'u': 1}" sai vì gán mọi chữ bằng 1 như thể không cộng dồn, tổng chỉ 8.
Mở trang câu hỏi này →
AHello World
B'Hello World'
C'Hello\nWorld'
D'Hello/nWorld'
Lời giải
Đáp án đúng: "'Hello\nWorld'". Hàm repr() trả về chuỗi biểu diễn chính thức (representation) của đối tượng, tức dạng có thể gõ lại thành mã Python: với chuỗi, kết quả có cặp nháy đơn bao quanh và các ký tự đặc biệt được viết dưới dạng thoát. Chuỗi trong câu chứa một ký tự xuống dòng thật, nhưng repr hiện nó thành hai ký tự gạch ngược và n, nên kết quả nằm gọn trên một dòng kèm dấu nháy. Vì thế repr rất hữu ích khi gỡ lỗi khoảng trắng ẩn. "Hello World" không đúng: ngay cả print cũng không cho ra dòng này, vì print in Hello và World trên hai dòng chứ không thay bằng dấu cách, còn repr thì giữ cả dấu nháy lẫn chuỗi thoát. "'Hello World'" sai vì repr không thay ký tự xuống dòng bằng dấu cách. "'Hello/nWorld'" sai vì dấu thoát dùng gạch ngược chứ không phải gạch xuôi; gạch xuôi đi với n chỉ là hai ký tự bình thường.
Mở trang câu hỏi này →
ACursor.get()
BCursor.execute()
CCursor.run()
DCursor.fetchmany()
Lời giải

Đáp án đúng: "Cursor.execute()". Trong mô-đun sqlite3, đối tượng con trỏ (cursor) lấy từ conn.cursor(); Cursor.execute() gửi một câu SQL tới cơ sở dữ liệu để chạy, ví dụ cur.execute('SELECT title FROM Tracks'). Cần nói thẳng: Cursor.fetchmany() cũng là phương thức hợp lệ, dùng để lấy một số dòng kết quả sau khi truy vấn đã chạy, nên câu này lẽ ra cho chọn hai; vì chỉ được chọn một và câu dẫn nhấn trước hết vào việc thực thi câu lệnh SQL, đáp án lấy execute(), phương thức bắt buộc phải gọi trước khi có kết quả nào để lấy. Phương án "Cursor.fetchmany()" vì thế đúng một phần, phục vụ vế lấy kết quả chứ không thực thi câu lệnh. Phương án "Cursor.get()" không tồn tại trong sqlite3 hay trong chuẩn DB-API của Python. Phương án "Cursor.run()" cũng không tồn tại; thực thi câu lệnh luôn gọi qua execute, cùng các biến thể executemany và executescript.

Mở trang câu hỏi này →
Arelation
Brows
Cattribute
Dview
Lời giải
Đáp án đúng: "relation". Trong mô hình quan hệ do Edgar F. Codd đề xuất, một bảng được gọi là relation (quan hệ): tập hợp các bộ (tuple) có cùng cấu trúc cột; chính tên gọi cơ sở dữ liệu quan hệ cũng xuất phát từ đây, chứ không phải từ việc các bảng liên kết với nhau. "rows" là các dòng của bảng, tương ứng với tuple hay record trong thuật ngữ quan hệ, là thành phần của bảng chứ không phải bản thân bảng. "attribute" là thuộc tính, tức một cột (field) của bảng, mỗi cột có tên và kiểu dữ liệu. "view" là bảng ảo được định nghĩa bằng một câu truy vấn lưu sẵn; khi truy vấn nó trông giống bảng nhưng không lưu dữ liệu riêng, nên không phải từ đồng nghĩa với table.
Mở trang câu hỏi này →
Atablename/columnname
Btablename.columnname
Ctablename->columnname
Dtablename['columnname']
Lời giải
Đáp án đúng: "tablename.columnname". Khi JOIN nhiều bảng có cột trùng tên (ví dụ cả Album và Track đều có cột id hoặc title), SQL phân biệt bằng tên đầy đủ (qualified name) gồm tên bảng, dấu chấm rồi tên cột, như Album.title và Track.title; có thể đặt bí danh ngắn bằng AS rồi viết a.title. "tablename/columnname" sai vì dấu gạch chéo trong SQL là phép chia. "tablename->columnname" sai vì -> không phải cú pháp tham chiếu cột chuẩn; trong SQLite và PostgreSQL nó là toán tử trích phần tử JSON. "tablename['columnname']" sai vì đó là cú pháp truy cập phần tử của từ điển trong Python, không phải SQL; trong Python ta có thể đọc kết quả theo cách đó với một số thư viện nhưng câu lệnh SQL thì không.
Mở trang câu hỏi này →
AUI/UX Designer
BDatabase Administrator
CDeveloper
DProject Manager
Lời giải
Đáp án đúng: "Database Administrator". Trong môi trường vận hành trực tuyến, cơ sở dữ liệu production chứa dữ liệu thật của người dùng, nên quyền truy cập trực tiếp được giới hạn cho Database Administrator (DBA, quản trị viên cơ sở dữ liệu), người chịu trách nhiệm sao lưu, phân quyền, tối ưu và giữ an toàn dữ liệu. Các vai trò khác làm việc với dữ liệu thông qua ứng dụng hoặc bản sao. "UI/UX Designer" thiết kế giao diện và trải nghiệm người dùng, không cần chạm vào dữ liệu thật. "Developer" viết mã làm việc với cơ sở dữ liệu nhưng thường chạy trên môi trường phát triển hoặc kiểm thử; mã của họ chạm tới production qua ứng dụng đã triển khai chứ bản thân họ không vào thẳng, để tránh sửa nhầm dữ liệu thật. Ở nhóm nhỏ có khi một người kiêm cả hai vai trò, nhưng câu hỏi nói về cách tổ chức điển hình. "Project Manager" quản lý tiến độ, nhân sự và phạm vi dự án, xem số liệu qua báo cáo chứ không truy cập cơ sở dữ liệu.
Mở trang câu hỏi này →
ADELETE
BREMOVE
CCOLLAPSE
DDROP
Lời giải

Đáp án đúng: "DELETE". Lệnh DELETE FROM xoá các dòng dữ liệu khỏi bảng, thường kèm WHERE để chọn dòng cần xoá, ví dụ DELETE FROM Users WHERE email = 'ted@umich.edu'; bảng và cấu trúc cột vẫn còn nguyên. Nếu thiếu WHERE thì mọi dòng bị xoá nhưng bảng vẫn tồn tại. Phương án "REMOVE" không phải lệnh SQL. Phương án "COLLAPSE" cũng không phải lệnh SQL và không mang nghĩa gì trong ngôn ngữ truy vấn. Phương án "DROP" là lệnh có thật nhưng thuộc nhóm định nghĩa cấu trúc: DROP TABLE xoá luôn cả bảng, gồm cấu trúc lẫn toàn bộ dữ liệu, chứ không phải xoá dữ liệu bên trong một bảng vẫn còn đó; câu hỏi nói tới việc xoá dữ liệu khỏi bảng nên DELETE mới đúng.

Mở trang câu hỏi này →
AADD ROW
BINSERT ROW
CINSERT INTO
DINSERT AFTER
Lời giải
Đáp án đúng: "INSERT INTO". Lệnh chèn dòng mới có dạng INSERT INTO tên bảng, danh sách cột trong ngoặc, rồi VALUES với danh sách giá trị tương ứng; trong sqlite3 của Python thường dùng dấu hỏi làm chỗ giữ tham số trong câu lệnh, truyền giá trị thật dưới dạng tuple vào cur.execute, rồi gọi conn.commit() để lưu thay đổi. "ADD ROW" không phải cú pháp SQL; từ ADD chỉ xuất hiện trong ALTER TABLE để thêm cột hoặc ràng buộc. "INSERT ROW" sai vì sau INSERT phải là INTO; MySQL cho phép lược INTO nhưng không hệ nào có từ ROW ở đây. "INSERT AFTER" sai vì bảng quan hệ không có thứ tự vị trí dòng nên không có khái niệm chèn sau một dòng nào đó; từ AFTER chỉ gặp trong định nghĩa trigger hoặc khi thêm cột trong MySQL.
Mở trang câu hỏi này →
ASELECT all FROM Users
BRETRIEVE * FROM Users
CSELECT * FROM Users
DRETRIEVE all FROM User
Lời giải
Đáp án đúng: "SELECT * FROM Users". Trong SQL, lệnh đọc dữ liệu là SELECT, theo sau là danh sách cột cần lấy; dấu sao * là ký tự đại diện nghĩa là mọi cột, và khi không có mệnh đề WHERE thì mọi dòng (record) của bảng Users đều được trả về. "SELECT all FROM Users" sai vì all không phải ký hiệu cho mọi cột; ALL trong SQL là từ khoá đối lập với DISTINCT (giữ cả dòng trùng), đứng một mình như vậy sẽ bị hiểu là tên cột all và báo lỗi nếu bảng không có cột đó. "RETRIEVE * FROM Users" sai vì SQL không có lệnh RETRIEVE. "RETRIEVE all FROM User" sai vì vừa dùng lệnh không tồn tại vừa sai tên bảng, User thay vì Users.
Mở trang câu hỏi này →
AAll the rows without a primary key will be deleted
BThe first row of the table will be deleted
CIt is a syntax error
DAll the rows in the table are deleted
Lời giải
Đáp án đúng: "All the rows in the table are deleted". WHERE là bộ lọc chọn những dòng mà lệnh tác động; DELETE FROM Users WHERE email = 'ted@umich.edu' chỉ xoá các dòng khớp điều kiện. Bỏ WHERE thì không còn bộ lọc, lệnh áp lên mọi dòng, nên DELETE FROM Users xoá sạch dữ liệu nhưng vẫn giữ bảng và cấu trúc cột (khác DROP TABLE xoá cả bảng). Vì vậy nên thử bằng SELECT với cùng WHERE trước khi xoá. "All the rows without a primary key will be deleted" sai vì khoá chính không liên quan tới việc lọc; dòng có hay không có khoá chính đều bị xoá như nhau. "The first row of the table will be deleted" sai vì SQL không ngầm giới hạn còn một dòng, và bảng quan hệ vốn không có thứ tự dòng cố định. "It is a syntax error" sai vì DELETE không có WHERE là câu lệnh hoàn toàn hợp lệ, chính vì thế mà nó nguy hiểm.
Mở trang câu hỏi này →
AAbility to store data in a format that can be sent across a network
BAbility to execute Python code within the file
CAbility to quickly convert data to HTML
DAbility to scan large amounts of data quickly
Lời giải
Đáp án đúng: "Ability to scan large amounts of data quickly". Tệp phẳng (flat file) như tệp văn bản hay CSV buộc chương trình đọc tuần tự từ đầu tới cuối mới tìm được dữ liệu cần; cơ sở dữ liệu quan hệ (relational database) tổ chức dữ liệu thành bảng, có chỉ mục (index) và bộ tối ưu truy vấn, nên tìm, lọc, sắp xếp một lượng dữ liệu lớn nhanh hơn nhiều, lại liên kết được nhiều bảng với nhau qua khoá. Phương án "Ability to store data in a format that can be sent across a network" không phải lợi thế riêng, vì tệp phẳng cũng gửi qua mạng được. Phương án "Ability to execute Python code within the file" sai: cơ sở dữ liệu lưu dữ liệu và chạy câu lệnh SQL, không chạy mã Python nằm bên trong tệp. Phương án "Ability to quickly convert data to HTML" không phải chức năng của cơ sở dữ liệu; chuyển dữ liệu sang HTML là việc của chương trình hiển thị.
Mở trang câu hỏi này →
AGROUP BY
BORDER BY
CWHERE
DNone of these
Lời giải
Đáp án đúng: "ORDER BY". Mệnh đề ORDER BY sắp xếp tập kết quả của truy vấn theo một hay nhiều cột, tăng dần với ASC (mặc định) hoặc giảm dần với DESC, ví dụ SELECT name FROM Users ORDER BY name. Không có ORDER BY thì cơ sở dữ liệu không bảo đảm thứ tự nào. "GROUP BY" gom các dòng có cùng giá trị thành từng nhóm để tính hàm tổng hợp như COUNT hay SUM; một số hệ có thể tình cờ trả kết quả theo thứ tự nhóm nhưng chuẩn SQL không cam kết điều đó, nên muốn sắp xếp vẫn phải dùng ORDER BY. "WHERE" lọc dòng theo điều kiện, chỉ quyết định dòng nào được lấy chứ không đổi thứ tự. "None of these" sai vì đã có từ khoá đúng làm đúng việc sắp xếp.
Mở trang câu hỏi này →
Ainverted
BUnicode
CEBCDIC
DUTF-16
Ebubble memory
Lời giải
Đáp án đúng: "Unicode". Trong Python 3 mọi chuỗi str đều là chuỗi Unicode: mỗi phần tử là một điểm mã (code point) Unicode, nên chuỗi tiếng Việt hay tiếng Nhật được xử lý như nhau; còn dữ liệu byte thô là kiểu bytes riêng, phải encode/decode (thường bằng UTF-8) khi đọc ghi mạng hoặc tệp. Đây là khác biệt lớn so với Python 2, nơi str mặc định là byte. "UTF-16" sai vì đó là một cách mã hoá cụ thể; từ Python 3.3 (PEP 393), CPython lưu chuỗi theo biểu diễn linh hoạt 1, 2 hoặc 4 byte mỗi ký tự tuỳ ký tự lớn nhất, không cố định UTF-16. "EBCDIC" sai vì đó là bảng mã cũ của máy IBM, không dùng cho chuỗi Python. "inverted" sai vì không có cách lưu "đảo ngược" nào. "bubble memory" sai vì đó là một công nghệ bộ nhớ phần cứng cũ, không phải cách mã hoá chuỗi.
Mở trang câu hỏi này →
Afruit[5]
Bfruit[-1]
Cfruit[6]
Dfruit[-2]
Lời giải
Đáp án đúng: "fruit[6]". Chuỗi banana dài 6 ký tự, chỉ số dương chạy từ 0 đến 5 (b, a, n, a, n, a), còn chỉ số âm chạy từ -1 đến -6, đếm ngược từ cuối. Truy cập một chỉ số nằm ngoài khoảng đó gây IndexError: string index out of range. fruit[6] vượt chỉ số lớn nhất là 5 nên lỗi; đây là lỗi kinh điển khi quên rằng chỉ số bắt đầu từ 0, tức vị trí cuối là len(fruit) - 1. "fruit[5]" hợp lệ, trả về 'a' là ký tự cuối. "fruit[-1]" hợp lệ, cũng là ký tự cuối 'a', vì -1 nghĩa là vị trí cuối cùng. "fruit[-2]" hợp lệ, trả về 'n' là ký tự áp chót. Ba cách viết này đều lấy được một ký tự có thật nên không gây lỗi.
Mở trang câu hỏi này →
AMAKE people;
BCREATE TABLE people;
CMAKE DATASET people;
DCREATE people;
Lời giải

Đáp án đúng: "CREATE TABLE people; ". Câu lệnh tạo bảng mới trong SQL bắt đầu bằng hai từ khoá CREATE TABLE rồi tới tên bảng; trong thực tế còn kèm danh sách cột trong ngoặc, ví dụ CREATE TABLE people (name TEXT, email TEXT), và SQLite đòi ít nhất một cột mới chịu chạy. Dù viết rút gọn, đây là lựa chọn duy nhất dùng đúng cặp từ khoá tạo bảng. Phương án "MAKE people;" sai vì SQL không có từ khoá MAKE. Phương án "MAKE DATASET people;" cũng không tồn tại; dataset chỉ là khái niệm chung về tập dữ liệu chứ không phải lệnh SQL. Phương án "CREATE people; " thiếu từ chỉ loại đối tượng: sau CREATE phải nói rõ tạo gì, như TABLE, INDEX hay VIEW, nên câu này lỗi cú pháp.

Mở trang câu hỏi này →
A[123, 'john', 123, 'john']
B[123, 'john'] * 2
CError
DNone of the others
Lời giải
Đáp án đúng: "[123, 'john', 123, 'john']". Toán tử nhân giữa một list và một số nguyên n tạo ra list mới bằng cách nối list đó với chính nó n lần (phép lặp, repetition), không nhân từng phần tử như mảng NumPy, nên tinylist nhân 2 cho list bốn phần tử như trên. Cách viết print không ngoặc là của Python 2; ở Python 3 viết print(tinylist * 2) cho cùng kết quả. "[123, 'john'] * 2" là biểu thức chứ không phải kết quả: print tính giá trị trước rồi in giá trị đó, không in lại nguyên văn biểu thức. "Error" sai vì list hỗ trợ nhân với số nguyên; TypeError chỉ xảy ra khi nhân list với list hoặc với số thực. "None of the others" sai vì đã có một kết quả khớp đúng với cách Python tính. Tương tự, chuỗi cũng lặp được: 'ab' * 3 cho 'ababab'.
Mở trang câu hỏi này →
Asocket.sendto(address, data)
Bsocket.address()
Csocket.sendto(data, address)
Dsocket.data
Lời giải
Đáp án đúng: "socket.sendto(data, address)". Với socket UDP (SOCK_DGRAM) không có kết nối cố định, phương thức sendto của đối tượng socket gửi dữ liệu tới một địa chỉ chỉ định trong từng lần gọi; theo tài liệu Python, đối số đầu là dữ liệu dạng bytes, đối số sau là địa chỉ, thường là tuple (host, port), ví dụ s.sendto(b'hello', ('127.0.0.1', 9999)). "socket.sendto(address, data)" sai vì đảo thứ tự đối số; truyền tuple địa chỉ vào chỗ dữ liệu sẽ gây TypeError. "socket.address()" sai vì socket không có phương thức address; lấy địa chỉ dùng getsockname() hoặc getpeername(). "socket.data" sai vì đây không phải lời gọi phương thức và socket không có thuộc tính data; nhận dữ liệu dùng recv hoặc recvfrom.
Mở trang câu hỏi này →
AA variable
BA built-in function
Ckeyword
DA data type
Lời giải

Đáp án đúng: "A built-in function". Trong biểu thức type(32), type được gọi như một hàm có sẵn (built-in function): Python cung cấp sẵn, không cần import, nó nhận đối tượng 32 và trả về kiểu của nó, in ra <class 'int'>. Dạng tên, ngoặc tròn, đối số chính là một lời gọi hàm. "A variable" sai vì type không phải tên do người lập trình đặt ra để chứa dữ liệu; về kỹ thuật vẫn gán đè được nhưng việc đó nên tránh. "keyword" sai vì từ khoá là các từ dành riêng như if, def, while, không gán được và không gọi được; type không nằm trong danh sách đó. "A data type" là chỗ dễ phân vân: trong Python 3, type về bản chất là một lớp, kiểu của mọi kiểu, nhưng trong biểu thức này nó được dùng để hỏi kiểu của 32; kiểu dữ liệu ở đây là int, còn type đóng vai trò hàm có sẵn trả lời câu hỏi đó.

Mở trang câu hỏi này →