Python快速編程入門課後習題答案


前言

本文整理了填空、選擇、判斷等一些課後習題答案,具體的編程題可以見:Python快速編程入門課後程序題答案

第一章

一、填空題

  1. Python是一種面向對象的高級語言。
  2. Python可以在多種平臺運行,這體現了Python語言的可移植特性。
  3. Python源代碼被解釋器轉換後的格式爲字節碼
  4. Python 3.x 默認使用的編碼是UTF-8

二、判斷題

  1. Python是開源的,它可以被一直到許多平臺上。()
  2. Python的優點之一是具有僞代碼的本質。()
  3. Python可以開發Web程序,也可以管理操作系統。()
  4. Mac系統自帶Python開發環境。()
  5. Python自帶的shell,其性能由於IPython。(×)
  6. 我們編寫的Python代碼在運行過程中,會被編譯成二進制代碼。(×)
  7. Python程序被解釋器轉換後的文件格式後綴名爲.pyc。()
  8. Python 3.x 版本的代碼完全兼容 Python 2.x。(×)
  9. PyCharm是開發Python的集成開發環境。()
  10. 代碼print(3,4)是Python 2.x的輸出格式。(×)

三、選擇題

  1. 下列選項中,不屬於Python語言特點的是(C)。
    A.簡單易學 B.開源 C.面對過程 D.可移植性

  2. 下列領域中,使用Python可以實現的是(ABCD)。(多選)
    A.Web開發 B.操作系統管理 C.科學計算 D.遊戲

  3. 下列關於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版本的異常可以直接被拋出

  4. 下列關於Python的說法中,錯誤的是(C)。
    A.Python是從ABC發展起來的
    B.Python是一門高級的計算機語言
    C.Python是一門只面向對象的語言
    D.Python是一種代表簡單主義思想的語言

  5. 下列關於IPython的說法,錯誤的是(D)。
    A.IPython集成了交互式Python的很多有點
    B.IPython的性能遠遠優於標準的Python的shell
    C.IPython支持變量自動補全,自動收縮
    D.與標準的Python相比,IPython缺少內置的功能和函數

四、簡答題

  1. 簡述Python的特點。
    •簡單易學
    •開源
    •高級語言
    •可移植性
    •解釋性
    •面向對象
    •可擴展性
    •豐富的庫
    •規範的代碼

  2. 簡述Python的應用領域(至少3個)。
    •web應用開發
    •操作系統管理、服務器運維的自動化腳本
    •科學計算
    •桌面軟件
    •服務器軟件(網絡軟件)
    •遊戲
    •構思實現,產品早期原型和迭代

  3. 簡述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。

  4. 簡述Python程序的執行原理。
    Python程序的執行原理如圖所示:
    在這裏插入圖片描述
    Python解釋器將源代碼轉換爲字節碼,然後把編譯好的字節碼轉發到Python虛擬機(PVM)中進行執行。

  5. 簡述IPython的特點。
    •IPython具有卓越的Python shell,其性能遠遠優於標準Python的shell。
    •IPython支持變量自動補全,自動縮進,支持 bash shell 命令,內置了許多很有用的功能和函數。
    •IPython提供了基於控制檯命令環境的定製功能,可以十分輕鬆地將交互式Python shell包含在各種Python應用中,甚至可以當作系統級shell來使用。

第二章

一、填空題

  1. 在Python中,int表示的數據類型是整型
  2. 布爾類型的值包括TrueFalse
  3. Python的浮點數佔8個字節。
  4. 如果要在計算機中表示浮點數1.2×1051.2\times10^5,則表示方法爲1.2e5
  5. 00001000>>2的結果是00000010
  6. 若a=20,那麼bin(a)的值爲0b10100
  7. 如果想測試變量的類型,可以使用type()來實現。
  8. 若a=1,b=2,那麼(a or b)的值爲1
  9. 若a=10,b=20,那麼(a and b)結果爲20
  10. 4.34E5表示的是4.34×10^5

二、判斷題

  1. Python使用符號#表示單行註釋。()
  2. 標識符可以以數字開頭。(×)
  3. type()方法可以查看變量的數據類型。()
  4. Python中的代碼塊使用縮進來表示。()
  5. Python中的多行語句可以使用反斜槓來實現。(×)
  6. Python中標識符不區分大小寫。(×)
  7. Python中的標識符不能使用關鍵字。()
  8. 使用help()命令可以進入幫助系統。()
  9. Python中的成員運算符用於判斷制定序列中是否包含某個值。()
  10. 比較運算符用於比較兩個數,其返回的結果智能是True或False。()

三、選擇題

  1. 下列選項中,(D)的布爾值不是Flase。
    A.None
    B.0
    C.()
    D.1

  2. 假設a=9,b=2,那麼下列運算中,錯誤的是(D)。
    A.a+b的值是11
    B.a//b的值是4
    C.a%b的值是1
    D.a**b的值是18

  3. 下列標識符中,合法的是(AD)。
    A.helloWorld
    B.2ndObj
    C.hello#world
    D._helloworld

  4. 下列符號中,表示Python中單行註釋的是(A)。
    A.#
    B.//
    C.<!-- -->
    D."“"

  5. 下列選項中,符合Python命名規範的標識符是(C)。
    A.user-Passwd
    B.if
    C._name
    D.setup.exe

  6. 下列選項中,Python不支持的數據類型有(B)。
    A.int
    B.char
    C.float
    D.dicitionary

  7. 下列表達式中,返回 True 的是(B)。
    A.a=2 b=2 a=b
    B.3>2>1
    C.True and False
    D.2!=2

  8. 下列語句中,哪個在 Python 中是非法的?(B)。
    A.x = y = z = 1
    B.x = (y = z + 1)
    C.x, y = y, x
    D.x += y

  9. 下列關於 Python 中的複數,說法錯誤的是(C)。
    A.表示複數的語法是 real + image j
    B.實部和虛部都是浮點數
    C.虛部必須後綴 j,且必須是小寫
    D.一個複數必須有表示虛部的實數和 j

  10. 下列選項中,冪運算的符號爲(D)。
    A.*
    B.++
    C.%
    D.**

四、簡答題

  1. 簡述Python中標識符的命名規則。
    •標識符由字母、下劃線和數字組成,且數字不能開頭。
    •python中的標識符是區分大小寫的。
    •python中的標識符不能使用關鍵字。
  2. 簡述Python中的數字類型。
    int(整型)、long(長整型)、float(浮點數)、complex(複數)

第三章

一、填空題

  1. 在循環體中使用break語句可以跳出循環體。
  2. elif語句是else語句和if語句的組合。
  3. 在循環體中可以使用continue語句跳過本次循環後面的代碼,重新開始下一次循環。
  4. 如果希望循環是無限的,我們可以通過設置條件表達式永遠爲True來實現無限循環。
  5. Python中的pass表示的是空語句。

二、判斷題

  1. elif可以單獨使用。(×)
  2. pass語句的出現是爲了保持進程結構的完整性。()
  3. 在Python中沒有switch-case語句。()
  4. 每個if條件後面都要使用冒號。()
  5. 循環語句可以嵌套使用。()

三、選擇題

  1. 下列選項中,會輸出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
  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

  1. 已知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

  1. 有一個函數關係如下所示:
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
  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

四、簡答題

  1. 簡述Python中pass語句的作用。
    Python中的pass是空語句,它的出現是爲了保持程序結構的完整性。
    pass不做任何事情,一般用做佔位語句。
  2. 簡述break和continue的區別。
    break語句用於結束整個循環;
    continue的作用是用來結束本次循環,緊接着執行下一次的循環。

第四章

一、單選題

  1. 當需要在字符串中使用特殊字符的時候,Python使用(A)作爲轉義字符。
    A.\
    B./
    C.#
    D.%

  2. 下列數據中不屬於字符串的是(D)。
    A.‘ab’
    B.’’‘perfect’’’
    C.“52wo”
    D.abc

  3. 使用(B)符號對浮點類型的數據進行格式化。
    A.%c
    B.%f
    C.%d
    D.%s

  4. 字符串’Hi,Andy’中,字符’A’對應的下標位置爲(C)。
    A.1
    B.2
    C.3
    D.4

  5. 下列方法中,能夠返回某個子串在字符串中出現次數的是(C)。
    A.length
    B.index
    C.count
    D.find

  6. 下列方法中,能夠讓所有單詞的首字母變成大寫的方法是(B)。
    A.capitalize
    B.title
    C.upper
    D.ljust

  7. 字符串的strip方法的作用是(A)。
    A.刪除字符串頭尾指定的字符 B.刪除字符串末尾的指定字符
    C.刪除字符串頭部的指定字符 D.通過指定分隔符對字符串切片

二、判斷題

  1. 無論使用單引號或者雙引號包含字符,使用print輸出的結果都一樣。()
  2. 無論input接收任何的數據,都會以字符串的方式進行保存。()
  3. Python中只有一個字母的字符串屬於字符類型。(×)
  4. 使用下標可以訪問字符串中的每個字符。()
  5. Python中字符串的下表是從1開始的。(×)
  6. 切片選區的區間範圍是從起始位開始的,到結束位結束。(×)
  7. 如果index方法沒有在字符串中找到子串,則會返回-1。(×)

三、填空題

  1. 字符串是一種表示文本數據的類型。
  2. 像雙引號這樣的特殊符號,需要對它進行轉義輸出。
  3. Python3提供了input函數從標準輸入(如鍵盤)讀入一行文本。
  4. 切片指的是對操作的對象截取其中的一部分。
  5. 切片選取的區間是左閉右型的,不包含結束位的值。

四、程序分析題

閱讀下面的程序,分析代碼是否可以編譯通過。如果編譯通過,請列出運行的結果,否則說明編譯失敗的原因。

  1. 代碼一:
num_one = input("請輸入一個整數:")
num_two = input("請輸入一個整數:")
if num_one % num_two == 0:
    print("驗證碼正確")

  答:不能編譯通過。因爲num1和num2屬於字符串類型,不能執行取餘操作。

  1. 代碼二:
name = 'Steve Jobs'
print(name[6])

  結果爲:J

  1. 代碼三:
string_example = 'hello world itheima'
index = string_example.index("itheima",0,10)
print(index)

  答:由於沒有在字符串中找到子串,index方法默認會拋出ValueError異常。

  1. 代碼四:
string_example = "  hello world  "
print(string_example.strip())

  結果爲:Hello World (默認刪除兩頭的空格)

  1. 代碼五:
string_example = "Hello" + 'Python'
print(string_example)

  結果爲:HelloPython

第五章

一、選擇題

  1. 關於列表的說法,描述有錯誤的是(D)。
    A.list是一個有序集合,沒有固定大小
    B.list可以存放任意類型的元素
    C.使用list時,其下標可以是負數
    D.list是不可變的數據類型

  2. 以下程序的輸出結果是(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

  1. 執行下面的操作後,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都不正確

  1. 閱讀下面的程序:
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

  1. 下列選項中,正確定義了一個字典的是(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}

  2. 下列選項中,不能使用下標運算的是(C)。
    A.列表
    B.元組
    C.集合
    D.字符串

  3. 下列程序執行後輸出的結果爲(A)。

x = 'abc'
y = x
y = 100
print(x)

    A.abc
    B.100
    C.97,98,99
    D.以上三項均是錯誤的

  1. 下列刪除列表中最後一個元素的函數是(B)。
    A. del B. pop C. remove C. cut

  2. 下列函數中,用於返回元祖中元素最小值的是(C)。
    A. len B. max C. min D.tuple

二、判斷題

  1. 列表的索引是從0開始的。()
  2. 通過insert方法可以在制定位置插入元素。()
  3. 使用下標能修改列表的元素。()
  4. 列表的嵌套指的是一個列表的元素是另一個列表。()
  5. 通過下標索引可以修改和訪問元祖的元素。(×)
  6. 字典中的值只能夠是字符串類型。(×)
  7. 在字典中,可以使用count方法計算鍵值對的個數。(×)

三、填空題

  1. Python序列類型包括字符串、列表和元組三種,字典是Python中唯一的映射類型。
  2. Python中的可變數據類型有字典列表
  3. 在列表中查找元素時可以使用not in和in運算符。
  4. 如果要從小到大的排列列表的元素,可以使用sort方法實現。
  5. 元組使用圓括號存放元素,列表使用的是方括號。

四、簡答題

請簡述元組、列表和字典的區別。
(1)、外形:列表是中括號括起來的數據;元組是圓括號括起來的數據;字典是花括號括起來的數據
(2)、存儲結構:列表可以存儲多個不同類型的數據,以逗號分隔;元組同樣能存儲多個不同類型的數據,以逗號分隔;字典能存儲多個鍵值對,以逗號分隔,鍵是唯一的,值是任何類型的。
(3)、訪問方式:列表可以通過下標索引訪問元素,索引從0開始;元組可以通過下標索引訪問值,索引從0開始;字典通過鍵來訪問值。
(4)、是否可變類型:列表是可變類型,元組是不可變類型,字典是可變類型。

五、程序分析題

閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。

  1. 代碼一:
tup = ('a','b','c')
tup[3] = 'd'
print(tup)

  答:程序運行錯誤,元組不能使用下標增加元素。

  1. 代碼二:
dict_demo={'a':1,'b':2,'c':3}
print(dict_demo['a'])

  結果爲:1

  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

第六章

一、單選題

  1. 閱讀下面的程序:
def func():
    print(x)
    x=100
func()

  執行上述語句後,輸出的結果爲(C)。
    A.0 B.100 C.程序出現異常 D.程序編譯失敗

  1. 下面關於函數的說法,錯誤的是(C)。
    A.函數可以減少代碼的重複,使得程序更加模塊化
    B.在不同的函數中可以使用相同名字的變量
    C.調用函數時,傳入參數的順序和函數定義時的順序必須相同
    D.函數體中如果沒有return語句,也會返回一個None值

  2. 下列有關函數的說法中,正確的是(C)。
    A.函數的定義必須在程序的開頭
    B.函數定義後,其中的程序就可以自動執行
    C.函數定義後需要調用纔會執行
    D.函數體與關鍵字def必須左對齊

  3. 下列函數調用使用的參數傳遞方式是(A)。

result = sum(num1, num2, num3)

    A.位置綁定 B.關鍵字綁定 C.變量類型綁定 D.變量名稱綁定

  1. 使用(C)關鍵字創建自定義函數。
    A. function B. func C.def D.procedure

  2. 使用(D)關鍵字聲明匿名函數。
    A. function B. func C.def D.lambda

二、判斷題

  1. 函數的名稱可以隨意命名。(×)
  2. 不帶return的函數代表返回None。()
  3. 默認情況下,參數值和參數名是跟函數聲明定義的順序匹配的。()
  4. 函數定義完成後,系統會自動執行其內部的功能。(×)
  5. 函數體以冒號起始,並且是縮進格式的。()
  6. 帶有默認值的參數一定位於參數列表的末尾。()
  7. 局部變量的作用域是整個程序,任何時候使用都有效。(×)
  8. 匿名函數就是沒有名字的函數。()

三、填空題

  1. 函數可以有多個參數,參數之間使用逗號分隔。
  2. 使用return語句可以返回函數值並退出函數。
  3. 通過return結束函數,從而選擇性地返回一個值給調用方。
  4. 函數能處理比聲明時更多的參數,它們是不定長參數。
  5. 在函數裏面調用另外一個函數,這就是函數嵌套調用。
  6. 在函數的內部定義的變量稱作局部變量。
  7. 全局變量定義在函數外,可以在整個程序範圍內訪問。
  8. 如果想在函數中修改全部變量,需要在變量的前面加上global關鍵字。

四、簡答題

  1. 請簡述局部變量和全局變量的區別。
    局部變量:
    (1)、函數內部定義的變量;
    (2)、作用域是函數的內部。
    全局變量:
    (1)、函數外部定義的變量;
    (2)、作用域是整個程序。
  2. 請簡要說明函數定義的規則。
    (1)、以def關鍵字開頭,後面接函數標識符名稱和圓括號;
    (2)、給函數起名字的時候,規則跟變量的名字是一樣的;
    (3)、任何傳入參數和自變量必須放在圓括號中間;
    (4)、函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明;
    (5)、函數內容以冒號起始,並且縮進;
    (6)、return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。

五、程序分析題

閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。

  1. 代碼一:
def func():
    x = 200
x = 100
func()
print(x)

  結果爲:100

  1. 代碼二:
def func():
    global x
    x = 200
x = 100
func()
print(x)

  結果爲:200

  1. 代碼三:
def func():
    x = 200
    def func2():
        print(x)
    func2()
x = 100
func()
print(x)

  結果爲:
  200
  100

第七章

一、單選題

  1. 關於裝飾器,下列說法錯誤的是(B)。
    A.裝飾器是一個包裹函數
    B.裝飾器智能有一個參數
    C.通過在函數定義的面前加上@符號阿和裝飾器名,使得裝飾器函數生效
    D.如果裝飾器帶有參數,則必須在裝飾函數的外層再嵌套一層函數

  2. 下列函數中,用於使用函數對制定序列進行過濾的是(C)。
    A.map函數 B.select函數 C.filter函數 D.reduce函數

  3. 下列選項中,不能作爲filter函數參數的是(D)。
    A.列表 B.元組 C.字符串 D.整數

  4. 閱讀下面一段程序:

def foo():
    a = 1
    def bar():
        a = a + 1
        return a
    return bar
print(foo()())

  上述程序執行的結果爲(A)。
    A.程序出現異常
    B.2
    C.1
    D.沒有輸出結果

二、判斷題

  1. 閉包是內部函數對外部作用域的變量進行引用。(×)
  2. 當外部函數執行結束,其內部閉包引用的變量一定會立即釋放。(×)
  3. 裝飾器是一個變量。(×)
  4. 裝飾器函數至少要接收一個函數。()
  5. 裝飾器既能裝飾帶參數的函數,也能自己帶參數。()
  6. 如果map函數傳入的兩個序列個數不同,那麼個數多的序列會把多餘的元素刪除。(×)
  7. map函數只能傳遞一個序列。(×)
  8. map傳入函數的參數個數必須跟序列的個數一樣。()
  9. filter傳入的函數可以爲None。()
  10. filter函數智能對序列執行過濾操作。(×)
  11. filter函數的返回值爲字符串,它的序列類型一定是字符串。()

三、填空題

  1. 內部函數引用了外部函數作用域的變量,那麼內部函數叫作閉包
  2. 裝飾器本質上是一個函數
  3. 裝飾器函數需要接收一個參數,這個參數表示被修飾的函數
  4. 在函數定義的前面添加裝飾器名和@符號,實現對函數的包裝。
  5. 支持參數的裝飾器函數需要再多一層內嵌函數。
  6. map函數會根據提供的函數對制定的序列做映射。
  7. map的兩個序列的元素個數不一致,那麼元素少的序列會以None補齊。
  8. filter函數會對制定序列執行過濾操作。
  9. filter傳入的函數的返回值是布爾值。
  10. reduce傳入的是帶有個參數的函數,該函數不能爲None。

四、簡答題

  1. 請簡述閉包滿足的三個條件。
    (1)、存在於嵌套關係的函數中;
    (2)、嵌套的內部函數引用了外部函數的變量;
    (3)、嵌套的外部函數會將內部函數名作爲返回值返回。

  2. 請簡述裝飾器的應用場景。
    (1)、引入日誌;
    (2)、函數執行時間統計;
    (3)、執行函數前預備處理;
    (4)、執行函數後清理功能;
    (5)、權限校驗;
    (6)、緩存。

  3. 請簡述map、filter、reduce函數的作用。
    (1)、map函數會根據提供的函數對指定的序列做映射。
    (2)、filter函數會對指定序列執行過濾操作。
    (3)、reduce函數會對參數序列中的元素進行累積。

五、程序分析題

閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。

  1. 代碼一:
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

  1. 代碼二:
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

第八章

一、單選題

  1. 打開一個已有文件,然後在文件末尾添加信息,正確的打開方式爲(C)。
    A.‘r’ B.‘w’ C.‘a’ D.‘w+’

  2. 假設文件不存在,如果使用open方法打開文件會報錯,那麼該文件的打開方式是下列哪種模式?(A)
    A.‘r’ B.‘w’ C.‘a’ D.‘w+’

  3. 假設file是文本文件對象,下列選項中,哪個用於讀取一行內容?(C)
    A.file.read() B.file.read(200)
    C.file.readline() D.file.readlines()

  4. 下列方法中,用於向文件中寫出內容的是(B)。
    A.open B.write C.close D.read

  5. 下列榮方法中,用於獲取當前目錄的是(D)。
    A.open B.write C.Getcwd D.read

  6. 下列語句打開文件的位置應該在(D)。

f = open('itheima.txt','w')

    A.C盤根目錄下
    B.D盤根目錄下
    C.Python安裝目錄下
    D.與源文件在相同的目錄下

  1. 若文本文件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’]

二、判斷題

  1. 文件打開的默認方式是隻讀。()
  2. 打開一個可讀寫的文件,如果文件存在會被覆蓋。()
  3. 使用write方法寫入文件時,數據會追加到文件的末尾。()
  4. 實際開發中,文件或者文件夾操作都要用到os模塊。()
  5. read方法只能一次性讀取文件中的所有數據。(×)

三、填空題

  1. 打開文件對文件進行讀寫,操作完成後應該調用close()方法關閉文件,以釋放資源。
  2. seek方法用於移動指針到制定位置,該方法中offset參數表示要偏移的字節數。
  3. 使用readlines方法把整個文件中的內容進行一次性讀取,返回的是一個列表
  4. os模塊中的mkdir方法用於創建文件夾
  5. 在讀寫文件的過程中,tell方法可以獲取當前的讀寫位置。

四、簡答題

  1. 請簡述文本文件和二進制文件的區別。
    文本文件存儲的是常規字符串,由若干文本行組成,通常每行以換行符“\n”結尾。二進制文件把對象內容以字節串進行存儲,無法用記事本或其他普通字處理軟件直接進行編輯,無法被人類直接閱讀和理解,需要使用專門的軟件進行解碼後讀取、顯示、修改或執行。
  2. 請簡述讀取文件的幾種方法和區別。
    (1)、使用read(size)方法可以指定讀取的字節數,或者讀取整個文件;
    (2)、使用readlines方法可以把整個文件的內容進行一次性讀取;
    (3)、使用readline方法一行一行讀數據。

第九章

一、單選題

  1. 下列程序運行以後,會產生如下(B)異常。
a

    A.SyntaxError B.NameError C.IndexError D.KeyError

  1. 下列選項中,(C)是唯一不再運行時發生的異常。
    A.ZeroDivisionError B.NameError C.SyntaxError D.KeyError

  2. 當try語句中沒有任何錯誤信息時,一定不會執行(D)語句。
    A.try B.else C.finaly D.except

  3. 在完整的異常語句中,語句出現的順序正確的是(D)。
    A.try---->except----->else---->finally
    B.try---->else---->except----->finally
    C.try---->except----->finally—>else
    D.try----->else---->else----->except

  4. 下列選項中,用於觸發異常的是(A)。
    A.try B.catch C.raise D.except

  5. 關於拋出異常的說法中,描述錯誤的是(C)。
    A.當raise指定異常的類名時,會隱式地創建異常類的實例
    B.顯式地創建異常類實例,可以使用raise直接引發
    C.不帶參數的raise語句,只能引發剛剛發生過的異常
    D.使用raise拋出異常時,無法指定描述信息

  6. 關於拋出異常的說法中,描述錯誤的是(D)。
    A.當raise指定異常的類名時,會隱式地創建異常類的實例
    B.顯式地創建異常類實例,可以使用raise直接引發
    C.不帶參數的raise語句,只能引發剛剛發生過的異常
    D.使用raise拋出異常時,無法指定描述信息

二、判斷題

  1. 默認情況下,系統檢測到錯誤後會終止程序。()
  2. 在使用異常時必須先導入exceptions模塊。(×)
  3. 一個try語句只能對應一個except子句。(×)
  4. 如果except子句沒有指明任何異常類型,則表示捕捉所有的異常。()
  5. 無論程序是否捕捉到異常,一定會執行finally語句。()
  6. 所有的except子句一定在else和finally的前面。()

三、填空題

  1. Python中所有的異常類都是Exception子類。
  2. 當使用序列中不存在的索引時,會引發IndexError異常。
  3. 一個try語句智能對應一個finally子句。
  4. 當約束條件不滿足時,assert語句會觸發AssertionError異常。
  5. 如果在沒有except的try語句中使用else語句,會引發語法錯誤。

四、簡答題

  1. 請簡述什麼是異常。
    在Python中,程序在執行的過程中產生的錯誤稱爲異常,比如列表索引越界、打開不存在的文件等。
  2. 處理異常有哪些方式?
    try、except、else、finally語句。

第十章

一、單選題

  1. 下列關鍵字中,用來引入模塊的是(C)。
    A.include B.from C.import D.continue

  2. 關於引入模塊的方式,錯誤的是(D)。
    A.import math
    B.from fib import fibnacci
    C.form math import *
    D.from * import fib

  3. 關於__name__的說法,下列描述錯誤的是(A)。
    A.它是Python提供的一個方法
    B.每個模塊內部都有一個__name__屬性
    C.當它的值爲’__main__‘時,表示模塊自身在運行
    D.當它的值不爲’__main__'時,表示模塊被引用

二、判斷題

  1. Python解釋器會優先查看默認的路徑搜索模塊的位置。(×)
  2. 每個Python文件就是一個模塊。()
  3. 當__name__屬性的值爲__main__時,代表該模塊自身在運行。()
  4. 包目錄下必須有一個__init__py文件。()
  5. 外部模塊都提供了自動安裝的文件,直接雙擊安裝就行。(×)

三、填空題

  1. 要調用random模塊的randint函數,書寫形式爲random. randint
  2. 每個Python文件都可以作爲一個模塊,模塊的名字就是文件的名字。
  3. 每個模塊都有一個__name__屬性,使程序塊智能在模塊自身運行時執行。
  4. 爲了更好地組織模塊,通常會把多個模塊放在一個中。
  5. 當程序中需要引入外部模塊時,需要從外面下載並安裝
  6. 如果要搜索模塊的路徑,可以使用sys模塊的path變量。

四、簡答題

  1. 解釋Python腳本程序的"__name__"的作用。
    每個Python腳本在運行時都有一個“__name__”屬性。如果腳本作爲模塊被導入,則其“__name__”屬性的值被自動設置爲模塊名;如果腳本獨立運行,則其“__name__”屬性值被自動設置爲“__name__”屬性。利用“__name__”屬性即可控制Python程序的運行方式。
  2. 請簡述Python解釋器搜索模塊位置的順序。
    (1)、搜索當前目錄,如果不在當前目錄,Python則搜索在shell變量PYTHONPATH下的每個目錄。
    (2)、如果都找不到。Python會繼續查看默認路徑。
  3. 請簡述模塊的概念。
    在Python中有一個概念叫做模塊(module),這個和C語言中的頭文件以及Java中的包很類似,比如在Python中要調用sqrt函數,必須用import關鍵字引入math這個模塊。
  4. 請簡述導入模塊的方法。
    在Python中用關鍵字import來引入某個模塊:
    (1)、導入模塊,使用“import 模塊”引入;
    (2)、導入模塊中的某個函數,使用“from 模塊名 import 函數名”引入;
    (3)、導入模塊的全部內容,使用“from 模塊 import *”。

第十一章

一、單選題

  1. 關於面向過程和麪向對象,下列說法錯誤的是(B)。
    A.面向過程和麪向對象都是解決問題的一種思路
    B.面向過程是基於面向對象的
    C.面向過程強調的是解決問題的步驟
    D.面向對象強調的是解決問題的對象

  2. 關於類和對象的關係,下列描述正確的是(D)。
    A.類和麪向對象的核心
    B.類是現實中事物的個體
    C.對象是根據類創建的,並且一個類只能對應一個對象
    D.對象描述的是現實的個體,它是類的實例

  3. 構造方法的作用是(C)。
    A.一般成員方法 B.類的初始化
    C.對象的初始化 D.對象的建立

  4. 構造方法是類的一個特殊方法,Python中它的名稱爲(C)。
    A.與類同名 B._construct C._init_ D. init

  5. Python類中包含一個特殊的變量(A),它表示當前對象自身,可以訪問類的成員。
    A.self B.me C.this D.與類同名

  6. 下列選項中,符合類的命名規範的是(A)。
    A.HolidayResort
    B.Holiday Resort
    C.hoildayResort
    D.hoilidayresort

  7. Python中用於釋放類佔用資源的方法是(B)。
    A.__init__
    B.__del__
    C._del
    D.delete

二、判斷題

  1. 面向對象是基於面向過程的。(×)
  2. 通過類可以創建對象,有且只有一個對象實例。(×)
  3. 方法和杉樹的格式是完全一樣的。(×)
  4. 創建類的對象時,系統會自動調用構造方法進行初始化。()
  5. 創建完對象後,其屬性的初始值是固定的,外界無法進行修改。(×)
  6. 使用del語句刪除對象,可以手動釋放它所佔用的資源。()

三、填空題

  1. 在Python中,可以使用class關鍵字來聲明一個類。
  2. 面向對象需要把問題劃分多個獨立的對象,然後調用其方法解決問題。
  3. 類的方法中必須有一個self參數,位於參數列表的開頭。
  4. Python提供了名稱爲__init__的構造方法,實現讓類的對象完成初始化。
  5. 如果想修改屬性的默認值,可以在構造方法中使用參數設置。

四、簡答題

  1. 請簡述self在類中的意義。
    不用實例化對象就能夠在本類中訪問自身的屬性或方法。
  2. 類是由哪三個部分組成的?
    類名,屬性,方法。
  3. 請簡述構造方法和析構方法的作用。
    分別用於初始化對象的屬性和釋放類所佔用的資源。

五、程序分析題

閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。

  1. 代碼一:
class Person:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return "我的名字是" + self.name
person = Person("小明")
print(person)

  結果爲:我的名字是小明

  1. 代碼二:
class Person:
    def __del__(self):
        print("--del--")
person = Person()
del person
print("--end--")

  結果爲:
  --del–
  --end–

第十二章

一、選擇題

  1. Python中定義私有屬性的方法是(D)。
    A. 使用private關鍵字 B.使用public關鍵字
    C.使用__XX__定義屬性名 D.使用__XX定義屬性名

  2. 下列選項中,不屬於面向對象程序設計的三個特徵的是(A)。
    A.抽象 B.封裝 C. 繼承 D.多態

  3. 以下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:

  4. 下列選項中,與class Person等價的是(C)。
    A. class Person(Object) B. class Person(Animal)
    C. class Person(object) D. class Person: object

  5. 下列關於類屬性和示例屬性的說法,描述正確的是(B)。
    A.類屬性既可以顯示定義,又能在方法中定義
    B.公有類屬性可以通過類和類的實例訪問
    C.通過類可以獲取實例屬性的值
    D.類的實例只能獲取實例屬性的值

  6. 下列選項中,用於標識爲靜態方法的是(C)。
    A.@classmethood B.@instancemethod
    C.@staticmethod D.@privatemethod

  7. 下列方法中,不可以使用類名訪問的是(A)。
    A.實例方法 B.類方法 C.靜態方法 D.以上3項都不符合

二、判斷題

  1. Python中沒有任何關鍵字區分公有屬性和私有屬性。()
  2. 繼承會在原有類的基礎上產生新的類,這個新類就是父類。(×)
  3. 帶有兩個下劃線的方法一定是私有方法。()
  4. 子類能繼承父類的一切屬性和方法。(×)
  5. 子類通過重寫繼承的方法,覆蓋掉跟父類同名的方法。()
  6. 如果類屬性和實例屬性重名,對象有限訪問類屬性的值。(×)
  7. 使用類名獲取到的值一定是類屬性的值。()
  8. 靜態方法中一定不能訪問實例屬性的值。()

三、填空題

  1. 如果屬性名的前面加上了兩個下劃線,就表明它是私有屬性。
  2. 在現有類基礎上構建新類,新的類稱作子類,現有的類稱作父類
  3. 父類的私有屬性和方法是不能被子類繼承的,更不能被子類訪問。
  4. Python語言既支持單繼承,也支持繼承。
  5. 子類想按照自己的方式實現方法,需要重寫從父類繼承的方法。
  6. 子類通過super()可以成功地訪問父類的成員。
  7. 位於類內部、方法外部的方法是方法。
  8. 類方法是類擁有的方法,使用修飾器@classmethod來標識。

四、簡答題

  1. 請簡述如何保護類的屬性。
    (1)、把屬性定義爲私有屬性,即在屬性名的前面加上兩個下劃線;
    (2)、添加用於設置或者獲取屬性值的兩個方法供外界調用。

  2. 什麼是繼承?
    類的繼承是指在一個現有類的基礎上構建一個新的類,構建出來的新類被稱作子類,現有類被稱作父類,子類會自動擁有父類的屬性和方法。

  3. 請簡述私有屬性無法訪問的原理。
    當在一個類的內部定義了私有方法或者私有屬性的時候,Python在運行的過程中,把屬性或者方法的名字進行了修改,即在屬性或者方法名稱的前面加上“_類名”,導致原有的方法無法訪問到。

  4. 什麼是多態?
    在Python中,多態是指在不考慮對象類型的情況下使用對象。

  5. 請簡述實例方法、類方法和靜態方法的區別。
    (1)、類方法需要使用@classmethod進行標識,該方法可以訪問類屬性,無法訪問實例屬性,可以通過類實例和類進行調用。
    (2)、靜態方法使用@staticmethod進行標識,該方法無法訪問實例屬性和類屬性,起到類似於函數的作用,使用類或者類實例進行調用。
    (3)、實例方法直接在類中使用def進行定義,可以訪問其實例屬性和類屬性,使用類實例進行調用。
    (4)、如果要修改實例屬性的值,就直接使用實例方法;如果要修改類屬性的值,就直接使用類方法;如果是輔助功能,比如打印菜單,這時可以考慮使用靜態方法,可以在不創建對象的前提下使用。

  6. 請簡述Python中以下劃線開頭的變量名的特點。
    在Python中,以下劃線開頭的變量名有着特殊的含義,尤其是在類的定義中。用下劃線作爲變量前綴和後綴來表示類的特殊成員:
    (1)、_xx:這樣的對象叫做保護變量,不能用from module import *導入,只有類對象和子類對象能夠訪問這些變量。
    (2)、__xx__:系統定義的特殊成員名字。
    (3)、__xx:類中的私有成員,只有類對象自己能訪問,子類對象也不能訪問到這個成員,但在對象外部可以通過“對象名.__類名__ xx”這樣特殊的方式來訪問。Python中沒有純粹的C++意義上的私有成員。

END

如果本文有什麼寫的不對的地方或有什麼更好地建議和想法,歡迎在下方評論留言或私信我,大家一起進步學習!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章