测验5: 函数和代码复用 (第5周)

测验5: 函数和代码复用 (第5周)

单项选择题

1、以下选项不是函数作用的是:

A、复用代码

B、降低编程复杂度

C、提高代码执行速度

D、增强代码可读性

正确答案 C
函数不能直接提高代码执行速度。

2、下列程序的输出结果为:

def f(a,b):
  a=4  
  return  a+b

def main():

  a=5
  b=6
  print(f(a,b),a+b)

main()

A、10 11

B、10 10

C、11 10

D、11 11

正确答案 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、该函数名称为func

B、执行该函数后,变量a的值为10

C、执行该函数后,变量b的值为100

D、执行该函数后,变量c的值为200

正确答案 D
这里没有全局变量,请在IDLE中执行代码观察结果。

4、以下关于函数调用描述正确的是:

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

B、自定义函数调用前必须定义

C、Python内置函数调用前需要引用相应的库

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

正确答案 B
函数调用前必须已经存在函数定义,否则无法执行。

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

5、以下关于模块化设计描述错误的是:

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

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

C、高耦合度的特点是复用较为困难

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

正确答案 D
模块内高耦合、模块间低耦合。

6、以下对递归描述错误的是:

A、递归程序都可以有非递归编写方法

B、书写简单

C、执行效率高

D、一定要有基例

正确答案 C
递归不提高程序执行效率。

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

7、以下关于函数说法错误的是:

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

B、函数是一段具有特定功能的、可重用的语句组
C、对函数的使用必须了解其内部实现原理

D、函数通过函数名来调用

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

8、哪个选项对于函数的定义是错误的?

A、def vfunc(a,*b):

B、def vfunc(a,b):

C、def vfunc(*a,b):

D、def vfunc(a,b=2):

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

9、关于return语句,以下选项描述正确的是:

A、函数中最多只有一个return语句

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

C、return只能返回一个值

D、函数可以没有return语句

正确答案 D
函数可以包含0个或多个return语句

10、以下关于递归函数基例的说法错误的是:

A、递归函数必须有基例

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

C、递归函数的基例决定递归的深度

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

正确答案 D
每个递归函数至少存在一个基例,但可能存在多个基例。

随机密码生成

补充编程模板中代码,完成如下功能:

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

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

输入输出示例

输入 输出

示例 1

3

634

524

926

【我的答案】


#请在...补充代码

import random
def genpwd(length):

    return random.randint(0,10**(length)-1)+10**(length-1)

length = eval(input())

random.seed(17)

for i in range(3):

    print(genpwd(length))


【参考代码】


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))

# 这段代码没有难点,不解释。

连续质数计算

补充编程模板中代码,完成如下功能:

获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。

注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。

输入输出示例

输入 输出

12

13,17,19,23,29

【我的答案】


# 请在...补充一行或多行代码

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本身要大的整数,

                             #切记前面的a = a + 1不要写成a += 1,输出会不对的

count = 5                    #用于成功输出一个符合要求的质数的计数器

t = ""

while count > 0:

    if prime(a) == 0:

        t += "{},".format(str(a))

        count -= 1           #只有是质数方可减一

    a += 1                   #无论是否是质数均加一

print(t[:-1])

【参考代码】


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

# 这个代码注意:

(1) 需要对输入小数情况进行判断,获取超过该输入的最小整数(这里没用floor()函数);

(2) 对输出格式进行判断,最后一个输出后不增加逗号(这里没用.join()方法)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值