函数和代码复用-课后作业
一、单项选择题
1、以下关于递归函数基例的说法错误的是:
- A 递制归函数必须有基例
- B 递归函数的基例不再进行递归
- C 递归函数的基例决定递归的深度
- D 每个递归函数都只能有一个基例
【答案】D
【解析】暂无解析
2、以下选项不是函数作用的是:
- A 提高代码执行速度
- B 复用代码
- C 增强代码可读性
- D 降低编程复杂度
【答案】A
【解析】暂无解析
3、以下关于Python函数说法错误的是:
def func(a,b):
c=a**2+b
b=a
return c
a=10
b=100
c=func(a,b)+a
-
A 执行该函数后,变量b的值为100
-
B 该函数名称为func
-
C 执行该函数后,变量a的值为10
-
D 执行该函数后,变量c的值为200
【答案】D
【解析】暂无解析
4、 以下关于模块化设计描述错误的是:
- A 模块间关系尽可能简单,模块之间耦合度低
- B 高耦合度的特点是复用较为困难
- C 应尽可能合理划分功能块,功能块内部耦合度高
- D 应尽可能合理划分功能块,功能块内部耦合度低
【答案】A
【解析】暂无解析
5、以下对递归描述错误的是:
- A 递归程序都可以有非递归编写方法
- B 执行效率高
- C 一定要有基例
- D 书写简单
【答案】D
【解析】暂无解析
6、以下关于函数说法错误的是:
- A 函数是一段具有特定功能的、可重用的语句组
- B 函数通过函数名来调用
- C 对函数的使用必须了解其内部实现原理
- D 函数可以看做是一段具有名字的子程序
【答案】D
【解析】暂无解析
7 、哪个选项对于函数的定义是错误的?
-
A def vfunc(a,b):
-
B def vfunc(a,*b):
-
C def vfunc(*a,b):
-
D def vfunc(a,b=2):
【答案】A
【解析】暂无解析
8 、函数定义时,以下不需要使用global声明就可能操作全局变量的类型是:
- A 字符串
- B 整数
- C 列表
- D 浮点数
【答案】D
【解析】暂无解析
9、以下关于lambda函数说法错误的是:
- A 仅适用于简单单行函数
- B 匿名函数,定义后的结果是函数名称
- C 函数中可以使用赋值语句块
- D 必须使用lambda保留字定义
【答案】C
【解析】暂无解析
二、程序设计题
1、任意累积
类别:Python 函数和代码复用
请根据编程模板补充代码,计算任意个输入数字的乘积。
注意,仅需要在标注“…”的地方补充一行或多行代码。
**示例1:**
输入:1,2,3,4
输出:24
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹
if __name__ == '__main__':
# 请在...补充一行或多行代码
def cmul(*num):
mul = 1
for i in num: # 循环遍历每个数,依次相乘
mul *= i
return mul
# 通过字符串格式化构造函数调用表达式,并使用eval执行
print(eval("cmul({})".format(input())))
2、斐波纳契数列 II
类型:Python 函数和代码复用
根据编程模板补充代码,计算斐波那契数列的值,具体功能如下:
- 获取用户输入整数
N
,其中,N
为正整数; - 计算斐波那契数列的值。
如果将斐波那契数列表示为 fbi(N)
,对于整数 N
,值如下:
当 N = 1 / N = 2 时,fbi(1)
和 fbi(2)
的值是 1;
当 N > 2 时,fbi(N) = fbi(N-1) + fbi(N-2)
;
**示例1:**
输入:"4"
输出:"3"
**注意:**
- 输入使用
input()
,不要增加额外的提示信息; - 输出使用
print()
,不要增加额外的输出信息;
代码
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹
if __name__ == '__main__':
# 请在...补充一行或多行代码
def fbi(n):
if n == 1 or n == 2: # 如果是斐波那契数列的第1项或第2项,直接返回1
return 1
else:
return fbi(n - 1) + fbi(n - 2) # 否则递归计算前两项的和作为第n项的值
n = eval(input()) # 输入要计算的项数
print(fbi(n)) # 输出斐波那契数列的第n项值
3、连续质数计算
类别:Python 函数和代码复用
补充编程模板中代码,完成如下功能:
获得用户输入数字 N
,计算并输出从 N
开始的 5 个质数,单行输出,质数间用逗号、分割。
注意:需要考虑用户输入的数字 N
可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
**示例1:**
输入:"12"
输出:"13,17,19,23,29"
代码
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹
if __name__ == '__main__':
# 请在...补充一行或多行代码
def prime(m):
flag = 0 # 定义一个标记,便于根据返回值判断是否是质数
for i in range(2, m):
if m % i == 0:
flag = 1
break
return flag
n = eval(input())
a = int(n) # 强制转换为整数
a = a + 1 if a < n else a # 输出一个比n本身要大的整数,
count = 5 # 用于成功输出一个符合要求的质数的计数器
t = ""
while count > 0:
if prime(a) == 0:
t += "{},".format(str(a))
count -= 1 # 只有是质数方可减一
a += 1 # 无论是否是质数均加一
print(t[:-1])
4、随机密码生成
类别:Python random库
补充编程模板中代码,完成如下功能:
以整数 17 为随机数种子,获取用户输入整数 N
为长度,产生 3 个长度为 N
位的密码,密码的每位是一个数字。每个密码单独一行输出。
生成密码采用 random.randint()
函数。
**示例1:**
输入:3
输出:
634
524
926
代码
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹
if __name__ == '__main__':
# 请在...补充代码
import random
def genpwd(length):
a = pow(10, length - 1)
b = pow(10, length) - 1 # 根据长度取得输入数字范围
return random.randint(a, b)
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
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 |
代码:
# -*- codeing = utf-8 -*-
# @Autor:为一道彩虹
if __name__ == '__main__':
count = 1 # 设置全局变量 方便记录步骤数
def hanoi(num, src, mid, dst): # A B C
global count # 全局变量声明
if (num == 0):
return
# src源柱子
# dst目的柱子
# mid中间柱子,用于过度的
hanoi(num - 1, src, dst, mid) # 这里是移动除了最底部的圆盘
print("[STEP{:>4}] {}->{}".format(count, src, dst)) # 将源柱子上移动到目的柱子上
count += 1
# 将中间柱子上的圆盘移动到目的柱子上
hanoi(num - 1, mid, src, dst)
n = int(input())
hanoi(n, 'A', 'B', 'C')
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!