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 2/3 — câu 21–40.

Danh sách câu hỏi

40/50 câuCòn 10
Acreate myFunction():
Bdef myFunction():
Cfunction myfunction():
Ddef function myfunction():
Lời giải
Đáp án đúng: "def myFunction():". Trong Python, hàm được định nghĩa bằng từ khoá def, theo sau là tên hàm, cặp ngoặc tròn chứa tham số (có thể rỗng) và dấu hai chấm; thân hàm là các dòng thụt lề bên dưới. Lệnh def chỉ tạo ra hàm, muốn chạy phải gọi myFunction(). "create myFunction():" sai vì create không phải từ khoá của Python, trình thông dịch sẽ báo SyntaxError. "function myfunction():" mượn cách viết của JavaScript hay PHP; Python không có từ khoá function. "def function myfunction():" thừa chữ function giữa def và tên hàm: sau def Python chờ đúng một tên, gặp hai tên liền nhau sẽ báo lỗi cú pháp.
Mở trang câu hỏi này →
22What is true about the following code segment:4 lựa chọncó code
Đề bài
if x == 5 :
    print('Is 5')
    print('Is Still 5')
    print('Third 5')
ADepending on the value of x, either all three of the print statements will execute or none of the statements will execute
BThe string 'Is 5' will always print out regardless of the value for x.
CThe string 'Is 5' will never print out regardless of the value for x.
DOnly two of the three print statements will print out if the value of x is less than zero.
Lời giải
Đáp án đúng: "Depending on the value of x, either all three of the print statements will execute or none of the statements will execute". Python dùng thụt lề (indentation) để xác định khối lệnh: cả ba lời gọi print đều thụt vào cùng một mức dưới dòng if x == 5:, nên chúng tạo thành một khối duy nhất gắn với điều kiện. Khi x bằng 5 thì cả khối chạy và in đủ ba dòng, khi x khác 5 thì cả khối bị bỏ qua và không in gì. "The string 'Is 5' will always print out regardless of the value for x." sai vì lời gọi in Is 5 nằm trong khối if, chỉ chạy khi điều kiện đúng. "The string 'Is 5' will never print out regardless of the value for x." sai vì với x = 5 điều kiện đúng và chuỗi đó được in. "Only two of the three print statements will print out if the value of x is less than zero." sai vì khi x âm thì x == 5 sai, không lệnh nào trong khối chạy; không có cách nào chỉ chạy một phần khối.
Mở trang câu hỏi này →
A80
B25
C110
D443
Lời giải
Đáp án đúng: "80". Theo danh sách cổng do IANA quản lý, HTTP (giao thức truyền siêu văn bản) chạy trên cổng TCP 80; khi một URL bắt đầu bằng http và không ghi số cổng, trình duyệt và urllib tự kết nối tới cổng 80, giống ví dụ socket kinh điển mysock.connect(('data.pr4e.org', 80)). Số cổng cho máy chủ biết dịch vụ nào sẽ trả lời kết nối. "443" là cổng mặc định của HTTPS, tức HTTP chạy trên lớp mã hoá TLS, không phải HTTP thường. "25" là cổng của SMTP, giao thức các máy chủ thư dùng để chuyển thư điện tử cho nhau. "110" là cổng của POP3, giao thức để chương trình đọc thư tải thư từ máy chủ về máy người dùng. Nhớ các cổng phổ biến này giúp đọc đúng các đoạn mã socket gửi yêu cầu thủ công.
Mở trang câu hỏi này →
A.bin
B.p3
C.dll
D.exe
Lời giải
Đáp án đúng: ".exe". Trên Windows, tệp chương trình chạy được (executable) mang phần mở rộng .exe, và trình thông dịch Python cài vào máy chính là tệp python.exe (kèm pythonw.exe để chạy mà không mở cửa sổ console); khi gõ python trong cửa sổ lệnh, Windows tìm và chạy python.exe. Phương án ".bin" là đuôi thường dùng cho tệp dữ liệu nhị phân hoặc ảnh đĩa, không phải đuôi chương trình của Windows. Phương án ".p3" không phải phần mở rộng nào gắn với Python; tệp mã nguồn Python mang đuôi .py, còn tệp bytecode đã biên dịch mang đuôi .pyc. Phương án ".dll" là thư viện liên kết động (dynamic-link library) của Windows: bản cài Python cũng có tệp như python3.dll, nhưng tệp loại này chứa mã để chương trình khác nạp vào chứ không tự chạy trực tiếp được.
Mở trang câu hỏi này →
ASET
BTUPLE
CLIST
DDICTIONARY
Lời giải
Đáp án đúng: "LIST". List (danh sách) trong Python giữ đúng thứ tự phần tử theo lúc thêm vào (ordered), cho phép sửa, thêm, xoá phần tử sau khi tạo (changeable, hay mutable) và chấp nhận phần tử trùng nhau, ví dụ [1, 2, 2, 3] là hợp lệ. "SET" là tập hợp: không có thứ tự cố định, không truy cập theo chỉ số và tự loại bỏ phần tử trùng, nên {1, 2, 2} chỉ còn {1, 2}. "TUPLE" có thứ tự và cho phép trùng, nhưng là bất biến (immutable): tạo xong không gán lại phần tử được, nên trượt tiêu chí changeable. "DICTIONARY" lưu cặp key–value; từ Python 3.7 dict giữ thứ tự chèn và sửa được, nhưng mỗi key phải duy nhất, nên không cho phép thành viên trùng như câu hỏi yêu cầu.
Mở trang câu hỏi này →
AUse constraints
BAvoid using JOIN
CUse SELECT instead of DELETE
DRun rollback
Lời giải
Đáp án đúng: "Use constraints". Trong cơ sở dữ liệu quan hệ, ràng buộc (constraint) như khoá ngoại FOREIGN KEY kèm quy tắc ON DELETE RESTRICT hoặc NO ACTION buộc hệ quản trị từ chối lệnh xoá một dòng ở bảng cha khi vẫn còn dòng ở bảng con tham chiếu tới nó; đó là cơ chế toàn vẹn tham chiếu (referential integrity) do chính cơ sở dữ liệu thực thi, không phụ thuộc vào việc lập trình viên nhớ kiểm tra (SQLite cần bật PRAGMA foreign_keys = ON). "Avoid using JOIN" sai vì JOIN chỉ là cách ghép dòng khi đọc dữ liệu, không liên quan tới việc xoá. "Use SELECT instead of DELETE" sai vì SELECT chỉ đọc, đổi lệnh như vậy là bỏ luôn thao tác xoá chứ không bảo vệ dữ liệu liên kết. "Run rollback" sai vì rollback chỉ huỷ một giao dịch chưa commit sau khi đã lỡ xoá, không ngăn được việc xoá ngay từ đầu.
Mở trang câu hỏi này →
A2
B1
C6
D3
Lời giải

Đáp án đúng: "1". Python thực thi lần lượt từng dòng từ trên xuống. Dòng 1 gán chuỗi 'Hello Bob' cho astr và chạy thành công. Dòng 2 gọi int('Hello Bob'), nhưng chuỗi này không biểu diễn số nguyên nên int() ném ngoại lệ ValueError (invalid literal for int() with base 10); vì không có try/except bao quanh, chương trình dừng ngay tại đó, nên dòng cuối cùng chạy thành công là dòng 1. "2" sai vì chính dòng 2 là dòng gây lỗi: nó bắt đầu chạy nhưng không hoàn tất. "3" sai vì lệnh print ở dòng 3 không bao giờ được tới, lỗi ở dòng 2 đã chấm dứt chương trình trước đó. "6" chỉ đúng nếu mọi dòng đều chạy được; các dòng 4 tới 6 với chuỗi '123' vốn hợp lệ (int('123') cho 123) nhưng không được thực thi vì chương trình đã dừng. Muốn chạy tiếp tới cuối phải bọc dòng 2 trong try/except.

Mở trang câu hỏi này →
AThat the web site supports the HTTP GET command
BThat the web site allows scraping
CThat the web site returns HTML for all pages
DThat the web site only has links
Lời giải
Đáp án đúng: "That the web site allows scraping". Thu thập dữ liệu web (web scraping) là dùng chương trình tự động tải trang và bóc nội dung; trước khi làm cần kiểm xem trang có cho phép hay không, qua điều khoản sử dụng (terms of service) và tệp robots.txt, vì nhiều trang cấm truy cập tự động hoặc giới hạn tốc độ, vi phạm có thể bị chặn hoặc gặp rắc rối pháp lý. Phương án "That the web site supports the HTTP GET command" sai vì GET là phương thức cơ bản mà mọi máy chủ web đều hỗ trợ để trả trang, không có gì phải kiểm. Phương án "That the web site returns HTML for all pages" không cần thiết: trang có thể trả JSON, ảnh hay PDF và chương trình vẫn xử lý được theo từng loại. Phương án "That the web site only has links" không liên quan tới việc được phép thu thập, và một trang chỉ toàn liên kết thì cũng chẳng có nội dung gì đáng lấy.
Mở trang câu hỏi này →
AINSERT INTO
BINSERT ROW
CADD ROW
DINSERT TABLE
Lời giải
Đáp án đúng: "INSERT INTO". Lệnh thêm dòng trong SQL có dạng INSERT INTO tên_bảng (cột1, cột2) VALUES (giá_trị1, giá_trị2); ví dụ INSERT INTO Users (name, email) VALUES ('Chuck', 'csev@umich.edu') thêm đúng một bản ghi mới vào bảng Users. Trong Python với sqlite3, ta gọi cur.execute với câu lệnh này kèm dấu hỏi làm chỗ giữ giá trị, rồi conn.commit() để ghi hẳn xuống tệp. "INSERT ROW" sai vì ROW không thuộc cú pháp; sau INSERT phải là INTO và tên bảng. "ADD ROW" không tồn tại trong SQL; ADD chỉ xuất hiện trong ALTER TABLE ... ADD COLUMN để thêm cột, không thêm dòng. "INSERT TABLE" cũng sai cú pháp: tạo bảng dùng CREATE TABLE, còn thêm dữ liệu phải qua INSERT INTO.
Mở trang câu hỏi này →
A==
B!=
C=<
D>=
Lời giải
Đáp án đúng: "=<". Python có sáu toán tử so sánh (comparison operator): ==, !=, <, >, <= và >=; với nhóm "nhỏ hơn hoặc bằng" thì dấu nhỏ hơn phải đứng trước dấu bằng, viết là <=. Chuỗi "=<" không phải toán tử hợp lệ, viết x =< 3 sẽ báo SyntaxError. Câu hỏi tìm phương án KHÔNG hợp lệ nên các toán tử đúng không được chọn: "==" là hợp lệ, so sánh bằng nhau và khác với dấu = dùng để gán; "!=" là hợp lệ, so sánh khác nhau (dạng <> cũ của Python 2 đã bị bỏ trong Python 3); ">=" là hợp lệ, so sánh lớn hơn hoặc bằng, đúng thứ tự dấu lớn hơn trước dấu bằng. Mẹo nhớ: đọc toán tử theo lời "nhỏ hơn hoặc bằng" thì viết theo đúng thứ tự đó.
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")". Tuple (bộ giá trị) trong Python được viết bằng cặp ngoặc tròn, các phần tử cách nhau bởi dấu phẩy; tuple có thứ tự, truy cập được theo chỉ số nhưng bất biến (immutable): sau khi tạo không thêm, xoá hay gán lại phần tử được, nhờ vậy tuple dùng được làm khoá của dictionary và nhẹ hơn list. "["apple", "banana", "cherry"]" dùng ngoặc vuông nên là list, cũng có thứ tự nhưng thay đổi được. "{"name": "apple", "color": "green"}" dùng ngoặc nhọn với các cặp khoá và giá trị nên là dictionary (từ điển), tra cứu theo khoá. "{"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ự và không giữ phần tử trùng. Lưu ý chính dấu phẩy mới tạo nên tuple: một phần tử phải viết kèm dấu phẩy như ("apple",).
Mở trang câu hỏi này →
AYou omit the semicolon ; on the last line of the if block
BYou de-indent the next line past the if block to the same level of indent as the original if statement
CYou put the colon : character on a line by itself to indicate we are done with the if block
DYou use a curly brace { after the last line of the if block
Lời giải

Đáp án đúng: "You de-indent the next line past the if block to the same level of indent as the original if statement". Python dùng thụt lề (indentation) để đánh dấu khối lệnh: mọi dòng thuộc khối if phải thụt vào cùng một mức sau dấu hai chấm, và khối kết thúc khi gặp dòng đầu tiên lùi lề (de-indent) về đúng mức của chính câu lệnh if; dòng đó là lệnh kế tiếp nằm ngoài khối. Phương án "You omit the semicolon ; on the last line of the if block" sai vì Python không dùng dấu chấm phẩy để kết thúc lệnh hay khối; dấu chấm phẩy chỉ tuỳ chọn khi ghép hai lệnh trên một dòng. Phương án "You put the colon : character on a line by itself to indicate we are done with the if block" sai vì dấu hai chấm đặt ở cuối dòng if để mở khối chứ không đóng khối, và đứng riêng một dòng sẽ gây SyntaxError. Phương án "You use a curly brace { after the last line of the if block" là lối viết của Java hay JavaScript, vốn bao khối bằng cặp ngoặc nhọn; Python không dùng ngoặc nhọn cho khối lệnh, trong Python ngoặc nhọn dùng để tạo dict hoặc set.

Mở trang câu hỏi này →
A!
B*
C^
D/
Lời giải
Đáp án đúng: "*". Bảng mã ASCII gán mỗi ký tự một số nguyên từ 0 đến 127; giá trị thập phân 42 ứng với dấu sao. Trong Python có thể kiểm bằng chr(42) trả về '*' và ord('*') trả về 42. Các ký tự lân cận: 40 và 41 là hai dấu ngoặc tròn, 43 là dấu cộng. "!" là dấu chấm than, mang mã 33, ký tự in được đầu tiên sau dấu cách (32). "^" là dấu mũ, mang mã 94, nằm sau các chữ hoa và dấu ngoặc vuông. "/" là dấu gạch chéo, mang mã 47, đứng ngay trước chữ số 0 (mã 48). Nhớ vài mốc như dấu cách là 32, chữ số 0 là 48, chữ hoa đầu bảng chữ cái là 65 và chữ thường đầu bảng là 97 giúp suy ra nhanh vị trí các ký tự khác.
Mở trang câu hỏi này →
A[b'd', b'e', b'f']
Bb'def'
C[100, 101, 102]
DIt raises an exception
Lời giải
Đáp án đúng: "It raises an exception". Biểu thức trong ngoặc được tính trước: b'abcde' là đối tượng bytes còn 'fghi' là chuỗi str, và Python 3 không cho nối hai kiểu này bằng dấu cộng, nên ngay bước b'abcde' + 'fghi' đã phát sinh TypeError (can't concat str to bytes); lát cắt [3:6] và list() không bao giờ được chạy. "[100, 101, 102]" là kết quả nếu vế sau cũng là bytes b'fghi', vì phần tử của bytes khi lấy ra là số nguyên mã byte (d = 100, e = 101, f = 102). "b'def'" là kết quả của lát cắt b'abcdefghi'[3:6] nếu không bọc list(). "[b'd', b'e', b'f']" sai cả trong trường hợp nối được, vì duyệt bytes cho số nguyên chứ không cho các bytes một ký tự. Muốn nối hợp lệ phải mã hoá chuỗi bằng 'fghi'.encode().
Mở trang câu hỏi này →
Aurlopen()
Bconnect()
Crequest()
Dreadurl()
Lời giải
Đáp án đúng: "urlopen()". Trong Python 3, urllib.request.urlopen(url) mở kết nối HTTP, gửi yêu cầu GET và trả về một đối tượng giống tệp (file-like object): có thể lặp từng dòng hoặc gọi read() để lấy nội dung dạng bytes, rồi decode() thành chuỗi; urllib tự lo phần socket và header thay cho người lập trình. "connect()" là phương thức của đối tượng socket, chỉ mở kết nối TCP tới một máy chủ và cổng, không tự gửi yêu cầu hay lấy nội dung trang. "request()" không phải hàm của urllib: urllib.request là tên module con chứa urlopen, còn Request là lớp dùng để dựng một yêu cầu rồi truyền vào urlopen, tự nó không trả về nội dung. "readurl()" không tồn tại trong urllib; việc đọc nội dung được thực hiện bằng read() trên đối tượng mà urlopen trả về.
Mở trang câu hỏi này →
ASo they can repair hardware
BTo help computers do boring tasks efficiently
CTo replace all manual work
DTo teach computers how to feel emotions
Lời giải
Đáp án đúng: "To help computers do boring tasks efficiently". Máy tính rất nhanh, không biết mệt nhưng chỉ làm đúng những gì được chỉ dẫn; học lập trình là học cách viết chỉ dẫn đó để giao cho máy những việc lặp đi lặp lại, nhàm chán như đếm từ trong một tệp lớn hay xử lý hàng nghìn dòng dữ liệu, nhờ vậy con người dành thời gian cho việc cần sáng tạo và phán đoán. Phương án "So they can repair hardware" nhầm lập trình với sửa chữa phần cứng; đó là kỹ năng điện tử, không phải viết phần mềm. Phương án "To replace all manual work" phóng đại: lập trình tự động hoá được nhiều việc nhưng không thay thế được mọi công việc tay chân hay mọi quyết định của con người. Phương án "To teach computers how to feel emotions" sai vì chương trình chỉ là chuỗi lệnh xử lý dữ liệu; máy không có cảm xúc, và viết mã không làm máy cảm nhận được điều gì.
Mở trang câu hỏi này →
APython compares the second element and finds 1 < 3
BPython compares the third element and finds 2 < 4
CPython compares the first element and finds 0 < 0
DPython compares the second element and finds 1 > 3
Lời giải
Đáp án đúng: "Python compares the second element and finds 1 < 3". Tuple được so sánh theo thứ tự từ điển (lexicographic): Python so cặp phần tử đầu tiên, nếu bằng nhau thì chuyển sang cặp kế tiếp, và dừng ngay ở cặp đầu tiên khác nhau; kết quả của cặp đó quyết định cả phép so sánh, các phần tử phía sau không được xét. Ở đây 0 == 0 nên chưa phân định, sang phần tử thứ hai thấy 1 < 3, vậy cả biểu thức là True. "Python compares the third element and finds 2 < 4" sai vì phép so sánh đã dừng ở phần tử thứ hai; dù phần tử thứ ba có lớn hơn thì kết quả vẫn là True. "Python compares the first element and finds 0 < 0" sai vì 0 < 0 là False; phần tử đầu bằng nhau chỉ khiến Python đi tiếp chứ không quyết định kết quả. "Python compares the second element and finds 1 > 3" sai vì 1 > 3 là False; nếu thật như vậy thì biểu thức đã trả về False.
Mở trang câu hỏi này →
AIt's syntax is simpler and aligns with JavaScript
BIt is more verbose
CIt is human-unreadable
DIt requires no formatting
Lời giải
Đáp án đúng: "It's syntax is simpler and aligns with JavaScript". JSON (JavaScript Object Notation) biểu diễn dữ liệu bằng đối tượng, mảng, chuỗi và số theo đúng cú pháp literal của JavaScript, không cần thẻ mở thẻ đóng như XML, nên gọn hơn, dễ phân tích và ánh xạ thẳng sang dict, list trong Python (qua json.loads); vì vậy JSON được ưa dùng cho REST API. "It is more verbose" sai vì dài dòng (verbose) là nhược điểm của XML với các thẻ lặp tên, và nếu đúng thì đó cũng không phải ưu điểm. "It is human-unreadable" sai vì JSON là văn bản thuần, người đọc được dễ dàng. "It requires no formatting" sai vì JSON có quy tắc định dạng chặt: khoá phải đặt trong nháy kép, không có dấu phẩy thừa, chuỗi dùng nháy kép; sai định dạng thì bộ phân tích báo lỗi.
Mở trang câu hỏi này →
AReturns an integer object from any number or string
BConnect to the network and retrieve a web page.
CRead the memory of the running program
DTake a screen shot from an area of the screen
Lời giải
Đáp án đúng: "Returns an integer object from any number or string". int() là hàm dựng sẵn để chuyển đổi kiểu: int(3.9) cắt bỏ phần thập phân còn 3, int('42') đổi chuỗi chữ số thành số nguyên 42, int('ff', 16) đọc chuỗi theo cơ số 16; nếu chuỗi không biểu diễn số nguyên như int('abc') thì ném ValueError, nên cụm "any number or string" cần hiểu là số hoặc chuỗi chứa số hợp lệ. "Connect to the network and retrieve a web page." là việc của urllib.request.urlopen hoặc của socket, không liên quan đến chuyển kiểu. "Read the memory of the running program" không phải chức năng của int(); Python thông thường không cho chương trình đọc trực tiếp vùng nhớ của chính nó theo cách đó. "Take a screen shot from an area of the screen" là việc của thư viện bên ngoài như Pillow với ImageGrab hoặc pyautogui, không phải hàm dựng sẵn chuyển kiểu.
Mở trang câu hỏi này →
A[17, 123]
B[5, 17]
C[17, 5]
DIndexError
Lời giải
Đáp án đúng: "[17, 5]". List (danh sách) trong Python là kiểu khả biến (mutable) và đánh chỉ số từ 0: numbers[0] là 17, numbers[1] là 123. Câu lệnh gán numbers[1] = 5 thay phần tử ở chỉ số 1 bằng 5 ngay trên chính list đó, nên numbers trở thành [17, 5]. Phương án "[17, 123]" cho rằng list không đổi, điều chỉ xảy ra với kiểu bất biến như tuple hay str, mà khi đó phép gán còn ném TypeError chứ không lặng lẽ giữ nguyên. Phương án "[5, 17]" vừa đặt 5 lên đầu vừa làm mất 123, không khớp với phép gán theo chỉ số, vốn chỉ thay đúng một vị trí và giữ nguyên thứ tự. Phương án "IndexError" sai vì chỉ số 1 nằm trong phạm vi hợp lệ 0 tới 1 của list hai phần tử; IndexError chỉ xảy ra với numbers[2] trở lên. Nói chặt, bản thân câu lệnh gán không trả về giá trị, câu hỏi muốn hỏi nội dung list sau khi gán.
Mở trang câu hỏi này →