測驗5
選擇題
1.以下選項不是函數作用的是:提高代碼執行速度
2.下列程序的輸出結果爲:10 11
def f(a,b):
a=4
return a+b
def main():
a=5
b=6
print(f(a,b),a+b)
main()
3.以下關於Python函數說法錯誤的是:執行該函數後,變量c的值爲200
def func(a,b):
c=a**2+b
b=a
return c
a=10
b=100
c=func(a,b)+a
4.以下關於函數調用描述正確的是:自定義函數調用前必須定義
5.以下關於模塊化設計描述錯誤的是:應儘可能合理劃分功能塊,功能塊內部耦合度低
6.以下對遞歸描述錯誤的是:執行效率高
7.以下關於函數說法錯誤的是:對函數的使用必須瞭解其內部實現原理
8.哪個選項對於函數的定義是錯誤的?def vfunc(*a,b):
9.關於return語句,以下選項描述正確的是:函數可以沒有return語句
10.以下關於遞歸函數基例的說法錯誤的是:每個遞歸函數都只能有一個基例
隨機密碼生成
描述
補充編程模板中代碼,完成如下功能:
以整數17爲隨機數種子,獲取用戶輸入整數N爲長度,產生3個長度爲N位的密碼,密碼的每位是一個數字。每個密碼單獨一行輸出。
產生密碼採用random.randint()函數。
import random
def genpwd(length):
a = pow(10, length - 1) # 定義一個下限
b = pow(10, length) - 1 # 定義一個上限
return "{}".format(random.randint(a, b))
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
連續質數計算
描述
補充編程模板中代碼,完成如下功能:
獲得用戶輸入數字N,計算並輸出從N開始的5個質數,單行輸出,質數間用逗號,分割。
注意:需要考慮用戶輸入的數字N可能是浮點數,應對輸入取整數;最後一個輸出後不用逗號。
def prime(m):
end = int(pow(m, 0.5) + 1)
for i in range(2, end):
if m%i == 0:
return False
else:
return True
n = eval(input())
if n != int(n): # 因爲可能輸入有浮點數
n = int(n) + 1
else:
n = int(n)
count = 5
while count > 0:
if prime(n):
if count > 1:
print(n, end=',')
else:
print(n)
count -= 1
n += 1
練習5
實例7:七段數碼管繪製
要求如下:
(1) 使用 time 庫獲得系統當前時間,格式如下:20190411
(2) 繪製對應的七段數碼管
(3) 數碼管風格不限
import turtle as t
import time
def drawGap(): #繪製數碼管間隔
t.penup()
t.fd(5)
def drawLine(draw): #繪製單段數碼管
drawGap()
t.pendown() if draw else t.penup()
t.fd(40)
drawGap()
t.right(90)
def drawDigit(d): #根據數字繪製七段數碼管
drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,6,8] else drawLine(False)
t.left(90)
drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)
t.left(180)
t.penup()
t.fd(20)
def drawDate(date):
t.pencolor("red")
for i in date:
drawDigit(eval(i))
def main():
t.setup(800, 350, 200, 200)
t.penup()
t.fd(-300)
t.pensize(5)
drawDate(time.strftime('%Y%m%d',time.gmtime()))
t.done()
main()
實例8:科赫雪花小包裹
科赫曲線,也叫雪花曲線。繪製科赫曲線。
import turtle
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main(level):
turtle.setup(600,600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.hideturtle()
try:
level = eval(input("請輸入科赫曲線的階: "))
main(level)
except:
print("輸入錯誤")
任意累積
計算任意個輸入數字的乘積。
def cmul(a, *b):
m = a
for i in b:
m *= i
return m
print(eval("cmul({})".format(input())))
斐波那契數列計算
描述
計算斐波那契數列的值,具體功能如下:
- 獲取用戶輸入整數N,其中,N爲正整數
- 計算斐波那契數列的值
如果將斐波那契數列表示爲fbi(N),對於整數N,值如下:
fbi(1)和fbi(2)的值是1,當N>2時,fbi(N) = fbi(N-1) + fbi(N-2)
採用遞歸方式編寫。
def fbi(n):
if n == 1 or n == 2:
return 1
else:
return fbi(n-1) + fbi(n-2)
n = eval(input())
print(fbi(n))
漢諾塔實踐
描述
漢諾塔問題大家都清楚,這裏不再贅述。
請補充編程模板中代碼,完成如下功能:
有三個圓柱A、B、C,初始時A上有N個圓盤,N由用戶輸入給出,最終移動到圓柱C上。
每次移動步驟的表達方式示例如下:[STEP 10] A->C。其中,STEP是步驟序號,寬度爲4個字符,右對齊。
請編寫代碼,獲得輸入N後,輸出漢諾塔移動的步驟。
輸入格式:一個整數
輸出格式:每個步驟一行,每行參考格式如下:[STEP 10] A->C
steps = 0
def hanoi(src, des, mid, n):
global steps
if n == 1:
steps += 1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
else:
hanoi(src, mid, des, n-1)
steps += 1
print("[STEP{:>4}] {}->{}".format(steps, src, des))
hanoi(mid, des, src, n-1)
N = eval(input())
hanoi("A", "C", "B", N)