实例7:七段数码管绘制
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
七段数码管是一种展示数字的有效方式。
请用程序绘制当前系统时间对应的七段数码管,效果如下:
要求如下:
(1) 使用 time 库获得系统当前时间,格式如下:20190411
(2) 绘制对应的七段数码管
(3) 数码管风格不限
# @功能描述:一个简单的案例
# @作者: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)