前言
本文整理了填空、選擇、判斷等一些課後習題答案,具體的編程題可以見:Python快速編程入門課後程序題答案。
第一章
一、填空題
- Python是一種面向
對象
的高級語言。 - Python可以在多種平臺運行,這體現了Python語言的
可移植
特性。 - Python源代碼被解釋器轉換後的格式爲
字節碼
。 - Python 3.x 默認使用的編碼是
UTF-8
。
二、判斷題
- Python是開源的,它可以被一直到許多平臺上。(
√
) - Python的優點之一是具有僞代碼的本質。(
√
) - Python可以開發Web程序,也可以管理操作系統。(
√
) - Mac系統自帶Python開發環境。(
√
) - Python自帶的shell,其性能由於IPython。(
×
) - 我們編寫的Python代碼在運行過程中,會被編譯成二進制代碼。(
×
) - Python程序被解釋器轉換後的文件格式後綴名爲.pyc。(
√
) - Python 3.x 版本的代碼完全兼容 Python 2.x。(
×
) - PyCharm是開發Python的集成開發環境。(
√
) - 代碼print(3,4)是Python 2.x的輸出格式。(
×
)
三、選擇題
-
下列選項中,不屬於Python語言特點的是(
C
)。
A.簡單易學 B.開源 C.面對過程 D.可移植性 -
下列領域中,使用Python可以實現的是(
ABCD
)。(多選)
A.Web開發 B.操作系統管理 C.科學計算 D.遊戲 -
下列關於Python 2.x和Python 3.x的說法,正確的是(
B
)。
A.Python 3.x使用print語句輸出數據
B.Python 3.x默認使用的編碼是UTF-8
C.Python 2.x和Python 3.x使用//進行除法運算的結果不一致
D.Python 3.x版本的異常可以直接被拋出 -
下列關於Python的說法中,錯誤的是(
C
)。
A.Python是從ABC發展起來的
B.Python是一門高級的計算機語言
C.Python是一門只面向對象的語言
D.Python是一種代表簡單主義思想的語言 -
下列關於IPython的說法,錯誤的是(
D
)。
A.IPython集成了交互式Python的很多有點
B.IPython的性能遠遠優於標準的Python的shell
C.IPython支持變量自動補全,自動收縮
D.與標準的Python相比,IPython缺少內置的功能和函數
四、簡答題
-
簡述Python的特點。
•簡單易學
•開源
•高級語言
•可移植性
•解釋性
•面向對象
•可擴展性
•豐富的庫
•規範的代碼 -
簡述Python的應用領域(至少3個)。
•web應用開發
•操作系統管理、服務器運維的自動化腳本
•科學計算
•桌面軟件
•服務器軟件(網絡軟件)
•遊戲
•構思實現,產品早期原型和迭代 -
簡述Python 2.x和Python 3.x的區別。
(1)、在python2.x中,輸出數據使用的是print語句。但是在python3.x中, print語句沒有了,取而代之的是print()函數
(2)、python2有ASCII Str()類型,unicode()是單獨的,不是byte類型。在python3.x版本的源代碼中,默認使用的是UTF-8編碼,從而可以很好的支持中文字符。
(3)、在python 2.x中,使用運算符/進行除法運算,整數相除的結果是一個整數,浮點數除法會保留小數點的部分得到一個浮點數的結果。在python 3.x中使用運算符/進行除法,整數之間的相除,結果也會是浮點數。
(4)、相比python2.x版本,python3.x版本在異常方面有很多改變:
•在python2.x版本,所有類型的對象都是直接被拋出的,但是,在python3.x版本中,只有繼承自BaseException的對象纔可以被拋出。
•在python2.x版本中,捕獲異常的語法是except exc,var。在python3.x版本中,引入了as關鍵字,捕獲異常的語法變更爲except exc as var。
•在python2.x版本中,處理異常使用raise Exception(args)。在python3.x版本中,處理異常使用raiseException, args。
•python3.x取消了異常類的序列行爲和.message屬性。
(5)、在Python 3.x中,表示八進制字面量的方式只有一種,並且必須寫0o1000這樣的方式,原來01000的方式不能使用了。
(6)、Python 2.x中不等於有兩種寫法 != 和 <>;但是,Python 3.x中去掉了<>, 只有!=一種寫法
(7)、python3.x去除了long類型,現在只有一種整型int,但它的行爲就像是python2.x版本的long。 -
簡述Python程序的執行原理。
Python程序的執行原理如圖所示:
Python解釋器將源代碼轉換爲字節碼,然後把編譯好的字節碼轉發到Python虛擬機(PVM)中進行執行。 -
簡述IPython的特點。
•IPython具有卓越的Python shell,其性能遠遠優於標準Python的shell。
•IPython支持變量自動補全,自動縮進,支持 bash shell 命令,內置了許多很有用的功能和函數。
•IPython提供了基於控制檯命令環境的定製功能,可以十分輕鬆地將交互式Python shell包含在各種Python應用中,甚至可以當作系統級shell來使用。
第二章
一、填空題
- 在Python中,int表示的數據類型是
整型
。 - 布爾類型的值包括
True
和False
。 - Python的浮點數佔
8
個字節。 - 如果要在計算機中表示浮點數,則表示方法爲
1.2e5
。 - 00001000>>2的結果是
00000010
。 - 若a=20,那麼bin(a)的值爲
0b10100
。 - 如果想測試變量的類型,可以使用
type()
來實現。 - 若a=1,b=2,那麼(a or b)的值爲
1
。 - 若a=10,b=20,那麼(a and b)結果爲
20
。 - 4.34E5表示的是
4.34×10^5
。
二、判斷題
- Python使用符號#表示單行註釋。(
√
) - 標識符可以以數字開頭。(
×
) - type()方法可以查看變量的數據類型。(
√
) - Python中的代碼塊使用縮進來表示。(
√
) - Python中的多行語句可以使用反斜槓來實現。(
×
) - Python中標識符不區分大小寫。(
×
) - Python中的標識符不能使用關鍵字。(
√
) - 使用help()命令可以進入幫助系統。(
√
) - Python中的成員運算符用於判斷制定序列中是否包含某個值。(
√
) - 比較運算符用於比較兩個數,其返回的結果智能是True或False。(
√
)
三、選擇題
-
下列選項中,(
D
)的布爾值不是Flase。
A.None
B.0
C.()
D.1 -
假設a=9,b=2,那麼下列運算中,錯誤的是(
D
)。
A.a+b的值是11
B.a//b的值是4
C.a%b的值是1
D.a**b的值是18 -
下列標識符中,合法的是(
AD
)。
A.helloWorld
B.2ndObj
C.hello#world
D._helloworld -
下列符號中,表示Python中單行註釋的是(
A
)。
A.#
B.//
C.<!-- -->
D."“" -
下列選項中,符合Python命名規範的標識符是(
C
)。
A.user-Passwd
B.if
C._name
D.setup.exe -
下列選項中,Python不支持的數據類型有(
B
)。
A.int
B.char
C.float
D.dicitionary -
下列表達式中,返回 True 的是(
B
)。
A.a=2 b=2 a=b
B.3>2>1
C.True and False
D.2!=2 -
下列語句中,哪個在 Python 中是非法的?(
B
)。
A.x = y = z = 1
B.x = (y = z + 1)
C.x, y = y, x
D.x += y -
下列關於 Python 中的複數,說法錯誤的是(
C
)。
A.表示複數的語法是 real + image j
B.實部和虛部都是浮點數
C.虛部必須後綴 j,且必須是小寫
D.一個複數必須有表示虛部的實數和 j -
下列選項中,冪運算的符號爲(
D
)。
A.*
B.++
C.%
D.**
四、簡答題
- 簡述Python中標識符的命名規則。
•標識符由字母、下劃線和數字組成,且數字不能開頭。
•python中的標識符是區分大小寫的。
•python中的標識符不能使用關鍵字。 - 簡述Python中的數字類型。
int(整型)、long(長整型)、float(浮點數)、complex(複數)
第三章
一、填空題
- 在循環體中使用
break
語句可以跳出循環體。 elif
語句是else語句和if語句的組合。- 在循環體中可以使用
continue
語句跳過本次循環後面的代碼,重新開始下一次循環。 - 如果希望循環是無限的,我們可以通過設置條件表達式永遠爲
True
來實現無限循環。 - Python中的
pass
表示的是空語句。
二、判斷題
- elif可以單獨使用。(
×
) - pass語句的出現是爲了保持進程結構的完整性。(
√
) - 在Python中沒有switch-case語句。(
√
) - 每個if條件後面都要使用冒號。(
√
) - 循環語句可以嵌套使用。(
√
)
三、選擇題
- 下列選項中,會輸出1,2,3三個數字的是(
BC
)。
A.
for i in range(3):
print(i)
B.
for i in range(3):
print(i + 1)
C.
a_list = [0,1,2]
for i in a_list:
print(i + 1)
D.
i = 1
while i < 3:
print(i)
i = i + 1
- 閱讀下面的代碼:
sum = 0
for i in range(100):
if(i%10):
continue
sum = sum + i
print(sum)
上述程序的執行結果是(C
)。
A.5050 B.4950 C.450 D.45
- 已知x=10,y=20,z=30:以下語句執行後x,y,z的值是(
C
)。
if x < y:
z=x
x=y
y=z
A.10,20,30
B.10,20,20
C.20,10,10
D.20,10,30
- 有一個函數關係如下所示:
x | y |
---|---|
x<0 | x-1 |
x=0 | x |
x>0 | x+1 |
下面程序段中,能正確表示上面關係的是(C
)。
A.
y = x + 1
if x >= 0
if x == 0:
y = x
else:
y = x - 1;
B.
y = x - 1
if x != 0:
if x > 0:
y = x + 1
else:
y = x
C.
if x <= 0:
if x < 0:
y = x - 1
else:
y = x
else:
y = x + 1
D.
y = x
if x <= 0:
if x < 0:
y = x - 1
else:
y = x + 1
- 下列Python語句正確的是(
D
)。
A.min=x if x<y else y
B.max=x>y?x:y
C.if(x>y) print x
D.while True:pass
四、簡答題
- 簡述Python中pass語句的作用。
Python中的pass是空語句,它的出現是爲了保持程序結構的完整性。
pass不做任何事情,一般用做佔位語句。 - 簡述break和continue的區別。
break語句用於結束整個循環;
continue的作用是用來結束本次循環,緊接着執行下一次的循環。
第四章
一、單選題
-
當需要在字符串中使用特殊字符的時候,Python使用(
A
)作爲轉義字符。
A.\
B./
C.#
D.% -
下列數據中不屬於字符串的是(
D
)。
A.‘ab’
B.’’‘perfect’’’
C.“52wo”
D.abc -
使用(
B
)符號對浮點類型的數據進行格式化。
A.%c
B.%f
C.%d
D.%s -
字符串’Hi,Andy’中,字符’A’對應的下標位置爲(
C
)。
A.1
B.2
C.3
D.4 -
下列方法中,能夠返回某個子串在字符串中出現次數的是(
C
)。
A.length
B.index
C.count
D.find -
下列方法中,能夠讓所有單詞的首字母變成大寫的方法是(
B
)。
A.capitalize
B.title
C.upper
D.ljust -
字符串的strip方法的作用是(
A
)。
A.刪除字符串頭尾指定的字符 B.刪除字符串末尾的指定字符
C.刪除字符串頭部的指定字符 D.通過指定分隔符對字符串切片
二、判斷題
- 無論使用單引號或者雙引號包含字符,使用print輸出的結果都一樣。(
√
) - 無論input接收任何的數據,都會以字符串的方式進行保存。(
√
) - Python中只有一個字母的字符串屬於字符類型。(
×
) - 使用下標可以訪問字符串中的每個字符。(
√
) - Python中字符串的下表是從1開始的。(
×
) - 切片選區的區間範圍是從起始位開始的,到結束位結束。(
×
) - 如果index方法沒有在字符串中找到子串,則會返回-1。(
×
)
三、填空題
- 字符串是一種表示
文本
數據的類型。 - 像雙引號這樣的特殊符號,需要對它進行
轉義
輸出。 - Python3提供了
input
函數從標準輸入(如鍵盤)讀入一行文本。 切片
指的是對操作的對象截取其中的一部分。- 切片選取的區間是左閉右
開
型的,不包含結束位的值。
四、程序分析題
閱讀下面的程序,分析代碼是否可以編譯通過。如果編譯通過,請列出運行的結果,否則說明編譯失敗的原因。
- 代碼一:
num_one = input("請輸入一個整數:")
num_two = input("請輸入一個整數:")
if num_one % num_two == 0:
print("驗證碼正確")
答:不能編譯通過。因爲num1和num2屬於字符串類型,不能執行取餘操作。
- 代碼二:
name = 'Steve Jobs'
print(name[6])
結果爲:J
- 代碼三:
string_example = 'hello world itheima'
index = string_example.index("itheima",0,10)
print(index)
答:由於沒有在字符串中找到子串,index方法默認會拋出ValueError異常。
- 代碼四:
string_example = " hello world "
print(string_example.strip())
結果爲:Hello World (默認刪除兩頭的空格)
- 代碼五:
string_example = "Hello" + 'Python'
print(string_example)
結果爲:HelloPython
第五章
一、選擇題
-
關於列表的說法,描述有錯誤的是(
D
)。
A.list是一個有序集合,沒有固定大小
B.list可以存放任意類型的元素
C.使用list時,其下標可以是負數
D.list是不可變的數據類型 -
以下程序的輸出結果是(
B
)。(提示:ord(“a”)==97)
list_demo=[1,2,3,4,5,'a','b']
print(list_demo[1],list_demo[5])
A.1 5
B.2 a
C.1 97
D.2 97
- 執行下面的操作後,list_two的值爲(
C
)。
list_one=[4,5,6]
list_two=list_one
list_one[2]=3
A.[4,5,6]
B.[4,3,6]
C.[4,5,3]
D.A,B,C都不正確
- 閱讀下面的程序:
list_demo=[1,2,1,3]
nums=set(list_demo)
for i in nums:
print(i,end="")
程序執行的結果爲(D
)。
A.1213
B.213
C.321
D.123
-
下列選項中,正確定義了一個字典的是(
D
)。
A.a=[‘a’,1,‘b’,2,‘c’,3]
B.b=(‘a’,1,‘b’,2,‘c’,3)
C.c={‘a’,1,‘b’,2,‘c’,3}
D.d={‘a’:1,‘b’:2,‘c’:3} -
下列選項中,不能使用下標運算的是(
C
)。
A.列表
B.元組
C.集合
D.字符串 -
下列程序執行後輸出的結果爲(
A
)。
x = 'abc'
y = x
y = 100
print(x)
A.abc
B.100
C.97,98,99
D.以上三項均是錯誤的
-
下列刪除列表中最後一個元素的函數是(
B
)。
A. del B. pop C. remove C. cut -
下列函數中,用於返回元祖中元素最小值的是(
C
)。
A. len B. max C. min D.tuple
二、判斷題
- 列表的索引是從0開始的。(
√
) - 通過insert方法可以在制定位置插入元素。(
√
) - 使用下標能修改列表的元素。(
√
) - 列表的嵌套指的是一個列表的元素是另一個列表。(
√
) - 通過下標索引可以修改和訪問元祖的元素。(
×
) - 字典中的值只能夠是字符串類型。(
×
) - 在字典中,可以使用count方法計算鍵值對的個數。(
×
)
三、填空題
- Python序列類型包括字符串、列表和元組三種,
字典
是Python中唯一的映射類型。 - Python中的可變數據類型有
字典
和列表
。 - 在列表中查找元素時可以使用
not in
和in運算符。 - 如果要從小到大的排列列表的元素,可以使用
sort
方法實現。 - 元組使用
圓括號
存放元素,列表使用的是方括號。
四、簡答題
請簡述元組、列表和字典的區別。
(1)、外形:列表是中括號括起來的數據;元組是圓括號括起來的數據;字典是花括號括起來的數據
(2)、存儲結構:列表可以存儲多個不同類型的數據,以逗號分隔;元組同樣能存儲多個不同類型的數據,以逗號分隔;字典能存儲多個鍵值對,以逗號分隔,鍵是唯一的,值是任何類型的。
(3)、訪問方式:列表可以通過下標索引訪問元素,索引從0開始;元組可以通過下標索引訪問值,索引從0開始;字典通過鍵來訪問值。
(4)、是否可變類型:列表是可變類型,元組是不可變類型,字典是可變類型。
五、程序分析題
閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。
- 代碼一:
tup = ('a','b','c')
tup[3] = 'd'
print(tup)
答:程序運行錯誤,元組不能使用下標增加元素。
- 代碼二:
dict_demo={'a':1,'b':2,'c':3}
print(dict_demo['a'])
結果爲:1
- 代碼三:
list_demo=[10,23,66,26,35,1,76,88,58]
list_demo.reverse()
print(list_demo[3])
list_demo.sort()
print(list_demo[3])
結果爲:
1
26
第六章
一、單選題
- 閱讀下面的程序:
def func():
print(x)
x=100
func()
執行上述語句後,輸出的結果爲(C
)。
A.0 B.100 C.程序出現異常 D.程序編譯失敗
-
下面關於函數的說法,錯誤的是(
C
)。
A.函數可以減少代碼的重複,使得程序更加模塊化
B.在不同的函數中可以使用相同名字的變量
C.調用函數時,傳入參數的順序和函數定義時的順序必須相同
D.函數體中如果沒有return語句,也會返回一個None值 -
下列有關函數的說法中,正確的是(
C
)。
A.函數的定義必須在程序的開頭
B.函數定義後,其中的程序就可以自動執行
C.函數定義後需要調用纔會執行
D.函數體與關鍵字def必須左對齊 -
下列函數調用使用的參數傳遞方式是(
A
)。
result = sum(num1, num2, num3)
A.位置綁定 B.關鍵字綁定 C.變量類型綁定 D.變量名稱綁定
-
使用(
C
)關鍵字創建自定義函數。
A. function B. func C.def D.procedure -
使用(
D
)關鍵字聲明匿名函數。
A. function B. func C.def D.lambda
二、判斷題
- 函數的名稱可以隨意命名。(
×
) - 不帶return的函數代表返回None。(
√
) - 默認情況下,參數值和參數名是跟函數聲明定義的順序匹配的。(
√
) - 函數定義完成後,系統會自動執行其內部的功能。(
×
) - 函數體以冒號起始,並且是縮進格式的。(
√
) - 帶有默認值的參數一定位於參數列表的末尾。(
√
) - 局部變量的作用域是整個程序,任何時候使用都有效。(
×
) - 匿名函數就是沒有名字的函數。(
√
)
三、填空題
- 函數可以有多個參數,參數之間使用
逗號
分隔。 - 使用
return
語句可以返回函數值並退出函數。 - 通過
return
結束函數,從而選擇性地返回一個值給調用方。 - 函數能處理比聲明時更多的參數,它們是
不定長
參數。 - 在函數裏面調用另外一個函數,這就是函數
嵌套
調用。 - 在函數的內部定義的變量稱作
局部
變量。 - 全局變量定義在函數外,可以在
整個程序
範圍內訪問。 - 如果想在函數中修改全部變量,需要在變量的前面加上
global
關鍵字。
四、簡答題
- 請簡述局部變量和全局變量的區別。
局部變量:
(1)、函數內部定義的變量;
(2)、作用域是函數的內部。
全局變量:
(1)、函數外部定義的變量;
(2)、作用域是整個程序。 - 請簡要說明函數定義的規則。
(1)、以def關鍵字開頭,後面接函數標識符名稱和圓括號;
(2)、給函數起名字的時候,規則跟變量的名字是一樣的;
(3)、任何傳入參數和自變量必須放在圓括號中間;
(4)、函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明;
(5)、函數內容以冒號起始,並且縮進;
(6)、return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。
五、程序分析題
閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。
- 代碼一:
def func():
x = 200
x = 100
func()
print(x)
結果爲:100
- 代碼二:
def func():
global x
x = 200
x = 100
func()
print(x)
結果爲:200
- 代碼三:
def func():
x = 200
def func2():
print(x)
func2()
x = 100
func()
print(x)
結果爲:
200
100
第七章
一、單選題
-
關於裝飾器,下列說法錯誤的是(
B
)。
A.裝飾器是一個包裹函數
B.裝飾器智能有一個參數
C.通過在函數定義的面前加上@符號阿和裝飾器名,使得裝飾器函數生效
D.如果裝飾器帶有參數,則必須在裝飾函數的外層再嵌套一層函數 -
下列函數中,用於使用函數對制定序列進行過濾的是(
C
)。
A.map函數 B.select函數 C.filter函數 D.reduce函數 -
下列選項中,不能作爲filter函數參數的是(
D
)。
A.列表 B.元組 C.字符串 D.整數 -
閱讀下面一段程序:
def foo():
a = 1
def bar():
a = a + 1
return a
return bar
print(foo()())
上述程序執行的結果爲(A
)。
A.程序出現異常
B.2
C.1
D.沒有輸出結果
二、判斷題
- 閉包是內部函數對外部作用域的變量進行引用。(
×
) - 當外部函數執行結束,其內部閉包引用的變量一定會立即釋放。(
×
) - 裝飾器是一個變量。(
×
) - 裝飾器函數至少要接收一個函數。(
√
) - 裝飾器既能裝飾帶參數的函數,也能自己帶參數。(
√
) - 如果map函數傳入的兩個序列個數不同,那麼個數多的序列會把多餘的元素刪除。(
×
) - map函數只能傳遞一個序列。(
×
) - map傳入函數的參數個數必須跟序列的個數一樣。(
√
) - filter傳入的函數可以爲None。(
√
) - filter函數智能對序列執行過濾操作。(
×
) - filter函數的返回值爲字符串,它的序列類型一定是字符串。(
√
)
三、填空題
- 內部函數引用了外部函數作用域的變量,那麼內部函數叫作
閉包
。 - 裝飾器本質上是一個
函數
。 - 裝飾器函數需要接收一個參數,這個參數表示
被修飾的函數
。 - 在函數定義的前面添加裝飾器名和
@
符號,實現對函數的包裝。 - 支持參數的裝飾器函數需要再多一層
內嵌
函數。 map
函數會根據提供的函數對制定的序列做映射。- map的兩個序列的元素個數不一致,那麼元素少的序列會以
None
補齊。 filter
函數會對制定序列執行過濾操作。- filter傳入的函數的返回值是
布爾
值。 - reduce傳入的是帶有
兩
個參數的函數,該函數不能爲None。
四、簡答題
-
請簡述閉包滿足的三個條件。
(1)、存在於嵌套關係的函數中;
(2)、嵌套的內部函數引用了外部函數的變量;
(3)、嵌套的外部函數會將內部函數名作爲返回值返回。 -
請簡述裝飾器的應用場景。
(1)、引入日誌;
(2)、函數執行時間統計;
(3)、執行函數前預備處理;
(4)、執行函數後清理功能;
(5)、權限校驗;
(6)、緩存。 -
請簡述map、filter、reduce函數的作用。
(1)、map函數會根據提供的函數對指定的序列做映射。
(2)、filter函數會對指定序列執行過濾操作。
(3)、reduce函數會對參數序列中的元素進行累積。
五、程序分析題
閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。
- 代碼一:
def funX():
x = 5
def funY():
nonlocal x
x += 1
return x
return funY
a = funX()
print(a())
print(a())
print(a())
結果爲:
6
7
8
- 代碼二:
def funX():
x = 5
def funY():
nonlocal x
x += 1
return x
return funY
return funY
a = funX
print(a()())
print(a()())
print(a()())
結果爲:
6
6
6
第八章
一、單選題
-
打開一個已有文件,然後在文件末尾添加信息,正確的打開方式爲(
C
)。
A.‘r’ B.‘w’ C.‘a’ D.‘w+’ -
假設文件不存在,如果使用open方法打開文件會報錯,那麼該文件的打開方式是下列哪種模式?(
A
)
A.‘r’ B.‘w’ C.‘a’ D.‘w+’ -
假設file是文本文件對象,下列選項中,哪個用於讀取一行內容?(
C
)
A.file.read() B.file.read(200)
C.file.readline() D.file.readlines() -
下列方法中,用於向文件中寫出內容的是(
B
)。
A.open B.write C.close D.read -
下列榮方法中,用於獲取當前目錄的是(
D
)。
A.open B.write C.Getcwd D.read -
下列語句打開文件的位置應該在(
D
)。
f = open('itheima.txt','w')
A.C盤根目錄下
B.D盤根目錄下
C.Python安裝目錄下
D.與源文件在相同的目錄下
- 若文本文件abc.txt中的內容如下:
abcdef
閱讀下面的程序:
file=open("abc.txt","r")
s=file.readline()
s1=list(s)
print(s1)
上述程序執行的結果爲(C
)。
A.[‘abcdef’]
B.[‘abcdef\n’]
C.[‘a’,‘b’,‘c’,‘d’,‘e’,‘f’]
D.[‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,’\n’]
二、判斷題
- 文件打開的默認方式是隻讀。(
√
) - 打開一個可讀寫的文件,如果文件存在會被覆蓋。(
√
) - 使用write方法寫入文件時,數據會追加到文件的末尾。(
√
) - 實際開發中,文件或者文件夾操作都要用到os模塊。(
√
) - read方法只能一次性讀取文件中的所有數據。(
×
)
三、填空題
- 打開文件對文件進行讀寫,操作完成後應該調用
close()
方法關閉文件,以釋放資源。 - seek方法用於移動指針到制定位置,該方法中
offset
參數表示要偏移的字節數。 - 使用readlines方法把整個文件中的內容進行一次性讀取,返回的是一個
列表
。 - os模塊中的mkdir方法用於創建
文件夾
。 - 在讀寫文件的過程中,
tell
方法可以獲取當前的讀寫位置。
四、簡答題
- 請簡述文本文件和二進制文件的區別。
文本文件存儲的是常規字符串,由若干文本行組成,通常每行以換行符“\n”結尾。二進制文件把對象內容以字節串進行存儲,無法用記事本或其他普通字處理軟件直接進行編輯,無法被人類直接閱讀和理解,需要使用專門的軟件進行解碼後讀取、顯示、修改或執行。 - 請簡述讀取文件的幾種方法和區別。
(1)、使用read(size)方法可以指定讀取的字節數,或者讀取整個文件;
(2)、使用readlines方法可以把整個文件的內容進行一次性讀取;
(3)、使用readline方法一行一行讀數據。
第九章
一、單選題
- 下列程序運行以後,會產生如下(
B
)異常。
a
A.SyntaxError B.NameError C.IndexError D.KeyError
-
下列選項中,(
C
)是唯一不再運行時發生的異常。
A.ZeroDivisionError B.NameError C.SyntaxError D.KeyError -
當try語句中沒有任何錯誤信息時,一定不會執行(
D
)語句。
A.try B.else C.finaly D.except -
在完整的異常語句中,語句出現的順序正確的是(
D
)。
A.try---->except----->else---->finally
B.try---->else---->except----->finally
C.try---->except----->finally—>else
D.try----->else---->else----->except -
下列選項中,用於觸發異常的是(
A
)。
A.try B.catch C.raise D.except -
關於拋出異常的說法中,描述錯誤的是(
C
)。
A.當raise指定異常的類名時,會隱式地創建異常類的實例
B.顯式地創建異常類實例,可以使用raise直接引發
C.不帶參數的raise語句,只能引發剛剛發生過的異常
D.使用raise拋出異常時,無法指定描述信息 -
關於拋出異常的說法中,描述錯誤的是(
D
)。
A.當raise指定異常的類名時,會隱式地創建異常類的實例
B.顯式地創建異常類實例,可以使用raise直接引發
C.不帶參數的raise語句,只能引發剛剛發生過的異常
D.使用raise拋出異常時,無法指定描述信息
二、判斷題
- 默認情況下,系統檢測到錯誤後會終止程序。(
√
) - 在使用異常時必須先導入exceptions模塊。(
×
) - 一個try語句只能對應一個except子句。(
×
) - 如果except子句沒有指明任何異常類型,則表示捕捉所有的異常。(
√
) - 無論程序是否捕捉到異常,一定會執行finally語句。(
√
) - 所有的except子句一定在else和finally的前面。(
√
)
三、填空題
- Python中所有的異常類都是
Exception
子類。 - 當使用序列中不存在的
索引
時,會引發IndexError異常。 - 一個try語句智能對應一個
finally
子句。 - 當約束條件不滿足時,
assert
語句會觸發AssertionError異常。 - 如果在沒有
except
的try語句中使用else語句,會引發語法錯誤。
四、簡答題
- 請簡述什麼是異常。
在Python中,程序在執行的過程中產生的錯誤稱爲異常,比如列表索引越界、打開不存在的文件等。 - 處理異常有哪些方式?
try、except、else、finally語句。
第十章
一、單選題
-
下列關鍵字中,用來引入模塊的是(
C
)。
A.include B.from C.import D.continue -
關於引入模塊的方式,錯誤的是(
D
)。
A.import math
B.from fib import fibnacci
C.form math import *
D.from * import fib -
關於__name__的說法,下列描述錯誤的是(
A
)。
A.它是Python提供的一個方法
B.每個模塊內部都有一個__name__屬性
C.當它的值爲’__main__‘時,表示模塊自身在運行
D.當它的值不爲’__main__'時,表示模塊被引用
二、判斷題
- Python解釋器會優先查看默認的路徑搜索模塊的位置。(
×
) - 每個Python文件就是一個模塊。(
√
) - 當__name__屬性的值爲__main__時,代表該模塊自身在運行。(
√
) - 包目錄下必須有一個__init__py文件。(
√
) - 外部模塊都提供了自動安裝的文件,直接雙擊安裝就行。(
×
)
三、填空題
- 要調用random模塊的randint函數,書寫形式爲
random. randint
。 - 每個Python文件都可以作爲一個模塊,模塊的名字就是
文件
的名字。 - 每個模塊都有一個
__name__
屬性,使程序塊智能在模塊自身運行時執行。 - 爲了更好地組織模塊,通常會把多個模塊放在一個
包
中。 - 當程序中需要引入外部模塊時,需要從外面下載並
安裝
。 - 如果要搜索模塊的路徑,可以使用sys模塊的
path
變量。
四、簡答題
- 解釋Python腳本程序的"__name__"的作用。
每個Python腳本在運行時都有一個“__name__”屬性。如果腳本作爲模塊被導入,則其“__name__”屬性的值被自動設置爲模塊名;如果腳本獨立運行,則其“__name__”屬性值被自動設置爲“__name__”屬性。利用“__name__”屬性即可控制Python程序的運行方式。 - 請簡述Python解釋器搜索模塊位置的順序。
(1)、搜索當前目錄,如果不在當前目錄,Python則搜索在shell變量PYTHONPATH下的每個目錄。
(2)、如果都找不到。Python會繼續查看默認路徑。 - 請簡述模塊的概念。
在Python中有一個概念叫做模塊(module),這個和C語言中的頭文件以及Java中的包很類似,比如在Python中要調用sqrt函數,必須用import關鍵字引入math這個模塊。 - 請簡述導入模塊的方法。
在Python中用關鍵字import來引入某個模塊:
(1)、導入模塊,使用“import 模塊”引入;
(2)、導入模塊中的某個函數,使用“from 模塊名 import 函數名”引入;
(3)、導入模塊的全部內容,使用“from 模塊 import *”。
第十一章
一、單選題
-
關於面向過程和麪向對象,下列說法錯誤的是(
B
)。
A.面向過程和麪向對象都是解決問題的一種思路
B.面向過程是基於面向對象的
C.面向過程強調的是解決問題的步驟
D.面向對象強調的是解決問題的對象 -
關於類和對象的關係,下列描述正確的是(
D
)。
A.類和麪向對象的核心
B.類是現實中事物的個體
C.對象是根據類創建的,並且一個類只能對應一個對象
D.對象描述的是現實的個體,它是類的實例 -
構造方法的作用是(
C
)。
A.一般成員方法 B.類的初始化
C.對象的初始化 D.對象的建立 -
構造方法是類的一個特殊方法,Python中它的名稱爲(
C
)。
A.與類同名 B._construct C._init_ D. init -
Python類中包含一個特殊的變量(
A
),它表示當前對象自身,可以訪問類的成員。
A.self B.me C.this D.與類同名 -
下列選項中,符合類的命名規範的是(
A
)。
A.HolidayResort
B.Holiday Resort
C.hoildayResort
D.hoilidayresort -
Python中用於釋放類佔用資源的方法是(
B
)。
A.__init__
B.__del__
C._del
D.delete
二、判斷題
- 面向對象是基於面向過程的。(
×
) - 通過類可以創建對象,有且只有一個對象實例。(
×
) - 方法和杉樹的格式是完全一樣的。(
×
) - 創建類的對象時,系統會自動調用構造方法進行初始化。(
√
) - 創建完對象後,其屬性的初始值是固定的,外界無法進行修改。(
×
) - 使用del語句刪除對象,可以手動釋放它所佔用的資源。(
√
)
三、填空題
- 在Python中,可以使用
class
關鍵字來聲明一個類。 - 面向對象需要把問題劃分多個獨立的
對象
,然後調用其方法解決問題。 - 類的方法中必須有一個
self
參數,位於參數列表的開頭。 - Python提供了名稱爲
__init__
的構造方法,實現讓類的對象完成初始化。 - 如果想修改屬性的默認值,可以在構造方法中使用
參數
設置。
四、簡答題
- 請簡述self在類中的意義。
不用實例化對象就能夠在本類中訪問自身的屬性或方法。 - 類是由哪三個部分組成的?
類名,屬性,方法。 - 請簡述構造方法和析構方法的作用。
分別用於初始化對象的屬性和釋放類所佔用的資源。
五、程序分析題
閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。
- 代碼一:
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return "我的名字是" + self.name
person = Person("小明")
print(person)
結果爲:我的名字是小明
- 代碼二:
class Person:
def __del__(self):
print("--del--")
person = Person()
del person
print("--end--")
結果爲:
--del–
--end–
第十二章
一、選擇題
-
Python中定義私有屬性的方法是(
D
)。
A. 使用private關鍵字 B.使用public關鍵字
C.使用__XX__定義屬性名 D.使用__XX定義屬性名 -
下列選項中,不屬於面向對象程序設計的三個特徵的是(
A
)。
A.抽象 B.封裝 C. 繼承 D.多態 -
以下C類繼承A類和B類的格式中,正確的是(
C
)。
A. class C A,B: B. class C(A:B) C.class C(A,B) D.class C A and B: -
下列選項中,與class Person等價的是(
C
)。
A. class Person(Object) B. class Person(Animal)
C. class Person(object) D. class Person: object -
下列關於類屬性和示例屬性的說法,描述正確的是(
B
)。
A.類屬性既可以顯示定義,又能在方法中定義
B.公有類屬性可以通過類和類的實例訪問
C.通過類可以獲取實例屬性的值
D.類的實例只能獲取實例屬性的值 -
下列選項中,用於標識爲靜態方法的是(
C
)。
A.@classmethood B.@instancemethod
C.@staticmethod D.@privatemethod -
下列方法中,不可以使用類名訪問的是(
A
)。
A.實例方法 B.類方法 C.靜態方法 D.以上3項都不符合
二、判斷題
- Python中沒有任何關鍵字區分公有屬性和私有屬性。(
√
) - 繼承會在原有類的基礎上產生新的類,這個新類就是父類。(
×
) - 帶有兩個下劃線的方法一定是私有方法。(
√
) - 子類能繼承父類的一切屬性和方法。(
×
) - 子類通過重寫繼承的方法,覆蓋掉跟父類同名的方法。(
√
) - 如果類屬性和實例屬性重名,對象有限訪問類屬性的值。(
×
) - 使用類名獲取到的值一定是類屬性的值。(
√
) - 靜態方法中一定不能訪問實例屬性的值。(
√
)
三、填空題
- 如果屬性名的前面加上了兩個
下劃線
,就表明它是私有屬性。 - 在現有類基礎上構建新類,新的類稱作子類,現有的類稱作
父類
。 - 父類的
私有
屬性和方法是不能被子類繼承的,更不能被子類訪問。 - Python語言既支持單繼承,也支持
多
繼承。 - 子類想按照自己的方式實現方法,需要
重寫
從父類繼承的方法。 - 子類通過
super()
可以成功地訪問父類的成員。 - 位於類內部、方法外部的方法是
類
方法。 - 類方法是類擁有的方法,使用修飾器
@classmethod
來標識。
四、簡答題
-
請簡述如何保護類的屬性。
(1)、把屬性定義爲私有屬性,即在屬性名的前面加上兩個下劃線;
(2)、添加用於設置或者獲取屬性值的兩個方法供外界調用。 -
什麼是繼承?
類的繼承是指在一個現有類的基礎上構建一個新的類,構建出來的新類被稱作子類,現有類被稱作父類,子類會自動擁有父類的屬性和方法。 -
請簡述私有屬性無法訪問的原理。
當在一個類的內部定義了私有方法或者私有屬性的時候,Python在運行的過程中,把屬性或者方法的名字進行了修改,即在屬性或者方法名稱的前面加上“_類名”,導致原有的方法無法訪問到。 -
什麼是多態?
在Python中,多態是指在不考慮對象類型的情況下使用對象。 -
請簡述實例方法、類方法和靜態方法的區別。
(1)、類方法需要使用@classmethod進行標識,該方法可以訪問類屬性,無法訪問實例屬性,可以通過類實例和類進行調用。
(2)、靜態方法使用@staticmethod進行標識,該方法無法訪問實例屬性和類屬性,起到類似於函數的作用,使用類或者類實例進行調用。
(3)、實例方法直接在類中使用def進行定義,可以訪問其實例屬性和類屬性,使用類實例進行調用。
(4)、如果要修改實例屬性的值,就直接使用實例方法;如果要修改類屬性的值,就直接使用類方法;如果是輔助功能,比如打印菜單,這時可以考慮使用靜態方法,可以在不創建對象的前提下使用。 -
請簡述Python中以下劃線開頭的變量名的特點。
在Python中,以下劃線開頭的變量名有着特殊的含義,尤其是在類的定義中。用下劃線作爲變量前綴和後綴來表示類的特殊成員:
(1)、_xx:這樣的對象叫做保護變量,不能用from module import *導入,只有類對象和子類對象能夠訪問這些變量。
(2)、__xx__:系統定義的特殊成員名字。
(3)、__xx:類中的私有成員,只有類對象自己能訪問,子類對象也不能訪問到這個成員,但在對象外部可以通過“對象名.__類名__ xx”這樣特殊的方式來訪問。Python中沒有純粹的C++意義上的私有成員。
END
如果本文有什麼寫的不對的地方或有什麼更好地建議和想法,歡迎在下方評論留言或私信我,大家一起進步學習!