第五章:函式與程式碼複用
技術標籤:python
例項7:七段數碼管繪製
這是"例項"題,與課上講解例項相同,請作答檢驗學習效果。
七段數碼管是一種展示數字的有效方式。
要求如下:
(2) 繪製對應的七段數碼管
# @功能描述:一個簡單的案例
# @作者:Binwang
# @版權:nanchanguniversity
# @版本:V-1.0
import turtle
import time
def drawGap(gap=5):
turtle.pu()
turtle.fd(gap)
def drawLine(draw):
drawGap()
turtle.pendown()if draw else turtle.penup()
turtle.fd(30)
drawGap()
turtle.right(90)
def drawDigit(digit):
turtle.left(180)
turtle.pu()
turtle.fd(40)
turtle.right(90)
turtle.fd(20)
draw=True if digit in [2,3,4,5,6,8,9] else False
drawLine(draw)
draw=True if digit in [0,1,3,4,5,6,7,8,9] else False
drawLine(draw)
draw=True if digit in [0,2,3,5,6,8,9] else False
drawLine(draw)
draw=True if digit in [0,2,6,8] else False
drawLine(draw)
turtle.left(90)
draw=True if digit in [0,4,5,6,8,9] else False
drawLine(draw)
draw=True if digit in [0,2,3,5,6,7,8,9]else False
drawLine(draw)
draw=True if digit in [0,1,2,3,4,7,8,9]else False
drawLine(draw)
turtle.left(180)
turtle.pu()
turtle.fd(20)
turtle.right(90)
turtle.fd(40)
def drawData(data):
for c in data:
if c=='-':
turtle.dot(10)
elif c==' ':
turtle.pu()
turtle.goto(-300,-100)
turtle.color("purple")
elif c=='+':
turtle.left(180)
turtle.fd(20)
turtle.pendown()
turtle.dot(10)
turtle.pu()
turtle.fd(40)
turtle.pendown()
turtle.dot(10)
turtle.right(180)
turtle.pu()
turtle.fd(60)
else:
drawDigit(eval(c))
def main():
turtle.setup(800,600,180,180)
turtle.color("red","blue")
turtle.pensize(5)
turtle.pu()
turtle.goto(-400,100)
turtle.right(90)
data=time.strftime("%Y-%m-%d %H+%M+%S",time.gmtime())
drawData(data)
turtle.done()
main()
例項8:科赫雪花小包裹
科赫曲線,也叫雪花曲線。繪製科赫曲線。
請補充程式設計模板中程式碼,完成功能:獲得使用者輸入的整數N,作為階,繪製N階科赫曲線。
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():
turtle.setup(800,600,100,100)
turtle.color("CadetBlue1","pink")
turtle.pu()
turtle.goto(-200,100)
turtle.pd()
N=eval(input("請輸入科赫階數,我來繪製雪花:"))
for i in range(3):
koch(400,N)
turtle.right(120)
turtle.done()
main()
任意累積
請根據程式設計模板補充程式碼,計算任意個輸入數字的乘積。
注意,僅需要在標註…的地方補充一行或多行程式碼。
輸入示例1
1,2,3,4
輸出示例1
24
# 請在...補充一行或多行程式碼
def cmul(*b):
res=1
for num in b:
res*= num
return res
print(eval("cmul({})".format(input())))
斐波那契數列計算
根據程式設計模板補充程式碼,計算斐波那契數列的值,具體功能如下:
1.獲取使用者輸入整數N,其中,N為正整數
2.計算斐波那契數列的值
如果將斐波那契數列表示為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後,輸出漢諾塔移動的步驟。
輸入格式:一個整數
輸入示例1
4
輸出格式:每個步驟一行,每行參考格式如下:[STEP 10] A->C
輸出示例1
[STEP 1] A->C
[STEP 2] A->B
[STEP 3] C->B
[STEP 4] A->C
[STEP 5] B->A
[STEP 6] B->C
[STEP 7] 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)