嘿,这里是目录!
- 练习网址
- 测验5
- 单项选择题
- 1. 以下选项不是函数作用的是:B
- 2. 下列程序的输出结果为:D
- 3. 以下关于Python函数说法错误的是:C
- 4. 以下关于函数调用描述正确的是:D
- 5. 以下关于模块化设计描述错误的是:D
- 6. 以下对递归描述错误的是:B
- 7. 以下关于函数说法错误的是: B
- 8. 哪个选项对于函数的定义是错误的?B
- 9. 关于return语句,以下选项描述正确的是:A
- 10. 以下关于递归函数基例的说法错误的是:C
- 程序设计题
- 练习5
练习网址
https://python123.io/index
测验5
单项选择题
1. 以下选项不是函数作用的是:B
A. 增强代码可读性
B. 提高代码执行速度
C. 降低编程复杂度
D. 复用代码
2. 下列程序的输出结果为:D
def f(a,b):
a = 4
return a+b
def main():
a = 5
b = 6
print(f(a,b),a+b)
main()
A. 11 10
B. 11 11
C. 10 10
D. 10 11
3. 以下关于Python函数说法错误的是:C
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. 该函数名称为func
C. 执行该函数后,变量c的值为200
D. 执行该函数后,变量b的值为100
4. 以下关于函数调用描述正确的是:D
A. Python内置函数调用前需要引用相应的库
B. 函数在调用前不需要定义,拿来即用就好
C. 函数和调用只能发生在同一个文件中
D. 自定义函数调用前必须定义
解析:函数调用前必须已经存在函数定义,否则无法执行。Python内置函数直接使用,不需要引用任何模块。
5. 以下关于模块化设计描述错误的是:D
A. 高耦合度的特点是复用较为困难
B. 应尽可能合理划分功能块,功能块内部耦合度高
C. 模块间关系尽可能简单,模块之间耦合度低
D. 应尽可能合理划分功能块,功能块内部耦合度低
解析:模块内高耦合、模块间低耦合。
6. 以下对递归描述错误的是:B
A. 一定要有基例
B. 执行效率高
C. 递归程序都可以有非递归编写方法
D. 书写简单
7. 以下关于函数说法错误的是: B
A. 函数可以看做是一段具有名字的子程序
B. 对函数的使用必须了解其内部实现原理
C. 函数是一段具有特定功能的、可重用的语句组
D. 函数通过函数名来调用
8. 哪个选项对于函数的定义是错误的?B
A. def vfunc(a,b=2):
B. def vfunc(*a,b):
C. def vfunc(a,*b):
D. def vfunc(a,b):
9. 关于return语句,以下选项描述正确的是:A
A. 函数可以没有return语句
B. 函数必须有一个return语句
C. return只能返回一个值
D. 函数中最多只有一个return语句
10. 以下关于递归函数基例的说法错误的是:C
A. 递归函数的基例决定递归的深度
B. 递归函数必须有基例
C. 每个递归函数都只能有一个基例
D. 递归函数的基例不再进行递归
解析:每个递归函数至少存在一个基例,但可能存在多个基例。
程序设计题
1. 随机密码生成
- 描述
补充编程模板中代码,完成如下功能:
以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。
产生密码采用random.randint()函数。 - 输入输出示例
输入 | 输出 | |
---|---|---|
示例1 | 3 | 634 524 926 |
- 参考代码1
import random
def genpwd(length):
return random.randint(10 ** (length-1),10 ** length)
# random.randint(start, stop)
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
- 参考代码2
import random
def genpwd(length):
a = 10**(length-1)
b = 10**length - 1
return "{}".format(random.randint(a, b))
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
2. 连续质数计算
- 描述
补充编程模板中代码,完成如下功能:
获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。
注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
- 输入输出示例
输入 | 输出 | |
---|---|---|
示例1 | 12 | 13,17,19,23,29 |
- 参考代码
def prime(m):#判断该数是否为质数
for i in range(2,m):
if m % i == 0:
return False
return True
n = eval(input())#对输入小数情况进行判断,获取超过该输入的最小整数(这里没用floor()函数)
n_ = int(n)
n_ = n_+1 if n_ < n else n_
count = 5
while count > 0:
if prime(n_):
if count > 1:#对输出格式进行判断,最后一个输出后不增加逗号(这里没用.join()方法)
print(n_, end=",")
else:
print(n_, end="")
count -= 1
n_ += 1
练习5
1. 实例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()
2. 实例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(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. 任意累积
- 描述
请根据编程模板补充代码,计算任意个输入数字的乘积。
注意,仅需要在标注…的地方补充一行或多行代码。
- 输入输出示例
输入 | 输出 | |
---|---|---|
示例1 | 1,2,3,4 | 24 |
- 参考代码
def cmul(a, *b):
m = a
for i in b:
m *= i
return m
print(eval("cmul({})".format(input())))
4. 斐波那契数列计算
- 描述
根据编程模板补充代码,计算斐波那契数列的值,具体功能如下:
- 获取用户输入整数N,其中,N为正整数
- 计算斐波那契数列的值
如果将斐波那契数列表示为fbi(N),对于整数N,值如下:
fbi(1)和fbi(2)的值是1,当N>2时,fbi(N) = fbi(N-1) + fbi(N-2)
请采用递归方式编写。
- 输入输出示例
输入 | 输出 | |
---|---|---|
示例1 | 4 | 3 |
- 参考代码
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))
5. 汉诺塔实践
- 描述
汉诺塔问题大家都清楚,这里不再赘述。
请补充编程模板中代码,完成如下功能:
有三个圆柱A、B、C,初始时A上有N个圆盘,N由用户输入给出,最终移动到圆柱C上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP是步骤序号,宽度为4个字符,右对齐。
请编写代码,获得输入N后,输出汉诺塔移动的步骤。 - 输入格式
一个整数 - 输出格式
每个步骤一行,每行参考格式如下:[STEP 10] A->C - 输入输出示例
输入 | 输出 | |
---|---|---|
示例1 | 3 | [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)