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

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

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

Danh sách câu hỏi

50/50 câuHết danh sách
Arequests.tail('https://httpbin.org/tail')
Brequests.put('https://httpbin.org/put', data={'key':'value'})
Crequests.put('https://httpbin.org/tail')
Drequests.get('https://httpbin.org/put', data={'key':'value'})
Lời giải

Đáp án đúng: "

Lời giải
requests.put('https://httpbin.org/put', data={
  'key':'value'
}

)". Thư viện requests cung cấp mỗi phương thức HTTP thành một hàm cùng tên: get, post, put, delete, head, patch, options. Dịch vụ httpbin gắn mỗi đường dẫn với đúng phương thức của nó: /put chỉ nhận yêu cầu PUT và gửi lại nội dung đã nhận, nên gọi requests.put tới /put kèm data là yêu cầu khớp cả hàm lẫn đường dẫn. "requests.tail('https://httpbin.org/tail')" sai vì HTTP không có phương thức TAIL và requests không có hàm tail, Python báo AttributeError trước khi gửi gì đi. "requests.put('https://httpbin.org/tail')" gọi đúng hàm nhưng httpbin không có đường dẫn /tail, máy chủ trả mã 404 Not Found. "

Lời giải
requests.get('https://httpbin.org/put', data={
  'key':'value'
}

)" dùng GET cho đường dẫn chỉ nhận PUT nên bị trả mã 405 Method Not Allowed; ngoài ra GET thường không mang thân dữ liệu, tham số của GET nên đặt trong params.

Mở trang câu hỏi này →
A++
B$
C?
D^
Lời giải
Đáp án đúng: "?". Trong biểu thức chính quy (regular expression), + và * mặc định là tham lam (greedy): chúng khớp chuỗi dài nhất có thể. Thêm dấu chấm hỏi ngay sau chúng thành +? hoặc *? biến chúng thành không tham lam (non-greedy), khớp chuỗi ngắn nhất thoả mẫu; ví dụ re.findall('^F.+?:', 'From: Using the :') cho ['From:'] thay vì cả đoạn tới dấu hai chấm cuối. "++" sai vì trong mô-đun re dấu cộng đôi chỉ được hỗ trợ từ Python 3.11 và mang nghĩa possessive (chiếm hữu, không quay lui), không phải non-greedy. "$" sai vì nó neo vị trí cuối chuỗi hoặc cuối dòng. "^" sai vì nó neo đầu chuỗi, hoặc trong ngoặc vuông như [^a] thì mang nghĩa phủ định tập ký tự.
Mở trang câu hỏi này →
AAn "in-progress" phone conversation
BFiber optic cables
CThe wheels on an automobile
DThe chain on a bicycle
EThe ringer on a telephone
Lời giải
Đáp án đúng: "An "in-progress" phone conversation". Socket (ổ cắm mạng) là điểm cuối của một kết nối hai chiều giữa hai chương trình: sau khi connect thành công, hai bên có thể lần lượt gửi bằng send và nhận bằng recv cho tới khi một bên gọi close, giống hệt một cuộc gọi điện thoại đang diễn ra mà hai người nói qua nói lại cho tới lúc gác máy. "Fiber optic cables" là phương tiện truyền vật lý ở tầng thấp nhất, tương ứng với đường dây chứ không phải kết nối logic giữa hai ứng dụng. "The wheels on an automobile" là bộ phận cơ khí lăn trên đường, không có hai đầu trao đổi thông tin với nhau. "The chain on a bicycle" chỉ truyền lực một chiều từ bàn đạp tới bánh xe, không phải kênh trao đổi qua lại. "The ringer on a telephone" chỉ là chuông báo có cuộc gọi tới, giống tín hiệu chờ kết nối chứ chưa phải cuộc trò chuyện đang mở.
Mở trang câu hỏi này →
A"foo'bar"
B'foo"bar'
C"""foo'bar"""
D'foo'bar'
Lời giải
Đáp án đúng: ""foo'bar"". Chuỗi foo'bar chứa một dấu nháy đơn, nên cách tự nhiên là bao nó bằng nháy kép: bên trong cặp nháy kép, dấu nháy đơn chỉ là một ký tự bình thường, không kết thúc chuỗi. Cần nói thẳng: chuỗi nháy ba """foo'bar""" cũng hợp lệ và tạo ra đúng giá trị foo'bar, vì trong chuỗi nháy ba cả nháy đơn lẫn nháy kép đều được phép; câu này vốn có thể chọn nhiều cách, nhưng ở đây chỉ cho chọn một nên đáp án lấy cách viết bằng nháy kép, là cách thông dụng nhất. Phương án "'foo"bar'" hợp lệ về cú pháp nhưng tạo ra chuỗi foo"bar chứa dấu nháy kép, khác giá trị cần có. Phương án "'foo'bar'" lỗi cú pháp: dấu nháy đơn thứ hai đóng chuỗi ngay sau foo, phần bar' còn lại khiến Python báo SyntaxError; muốn dùng nháy đơn bao ngoài thì phải thoát dấu nháy bên trong thành 'foo\'bar'.
Mở trang câu hỏi này →
Aprint(typeof(x))
Bprint(type(x))
Cprint(typeof x)
Dprint(typeOf(x))
Lời giải

Đáp án đúng: "print(type(x))". Hàm có sẵn type() nhận một đối tượng và trả về kiểu của nó, nên print(type(x)) với x = 5 in ra <class 'int'>, với x = 'abc' in ra <class 'str'>. Đây là cách kiểm tra kiểu nhanh khi gỡ lỗi, còn muốn kiểm một giá trị có thuộc một kiểu hay không thì dùng isinstance(x, int). "print(typeof(x))" sai vì typeof là toán tử của JavaScript; Python không có tên typeof nên báo NameError. "print(typeof x)" vẫn là cú pháp JavaScript, hai tên đứng cạnh nhau không có toán tử nên Python báo SyntaxError ngay khi đọc mã. "print(typeOf(x))" cũng không tồn tại; Python phân biệt chữ hoa chữ thường và không có hàm typeOf nào, kết quả là NameError.

Mở trang câu hỏi này →
A_myvar
BMyvar
CMy_var
DMy-var
Lời giải
Đáp án đúng: "My-var". Tên biến (identifier) trong Python chỉ được gồm chữ cái, chữ số và dấu gạch dưới, không bắt đầu bằng chữ số và không trùng từ khoá; dấu gạch ngang không được phép vì Python hiểu nó là toán tử trừ, nên My-var = 1 bị đọc thành My - var = 1 và báo SyntaxError. Câu hỏi tìm tên KHÔNG hợp lệ nên các tên hợp lệ không được chọn: "_myvar" hợp lệ vì được phép bắt đầu bằng dấu gạch dưới, theo quy ước còn ngụ ý biến dùng nội bộ; "Myvar" hợp lệ vì chỉ gồm chữ cái, và Python phân biệt hoa thường nên Myvar khác myvar; "My_var" hợp lệ vì dấu gạch dưới được dùng để nối các từ, cách viết snake_case mà PEP 8 khuyên dùng cho tên biến là dạng chữ thường my_var.
Mở trang câu hỏi này →
AUsers->name = 'new name' WHERE ...
BUsers.name='new name' WHERE ...
CUPDATE Users SET name='new name' WHERE ...
DUPDATE Users (name) VALUES ('new name') WHERE ...
Lời giải

Đáp án đúng: "UPDATE Users SET name='new name' WHERE ...". Cú pháp chuẩn để sửa dữ liệu là UPDATE tên bảng, rồi SET cột bằng giá trị mới, rồi WHERE điều kiện; SET liệt kê các cột cần đổi, còn WHERE giới hạn những dòng bị ảnh hưởng, thiếu WHERE thì mọi dòng trong bảng đều bị đổi. "Users->name = 'new name' WHERE ..." dùng toán tử mũi tên kiểu truy cập thành viên của C hay PHP, không phải SQL, và thiếu hẳn từ khoá UPDATE. "Users.name='new name' WHERE ..." giống phép gán thuộc tính trong Python; SQL có cho viết tên bảng chấm tên cột để chỉ một cột trong truy vấn, nhưng không có lệnh nào bắt đầu bằng phép gán như vậy. "UPDATE Users (name) VALUES ('new name') WHERE ..." trộn cú pháp của INSERT INTO vào UPDATE; VALUES chỉ dùng khi chèn dòng mới, còn UPDATE bắt buộc dùng SET.

Mở trang câu hỏi này →
Aexit
Bbreak
Cstop
Dreturn
Lời giải
Đáp án đúng: "break". Lệnh break thoát ngay khỏi vòng lặp for hoặc while gần nhất chứa nó, chương trình chạy tiếp ở dòng đầu tiên sau vòng lặp; đây là cách chuẩn để dừng vòng lặp khi đã gặp điều kiện mong muốn, ví dụ trong while True đọc dữ liệu cho tới khi người dùng gõ done. Phương án "exit" không phải từ khoá của Python; exit() là hàm thoát cả chương trình (chủ yếu dùng trong trình thông dịch tương tác), không chỉ dừng vòng lặp. Phương án "stop" không phải từ khoá hay hàm có sẵn nào của Python, viết vào sẽ ném NameError. Phương án "return" là từ khoá thật nhưng dùng để kết thúc một hàm và trả giá trị; nếu vòng lặp nằm trong hàm thì return cũng khiến vòng lặp dừng, nhưng đó là hệ quả của việc rời cả hàm, và đặt return ngoài hàm là SyntaxError. Đi cặp với break là continue, bỏ qua phần còn lại của lượt hiện tại để sang lượt kế tiếp.
Mở trang câu hỏi này →
A4
B2
C4.2
D0.42
Lời giải
Đáp án đúng: "2". Toán tử % trong Python là phép lấy phần dư (modulo): a % b cho số dư khi chia a cho b. 42 chia 10 được thương nguyên 4 và dư 2, vì 4 × 10 = 40 và 42 − 40 = 2, nên 42 % 10 bằng 2. Phép này hay dùng để lấy chữ số hàng đơn vị của một số hoặc kiểm tra chẵn lẻ bằng n % 2. "4" là thương của phép chia lấy phần nguyên, tức kết quả của 42 // 10, không phải phần dư. "4.2" là kết quả của phép chia thường 42 / 10, luôn cho số thực float trong Python 3. "0.42" là 42 chia cho 100, không ứng với phép toán nào trong biểu thức; nó có thể đến từ việc hiểu nhầm % là phần trăm.
Mở trang câu hỏi này →
50What is the output of print('X\nY')?4 lựa chọn
AXnY
BX Y
CX newline Y
DError
Lời giải
Đáp án đúng: "X newline Y". Trong chuỗi Python, cặp ký tự \n là chuỗi thoát (escape sequence) biểu diễn một ký tự xuống dòng, nên chuỗi 'X\nY' thực chất chỉ có ba ký tự: X, ký tự newline và Y. Khi print in ra, con trỏ xuống dòng sau X, nên màn hình hiện X ở dòng thứ nhất và Y ở dòng thứ hai; phương án mô tả đúng điều đó bằng lời. "XnY" sai vì kể cả dùng chuỗi thô (raw string) r'X\nY', khi đó dấu gạch chéo được giữ nguyên và in ra X, gạch chéo, n, Y; không trường hợp nào dấu gạch chéo tự biến mất để còn lại XnY. "X Y" sai vì \n không phải dấu cách; muốn in dấu cách phải viết 'X Y' hoặc print('X', 'Y'). "Error" sai vì \n là chuỗi thoát hợp lệ, lệnh chạy bình thường.
Mở trang câu hỏi này →