测验5: 函数和代码复用

目录

一、单项选择题

二、程序设计题

1.随机密码生成

2.连续质数计算

一、单项选择题

1.以下选项不是函数作用的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

A.提高代码执行速度

B.降低编程复杂度

C.复用代码

D.增强代码可读性


A

函数不能直接提高代码执行速度。

2.下列程序的输出结果为:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

def f(a,b):
    a=4
    return a+b
def main():
    a=5
    b=6
    print(f(a,b),a+b)
main()

A.11  11

B.11  10

C.10   11

D.10  10


C

这里没有全局变量,都是函数局部变量的运算。

过程:

1】调用main()函数,将a赋值为5,b赋值为6

2】调用f(a, b)函数,将a和b的值传递给f()函数

3】在f()函数中,将a的值重新赋值为4,然后返回a+b的结果

4】在main()函数中,打印f(a, b)的结果,即4+6=10,以及a+b的结果,即5+6=11

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.执行该函数后,变量c的值为200

D.执行该函数后,变量a的值为10


C

a, b为全局变量

过程:

1】变量a赋值为10,b赋值为100

2】调用func(a, b)函数,将a和b的值传递给func()函数

3】在func()函数中,a=10,b=100,所以c的值为10**2+100=200

4】b的值更新为10

5】返回了c的值200

6】将func(a, b)的返回值200与a的值10相加,得到结果为200+10=210

4.以下关于函数调用描述正确的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

A.Python内置函数调用前需要引用相应的库

B.函数和调用只能发生在同一个文件中

C.函数在调用前不需要定义,拿来即用就好

D.自定义函数调用前必须定义


D

Python内置函数直接使用,不需要引用任何模块。

函数和函数调用可以在同一个文件中,也可以在不同的文件中,只要在调用前确保函数定义是可见的。即函数调用前必须已经存在函数定义,否则无法执行。

5.以下关于模块化设计描述错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

A.高耦合度的特点是复用较为困难

B.应尽可能合理划分功能块,功能块内部耦合度高

C.应尽可能合理划分功能块,功能块内部耦合度低

D.模块间关系尽可能简单,模块之间耦合度低


C

模块内高耦合、模块间低耦合。

高耦合表示模块内部的各个部分之间相互依赖,导致模块内部的变化可能会影响到其他部分。

低耦合表示模块之间的依赖关系较弱,模块之间的变化不会相互影响。

6.以下对递归描述错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

A.书写简单

B.递归程序都可以有非递归编写方法

C.一定要有基例

D.执行效率高


D

递归不提高程序执行效率。

任何递归程序都可以通过堆栈或队列变成非递归程序(这是程序的高级应用)。

"一定要有基例"是递归的一个重要特征。在递归算法中,基例是指问题可以被分解为更小的子问题,直到达到一个可以直接求解的简单情况。

7.以下关于函数说法错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

A.函数通过函数名来调用

B.函数可以看做是一段具有名字的子程序

C.函数是一段具有特定功能的、可重用的语句组

D.对函数的使用必须了解其内部实现原理


D

调用函数不需要知道函数内部实现原理,只需要知道调用方法(即接口)即可。

8.哪个选项对于函数的定义是错误的?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

A.def vfunc(*a,b):

B.def vfunc(a,*b):

C.def vfunc(a,b=2):

D.def vfunc(a,b):


A

def vfunc(*a, b) 是错误的定义:*a表示可变参数,可变参数只能放在函数参数的最后。

def vfunc(a,b=2)中,b=2表示带默认值的可选参数,可选参数b必须定义在非可选参数a的后面。

9.关于return语句,以下选项描述正确的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

A.函数可以没有return语句

B.函数必须有一个return语句

C.函数中最多只有一个return语句

D.return只能返回一个值


A

函数可以包含0个或多个return语句。

return语句可以返回一个值,也可以返回多个值(以元组、列表、字典等形式)。

10.以下关于递归函数基例的说法错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

A.递归函数的基例决定递归的深度

B.递归函数的基例不再进行递归

C.递归函数必须有基例

D.每个递归函数都只能有一个基例


D

每个递归函数至少存在一个基例,但可能存在多个基例。

二、程序设计题

1.随机密码生成

描述

补充编程模板中代码,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

产生密码采用random.randint()函数。

输入输出示例

输入输出
示例 1
3
634
524
926

 提交代码

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))
# random.seed(17) 
# 将随机数生成器的种子设置为 17
# random.randint(a, b)
# 生成一个 [a, b] 之间的整数

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
import math
n = eval(input())
s = math.ceil(n)
flag = 0
while flag < 5:
    if prime(s):
        if flag == 4:
            print(s,end="")
        else:
            print(s,end=",")
        flag += 1
    s += 1
# 定义prime()函数,判断素数
# s = math.ceil(n)
# math.ceil函数将 n 向上取整,返回 不小于n(>=n) 的最小整数
# flag = 0
# 初始化了一个变量flag,找到一个素数之后,值会对应+1
# 当 flag 等于 4 时,意味着这次循环是第 5 个素数,打印输出最后一个素数结尾不加,
  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值