Ngân hàng câu hỏi của chương

Câu hỏi: PRP201c - Phần 1: Nền tảng lập trình Python

40 câu trắc nghiệm kèm lời giải của môn PRP201c - Lập trình Python, xếp theo thứ tự nhập vào ngân hàng.

Danh sách câu hỏi

20/40 câuCòn 20
AUnderline all of the conditional code
BIndent the line below the if statement
CStart the statement with a "#" character
DBegin the statement with a curly brace {
Lời giải
Đáp án đúng: "Indent the line below the if statement". Python không dùng ngoặc nhọn để gom khối lệnh mà dùng thụt lề (indentation): sau dòng if kết thúc bằng dấu hai chấm, mọi dòng thụt vào sâu hơn thuộc khối chỉ chạy khi điều kiện đúng, và dòng đầu tiên thụt lề trở lại ngang if đánh dấu khối đã kết thúc. Thụt lề sai sẽ gây IndentationError hoặc làm lệnh chạy ngoài ý muốn. "Underline all of the conditional code" sai vì mã nguồn là văn bản thuần, không có định dạng gạch chân; trình thông dịch không thấy được kiểu chữ. "Start the statement with a "#" character" sai vì ký tự "#" mở đầu chú thích, Python bỏ qua toàn bộ phần sau nó nên dòng đó không chạy gì cả. "Begin the statement with a curly brace {" là cách của C, Java hay JavaScript; trong Python dấu ngoặc nhọn dùng để tạo dict hoặc set, không mở khối lệnh.
Mở trang câu hỏi này →
Aquit()
Bstop()
Cexit()
Dend()
Lời giải
Đáp án đúng: "quit()". Khi làm việc ở trình thông dịch tương tác (interactive mode, chế độ gõ lệnh trực tiếp sau dấu nhắc >>>), cách kết thúc phiên mà tài liệu nhập môn Python hay dạy là gõ quit(), lệnh này đóng trình thông dịch và trả về dòng lệnh của hệ điều hành. "exit()" thực ra cũng hoạt động vì Python định nghĩa exit và quit là hai đối tượng tương đương do mô-đun site nạp sẵn, nên nó chỉ là một cách khác chứ không phải cách được câu hỏi nhắm tới; trong chương trình thật nên dùng sys.exit(). "stop()" sai vì Python không có hàm dựng sẵn nào tên stop, gọi sẽ báo NameError. "end()" cũng sai vì không có hàm dựng sẵn end; end chỉ là tên tham số của print dùng để đổi ký tự kết thúc dòng.
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 →
4What 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 →
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 →
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 →
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 →
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 →
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 →
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"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 →
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 →
AA user-defined function
BA built-in function
CThe central processing unit
DA conditional statement
Lời giải
Đáp án đúng: "A built-in function". input() là hàm dựng sẵn (built-in function) của Python: có sẵn ngay khi chạy trình thông dịch, không cần import hay tự định nghĩa; nó tạm dừng chương trình, chờ người dùng gõ một dòng rồi trả về dòng đó dưới dạng chuỗi, ví dụ name = input('Tên bạn: '). Cùng nhóm với nó là print(), len(), int(), type(). Phương án "A user-defined function" sai vì hàm tự định nghĩa là hàm do lập trình viên viết bằng def, còn input có sẵn trong ngôn ngữ. Phương án "The central processing unit" là bộ xử lý trung tâm (CPU), một thành phần phần cứng thực thi lệnh, không phải tính năng của ngôn ngữ. Phương án "A conditional statement" là câu lệnh điều kiện như if, elif, else dùng để rẽ nhánh; input không quyết định nhánh nào chạy mà chỉ nhận dữ liệu vào.
Mở trang câu hỏi này →
A==
B>=
C<=
D=
Lời giải
Đáp án đúng: "=". Dấu bằng đơn là toán tử gán (assignment): x = 5 lấy giá trị bên phải cất vào biến bên trái, không trả lời câu hỏi đúng hay sai nào, nên nó không phải toán tử so sánh hay logic. Trong Python, viết dấu gán đơn trong điều kiện if là lỗi cú pháp, chính để tránh nhầm với so sánh. "==" là toán tử so sánh bằng, cho True khi hai vế có giá trị bằng nhau, ví dụ 3 == 3.0 là True. ">=" so sánh lớn hơn hoặc bằng, như 5 >= 5 cho True. "<=" so sánh nhỏ hơn hoặc bằng, như 2 <= 1 cho False. Cả ba toán tử này đều trả về giá trị bool nên thuộc nhóm toán tử so sánh, vì vậy không được chọn ở câu hỏi phủ định này; chỉ dấu gán là ngoại lệ.
Mở trang câu hỏi này →
Đề bài
if x < 2:
    print('Below 2')
elif x >= 2:
    print('Two or more')
else:
    print('Something else')
Ax = -2.0
BThis code will never print 'Something else' regardless of the value for 'x'
Cx = 2.0
Dx = -22
Lời giải
Đáp án đúng: "This code will never print 'Something else' regardless of the value for 'x'". Câu dẫn hỏi giá trị của x sau khi chạy, nhưng đoạn mã không hề gán x và các phương án là của câu hỏi gốc "giá trị nào của x làm in ra Something else", nên phải đọc câu hỏi theo nghĩa nhánh else. Hai điều kiện x < 2 và x >= 2 bù nhau, phủ kín mọi số thực, nên với bất kỳ giá trị số nào một trong hai nhánh đầu luôn chạy và nhánh else không bao giờ tới được (mã chết, dead code). "x = -2.0" sai vì -2.0 < 2 nên in Below 2. "x = 2.0" sai vì 2.0 >= 2 nên in Two or more. "x = -22" sai vì -22 < 2 nên cũng in Below 2. Lưu ý riêng: giá trị float('nan') làm mọi phép so sánh đều sai nên sẽ lọt xuống else, đây là ngoại lệ hiếm ngoài phạm vi câu hỏi.
Mở trang câu hỏi này →
Apython hello.py
Brun hello.py
Cexecute hello.py
Dopen hello.py
Lời giải
Đáp án đúng: "python hello.py". Để chạy một script, ta gọi trình thông dịch Python ở dòng lệnh (terminal hoặc Command Prompt) và truyền tên tệp làm đối số; trình thông dịch đọc tệp rồi thực thi lần lượt từng câu lệnh từ trên xuống. Tuỳ hệ thống, lệnh có thể là python3 hello.py trên Linux, macOS hoặc py hello.py trên Windows, nhưng bản chất đều là gọi trình thông dịch kèm tên tệp. "run hello.py" không phải lệnh chuẩn của hệ điều hành; một số IDE có nút Run, IPython có lệnh đặc biệt %run, nhưng ở dòng lệnh thông thường thì không có. "execute hello.py" cũng không phải lệnh có sẵn trên hệ điều hành phổ biến nào. "open hello.py" trên macOS chỉ mở tệp bằng ứng dụng mặc định, thường là trình soạn thảo, còn trong Python thì open() là hàm mở tệp để đọc hoặc ghi, không thực thi mã trong tệp.
Mở trang câu hỏi này →
Awhile
Bpayroll
Cnames
Dpizza
Lời giải
Đáp án đúng: "while". Từ khoá (reserved word) là những từ Python dành riêng cho cú pháp, không được dùng làm tên biến hay tên hàm; while mở một vòng lặp chạy lặp lại khi điều kiện còn đúng, cùng nhóm với if, for, def, return, import, True, None. Viết while = 5 sẽ báo SyntaxError. Phương án "payroll" chỉ là một định danh (identifier) bình thường, hợp lệ để đặt tên biến như payroll = 1000, Python không gán nghĩa đặc biệt nào cho nó. Phương án "names" cũng là tên tự do, hay dùng cho một list chứa các tên, không phải từ khoá. Phương án "pizza" là tên biến hợp lệ hoàn toàn; Python không hiểu nghĩa của tên biến, chỉ cần tên bắt đầu bằng chữ cái hoặc dấu gạch dưới và không trùng từ khoá. Có thể xem danh sách từ khoá đầy đủ bằng import keyword rồi in keyword.kwlist.
Mở trang câu hỏi này →