測驗5:函數和代碼附加
1.單項選擇題
1.以下選項不是函數作用的是:
A.提高代碼執行速度
B.增強代碼清晰度性
C.補充代碼
D.降低編程複雜度
正確答案 A
函數不能直接提高代碼執行速度。
2.下列程序的輸出結果爲:
def f(a,b):
a=4
return a+b
def main():
a=5
b=6
print(f(a,b),a+b)
main()
A.10 11
B. 11 10
C.11 11
D.10 10
正確答案 A
這裏沒有全局變量,都是函數局部變量的運算。
3.以下關於Python函數說法錯誤的是:
def func(a,b):
c=a**2+b
b=a
return c
a=10
b=100
c=func(a,b)+a
A.執行該函數後,變量c的值爲200
B.執行該函數後,變量a的值爲10
C.執行該函數後,變量b的值爲100
D.該函數名稱爲func
正確答案 A
這裏沒有全局變量,請在IDLE中執行代碼觀察結果。
4.以下關於函數調用描述正確的是:
A.函數在調用前不需要定義,拿來即用就好
B.Python內置函數調用前需要引用相應的庫
C.函數和調用只能發生在同一個文件中
D.自定義函數調用前必須定義
正確答案 D
函數調用前必須已經存在函數定義,否則無法執行。
Python內置函數直接使用,不需要引用任何模塊。
5.以下關於模塊化設計描述錯誤的是:
A.模塊間關係儘可能簡單,模塊之間耦合度低
B.應儘可能合理劃分功能塊,功能塊內部耦合度高
C.高耦合度的特點是複用較爲困難
D.應儘可能合理劃分功能塊,功能塊內部耦合度低
正確答案 D
模塊內高耦合、模塊間低耦合。
6.以下對遞歸描述錯誤的是:
A.書寫簡單
B.遞歸程序都可以有非遞歸編寫方法
C.一定要有基例
D.執行效率高
正確答案 D
遞歸不提高程序執行效率。
任何遞歸程序都可以通過堆棧或隊列變成非遞歸程序(這是程序的高級應用)。
7.以下關於函數說法錯誤的是:
A.函數是一段具有特定功能的、可重用的語句組
B.函數可以看做是一段具有名字的子程序
C.對函數的使用必須瞭解其內部實現原理
D.函數通過函數名來調用
正確答案 C
調用函數不需要知道函數內部實現原理,只需要知道調用方法(即接口)即可。
8.哪個選項對於函數的定義是錯誤的?
A.def vfunc(a,b=2):
B.def vfunc(a,*b):
C.def vfunc(*a,b):
D.def vfunc(a,b):
正確答案 C
def vfunc(*a, b) 是錯誤的定義:*a表示可變參數,可變參數只能放在函數參數的最後。
9.關於return語句,以下選項描述正確的是:
A.函數可以沒有return語句
B.函數中最多隻有一個return語句
C.return只能返回一個值
D.函數必須有一個return語句
正確答案 A
函數可以包含0個或多個return語句
10.以下關於遞歸函數基例的說法錯誤的是:
A.遞歸函數的基例決定遞歸的深度
B.遞歸函數的基例不再進行遞歸
C.每個遞歸函數都只能有一個基例
D.遞歸函數必須有基例
正確答案 C
每個遞歸函數至少存在一個基例,但可能存在多個基例。
2.程序設計題
2.1隨機密碼生成
描述
補充編程模板中代碼,完成如下功能:
以整數17爲隨機數種子,獲取用戶輸入整數N爲長度,產生3個長度爲N位的密碼,密碼的每位是一個數字。每個密碼單獨一行輸出。
產生密碼採用random.randint()函數。
輸入輸出示例
示例一:
輸入 | 輸出 |
---|---|
3 | 634,524,926 |
【參考代碼】
import random
def genpwd(length):
a = 10**(length-1)
b = 10**length - 1
return "{}".format(random.randint(a, b))
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
2.2連續質數計算
描述
補充編程模板中代碼,完成如下功能:
獲得用戶輸入數字N,計算並輸出從N開始的5個質數,單行輸出,質數間用逗號,分割。
注意:需要考慮用戶輸入的數字N可能是浮點數,應對輸入取整數;最後一個輸出後不用逗號。
輸入 | 輸出 |
---|---|
12 | 13,17,19,23,29 |
【參考代碼】
def prime(m):
for i in range(2,m):
if m % i == 0:
return False
return True
n = eval(input())
n_ = int(n)
n_ = n_+1 if n_ < n else n_
count = 5
while count > 0:
if prime(n_):
if count > 1:
print(n_, end=",")
else:
print(n_, end="")
count -= 1
n_ += 1
這個代碼注意:
(1) 需要對輸入小數情況進行判斷,獲取超過該輸入的最小整數(這裏沒用floor()函數);
(2) 對輸出格式進行判斷,最後一個輸出後不增加逗號(這裏沒用.join()方法)。