DAY9:程序分析 函数和代码复用

#题目来自北航嵩天老师mooc作业,笔记主要用于复习所用
1、七段数码管绘制
在这里插入图片描述
import turtle as t
import time
def drawGap(): #绘制数码管间隔,提起笔向前走5个距离的函数
t.penup()
t.fd(5)
def drawLine(draw): #绘制单段数码管,飞完5个距离后落下
drawGap()
t.pendown() if draw else t.penup()
t.fd(40)
drawGap()
t.right(90)
def drawDigit(d): #根据数字绘制七段数码管,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()
2、科赫曲线,也叫雪花曲线。绘制科赫曲线。
import turtle
def koch(size, n): #size,n为该函数koch的两个参数,n表示几阶
if n0:
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(“输入错误”)
3、def cmul(a,b): #a,b为函数cmul的参数
for i in b:
a
=i
return a
print(eval(“cmul({})”.format(input())))
4、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 n2:
return 1
else:
return fbi(n-1)+fbi(n-2)
n = eval(input())
print(fbi(n))
5、有三个圆柱A、B、C,初始时A上有N个圆盘,N由用户输入给出,最终移动到圆柱C上。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP是步骤序号,宽度为4个字符,右对齐。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬请编写代码,获得输入N后,输出汉诺塔移动的步骤。递归思想
在这里插入图片描述steps = 0
def hanoi(n,src,des,mid): #四个参数
global steps #声明steps是全局变量
if n == 1:
steps+=1
print("[STEP{:>4}] {}->{}".format(steps,src,des))
else:
hanoi(n-1,src,mid,des)
steps+=1
print("[STEP{:>4}] {}->{}".format(steps,src,des))
hanoi(n-1,mid,des,src)
N = eval(input())
hanoi(N,“A”, “C”, “B”)
6、以整数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))
7、获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割
def prime(m):
flag = 0
if m
1:
flag=1
if m2:
flag=0
else:
for i in range(2,m):
if m%i
0:
flag=1
break
return flag

n = eval(input())
if n!=int(n):
n=int(n)+1
else:
n=int(n)

count = 5 #用于成功输出一个符合要求的质数的计数器
ls= []
while count > 0:
if prime(n) == 0:
ls.append(n)
count -= 1 #只有是质数方可减一
n+= 1 #无论是否是质数均加一
print(",".join(str(cc) for cc in ls))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值