练习五
一:七段数码管的绘制
import time,turtle
def drawgap():
turtle.penup()
turtle.fd(5)
def drawline(draw):
drawgap()
turtle.pendown if draw else turtle.penup()
turtle.fd(40)
drawgap()
turtle.right(90)
def drawdigit(digit):
drawlint(True) if digit in [2,3,4,5,6,8,9] else drawline(False)
drawlint(True) if digit in [0,1,3,4,5,6,7,8,9] else drawline(False)
drawlint(True) if digit in [0,2,3,5,6,8,9] else drawline(False)
drawlint(True) if digit in [0,2,6,8] else drawline(False)
turtle.left(90)
drawlint(True) if digit in [0,4,5,6,8,9] else drawline(False)
drawlint(True) if digit in [0,2,3,5,6,7,8,9] else drawline(False)
drawlint(True) if digit in [0,1,2,3,4,7,8,9] else drawline(False)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawdata(date):
turtle.pencolor("red")
for i in date:
if i == '-':
turtle.write('年',font=("Arial",18,"normal"))
turtle.pencolor("green")
turtle.fd(40)
elif i == '=':
turtle.write('月',font=("Arial",18,"normal"))
turtle.pencolor("blue")
turtle.fd(40)
elif i == '+':
turtle.write('日',font=("Arial",18,"normal"))
else:
drawdigit(eval(i))
def main():
turtle.setup(800,350,200,200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
二:科赫雪花小包裹
# 请在...补充一行或多行代码
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)
level = 3
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())))
四:斐波那契数列计算
# 请在...补充一行或多行代码
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))
五:汉诺塔实践
# 请在...补充一行或多行代码
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)
测验五
选择题
1
以下选项不是函数作用的是:A
A:提高代码执行速度
B:复用代码
C:增强代码可读性
D:降低编程复杂度
2
def f(a,b):
a = 4
return a+b
def main():
a = 5
b = 6
print(f(a,b),a+b)
main()
输出结果
10 11
3
以下关于Python函数说法错误的是:B
def func(a,b):
c=a**2+b
b=a
return c
a=10
b=100
c=func(a,b)+a
A:执行该函数后,变量a的值为10
B:执行该函数后,变量c的值为200
C:该函数名称为func
D:执行该函数后,变量b的值为100
4
以下关于函数调用描述正确的是:A
A:自定义函数调用前必须定义
B:Python内置函数调用前需要引用相应的库
C:函数在调用前不需要定义,拿来即用就好
D:函数和调用只能发生在同一个文件中
函数调用前必须已经存在函数定义,否则无法执行。
Python内置函数直接使用,不需要引用任何模块。
5
模块内高耦合、模块间低耦合。
6
递归不提高程序执行效率。
任何递归程序都可以通过堆栈或队列变成非递归程序(这是程序的高级应用)。
7
调用函数不需要知道函数内部实现原理,只需要知道调用方法(即接口)即可。
8
def vfunc(*a, b) 是错误的定义:*a表示可变参数,可变参数只能放在函数参数的最后。
9
函数可以包含0个或多个return语句
10
每个递归函数至少存在一个基例,但可能存在多个基例。
一:随机密码生成
#请在...补充代码
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))
二:连续质数计算
# 请在...补充一行或多行代码
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