Câu hỏi: PRP201c Lập trình Python – Bộ ôn tập thi lại số 2
48 câu trắc nghiệm kèm lời giải của môn PRP201c - Lập trình Python, xếp đúng thứ tự trong đề. Trang 3/3 — câu 41–48.
Danh sách câu hỏi
48/48 câuHết danh sách
Afruit[5]
Bfruit[-1]
Cfruit[6]
Dfruit[-2]
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "fruit[6]". Chuỗi banana dài 6 ký tự nên chỉ số dương hợp lệ là 0 tới 5 và chỉ số âm hợp lệ là -1 tới -6; fruit[6] vượt quá chỉ số cuối cùng nên Python ném IndexError: string index out of range. Phương án "fruit[5]" là chỉ số dương cuối cùng còn hợp lệ, cho chữ a. Phương án "fruit[-1]" dùng chỉ số âm đếm từ cuối, cũng trả về chữ a cuối chuỗi. Phương án "fruit[-2]" trả về ký tự áp cuối là n. Những chỉ số đó đều nằm trong phạm vi nên không gây lỗi. Lưu ý phép cắt lát (slicing) thì không báo lỗi khi vượt biên: fruit[2:10] vẫn trả về nana; chỉ truy cập một phần tử đơn lẻ ngoài phạm vi mới ném IndexError.
AAll the rows without a primary key will be updated
BIt is a syntax error
CAll the rows in the table are updated
DThe first row of the table will be updated
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "All the rows in the table are updated". UPDATE dùng SET để gán giá trị mới, còn WHERE chọn những dòng sẽ bị sửa; UPDATE Users SET name = 'Charles' WHERE email = 'csev@umich.edu' chỉ sửa dòng khớp. Thiếu WHERE, lệnh áp lên toàn bộ dòng, nên UPDATE Users SET name = 'Charles' biến tên của mọi người trong bảng thành Charles. Đây là lỗi tai hại và khó gỡ nếu chưa sao lưu. "All the rows without a primary key will be updated" sai vì khoá chính không đóng vai trò lọc; dòng nào cũng bị sửa như nhau. "It is a syntax error" sai vì WHERE là mệnh đề tuỳ chọn, câu lệnh không có nó vẫn hợp lệ và cơ sở dữ liệu thực thi mà không cảnh báo. "The first row of the table will be updated" sai vì SQL không ngầm giới hạn còn một dòng, và bảng quan hệ cũng không có khái niệm dòng đầu cố định khi chưa có ORDER BY.
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
Mở trang câu hỏi này →Đá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ị.
Adict
Bfirst
Clist
Dmist
Ewebs
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "list". Trong ASCII chữ thường bắt đầu từ 97 cho a, nên giải từng số: 108 = 97 + 11 là chữ thứ mười hai l, 105 = 97 + 8 là i, 115 = 97 + 18 là s, 116 là t; ghép lại thành list. Trong Python có thể kiểm bằng ''.join(chr(n) for n in [108, 105, 115, 116]). "dict" sai vì mã của nó là 100, 105, 99, 116, chữ đầu d là 100 chứ không phải 108. "first" sai vì nó có năm chữ trong khi dãy chỉ có bốn số, và f mang mã 102. "mist" sai vì m mang mã 109, lệch một so với 108 là l, ba chữ sau thì trùng. "webs" sai vì w mang mã 119 và các chữ còn lại cũng khác hoàn toàn.
AAPPEND
BJOIN
CCONSTRAINT
DCONNECT
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "JOIN". Trong cơ sở dữ liệu chuẩn hoá, dữ liệu được tách ra nhiều bảng và nối với nhau bằng khoá ngoại (foreign key) trỏ tới khoá chính của bảng khác; JOIN kèm điều kiện ON ghép lại các dòng đó lúc truy vấn, ví dụ Track JOIN Album ON Track.album_id = Album.id để mỗi bài hát hiện kèm tên album. "APPEND" không phải từ khoá SQL; nó gợi nhớ phương thức append() của list Python dùng thêm phần tử vào cuối danh sách. "CONSTRAINT" dùng để khai báo ràng buộc như PRIMARY KEY, FOREIGN KEY, UNIQUE khi tạo bảng; nó bảo đảm khoá ngoại hợp lệ nhưng không ghép dòng lúc truy vấn. "CONNECT" không phải từ khoá nối bảng; kết nối tới cơ sở dữ liệu trong Python là sqlite3.connect(), còn Oracle có CONNECT BY dành cho truy vấn phân cấp chứ không phải nối bảng theo khoá ngoại.
46What is the type of the results variable in the following code snippet?4 lựa chọncó code
import sqlite3
connection = sqlite3.connection("people.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM People")
results = cursor.fetchall()A
querySetB
listC
tupleD
dictLời giải
Mở trang câu hỏi này →Đáp án đúng: "list". Phương thức fetchall() của con trỏ sqlite3 lấy toàn bộ các dòng còn lại của kết quả truy vấn và trả về một list (danh sách), trong đó mỗi dòng mặc định là một tuple chứa giá trị các cột, chẳng hạn [('Alice', 25), ('Bob', 30)]; không có dòng nào thì trả về list rỗng. Cần lưu ý đoạn mã có lỗi tên: hàm mở kết nối đúng là sqlite3.connect, viết sqlite3.connection sẽ ném AttributeError; câu hỏi giả định đoạn mã chạy được. Phương án "querySet" gợi tới kiểu QuerySet của Django ORM, không thuộc sqlite3. Phương án "tuple" là kiểu của từng dòng bên trong kết quả, cũng là thứ fetchone() trả về, chứ không phải kiểu của cả kết quả fetchall(). Phương án "dict" chỉ đúng với từng dòng khi tự đặt connection.row_factory thành một hàm tạo dict, và ngay cả khi đó fetchall() vẫn trả về list các dict.
Afield
Brow
Cattribute
Drelation
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "relation". Trong mô hình quan hệ (relational model) do Edgar F. Codd đề xuất, một bảng được gọi là quan hệ (relation): tập các bộ (tuple) có cùng cấu trúc thuộc tính; chính từ đó mà có tên cơ sở dữ liệu quan hệ. "field" sai vì trường (field) là một cột, tức một ô dữ liệu trong mỗi dòng, không phải cả bảng. "row" sai vì dòng tương ứng với bộ (tuple) hay bản ghi (record), là một phần tử của bảng. "attribute" sai vì thuộc tính (attribute) là tên gọi khác của cột hay trường. Nhóm tương ứng cần nhớ: relation ứng với table, tuple ứng với row, attribute ứng với column.
Atablename/columnname
Btablename.columnname
Ctablename->columnname
Dtablename['columnname']
Lời giải
Mở trang câu hỏi này →Đá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.