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.

4.020/20.114 câuCòn 16.094
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 →
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 →
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 →
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 →
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["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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
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 →
4015What 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 →
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 →
ADocument-Type:
BContent-Type:
CMetadata:
DETag:
EHTML-Document:
Lời giải
Đáp án đúng: "Content-Type:". Trong giao thức HTTP, phản hồi (response) của máy chủ gồm các dòng header đứng trước phần thân; header Content-Type cho trình duyệt biết kiểu MIME của tài liệu trả về, ví dụ text/html; charset=utf-8 hay image/png, để trình duyệt quyết định hiển thị nó như trang web, ảnh hay văn bản thường. Phương án "Document-Type:" không phải header chuẩn của HTTP; dễ nhầm với khai báo DOCTYPE nằm bên trong chính tài liệu HTML. Phương án "Metadata:" cũng không phải header chuẩn, chỉ là từ chung chỉ dữ liệu mô tả. Phương án "ETag:" là header có thật nhưng mang mã định danh phiên bản của tài nguyên để phục vụ bộ nhớ đệm (cache), không cho biết kiểu tài liệu. Phương án "HTML-Document:" không tồn tại; hơn nữa một phản hồi có thể là JSON hay ảnh chứ không chỉ là HTML.
Mở trang câu hỏi này →
ADELETE FROM Cats WHERE name = 'Ruby'
BDELETE name='Ruby' FROM Cats
CDELETE ROW name='Ruby' FROM Cats
DDELETE FROM Cats WHERE name == 'Ruby'
Lời giải
Đáp án đúng: "DELETE FROM Cats WHERE name = 'Ruby'". Cú pháp chuẩn của SQL để xoá dòng là DELETE FROM tên bảng rồi WHERE điều kiện; mệnh đề WHERE chọn mọi dòng thoả điều kiện, nên tất cả các dòng có tên Ruby đều bị xoá, còn nếu bỏ WHERE thì cả bảng bị xoá sạch. So sánh bằng trong SQL dùng một dấu bằng và chuỗi đặt trong nháy đơn. "DELETE name='Ruby' FROM Cats" sai cú pháp vì DELETE không nhận tên cột hay điều kiện đứng trước FROM. "DELETE ROW name='Ruby' FROM Cats" cũng sai: SQL không có từ khoá ROW trong lệnh DELETE, bản thân DELETE vốn đã thao tác trên dòng. "DELETE FROM Cats WHERE name == 'Ruby'" dùng toán tử so sánh quen thuộc của Python; SQLite tình cờ chấp nhận hai dấu bằng như một cách viết khác của một dấu bằng, nhưng đó không phải SQL chuẩn và MySQL hay PostgreSQL sẽ báo lỗi cú pháp, nên cách viết đúng chuẩn vẫn là một dấu bằng.
Mở trang câu hỏi này →
A[ 'abcd', 786 , 2.23, 'john', 70.2 ]
Blist
CError
DNone of the others
Lời giải
Đáp án đúng: "[ 'abcd', 786 , 2.23, 'john', 70.2 ]". Câu này viết theo Python 2, nơi print là câu lệnh (statement) nên print list in ra biểu diễn của danh sách, tức toàn bộ các phần tử theo đúng thứ tự trong ngoặc vuông; cần nói rõ trên Python 3 print là hàm nên dòng print list báo lỗi cú pháp, phải viết print(list), và khi đó kết quả in ra có dạng ['abcd', 786, 2.23, 'john', 70.2], Python tự chuẩn hoá khoảng trắng chứ không giữ dấu cách thừa như cách chép trong phương án, nhưng nội dung và thứ tự phần tử vẫn là danh sách đó nên phương án này vẫn là đáp án. "list" sai vì print in giá trị mà biến list đang trỏ tới, không in tên biến. "Error" chỉ đúng nếu chạy nguyên văn trên Python 3, còn theo ngữ nghĩa Python 2 mà câu hỏi dùng thì lệnh chạy bình thường. "None of the others" sai vì đã có phương án khớp với nội dung in ra. Lưu ý thêm: đặt tên biến là list che mất hàm dựng sẵn list(), nên tránh trong mã thật.
Mở trang câu hỏi này →
Afind()
Bencode()
Cdecode()
Dupper()
Lời giải
Đáp án đúng: "decode()". Dữ liệu đọc từ mạng, chẳng hạn qua urllib.request.urlopen hay socket.recv, đến dưới dạng bytes: chuỗi byte thô, thường mã hoá theo UTF-8. Trong Python 3, kiểu str bên trong là chuỗi Unicode, nên phải gọi decode() trên đối tượng bytes để chuyển thành str, ví dụ line.decode().strip(). "find()" là phương thức tìm vị trí xuất hiện đầu tiên của một chuỗi con và trả về chỉ số hoặc -1, không đổi định dạng dữ liệu. "encode()" làm điều ngược lại: biến str thành bytes, dùng khi gửi đi, như lúc gửi lệnh GET qua socket, nên dùng cho dữ liệu nhận về là sai chiều. "upper()" chỉ chuyển chữ thường thành chữ hoa và giữ nguyên kiểu dữ liệu; gọi nó trên bytes vẫn trả về bytes chứ không thành str.
Mở trang câu hỏi này →