Danh sách câu hỏi của đề

Câu hỏi: PRP201c Lập trình Python – Bộ ôn tập thi lại số 1

46 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–46.

Danh sách câu hỏi

46/46 câuHết danh sách
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 →
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 →
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 →
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 →
Đề 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 →
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 →