第5章课后习题参考答案
一、单选题
关于函数描述错误的是______。(答案为D)
A. 有利于简化程序结构
B. 有利于提高代码的复用率,减少代码冗余
C. 有利于程序模块设计和多人分工协作
D. 有利于提高代码的执行速度
2.下列函数返回值的类型是______。(答案为C)
def func(x,y):
x=x+5
y=y+10
return x,y
A. int B. list C. tuple D. set
3.执行下列程序后,屏幕输出结果是______。(答案为A)
s=5
def f(x):
global s
s=s+x
return s
a=10
print(f(a))
A. 15 B. 5 C. 10 D. 程序报错
以下不是函数作用的选项是______。(答案为B)
A. 增强代码可读性 B. 提高代码执行速度
C. 降低编程复杂度 D. 复用相同功能代码
Python 语句 “f=lambda x,y:x*y;print(f(12,34))” 的运行结果是______。(答案为D)
A. 12 B. 34 C. 45 D. 408
关于 lambda 函数的描述中,错误的是______。(答案为A)
A. lambda不是Python的保留字
B. lambda函数也称为匿名函数
C. lambda函数不能包含return语句
D. lambda定义了一种特殊的函数
7. 可变参数**kw 收集关键字参数,并将这些参数存储到一个______中。(答案为C)
A. 列表 B. 元组 C. 字典 D. 数组
8. 以下选项中,对于递归程序的描述不正确的是________。(答案为C)
A. 书写简单 B. 递归程序都可以用非递归方法替代
C. 执行效率高 D. 一定要有终止条件
9. 以下选项中,对于函数定义错误的是_______。(答案为A)
A. def vfunc(*a,b) B. def vfunc(a,b)
C. def vfunc(a,*b) D. def vfunc(a,b=2)
10. 关于Python的全局变量和局部变量,以下选项中描述错误的是 _______。(答案为C)
A. 全局变量指函数之外定义的变量,一般没有缩进,在程序执行全过程有效
B. 简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放
C. 局部变量指在函数内部使用的变量,当函数退出时,变量依然存在,下次函数调用可以继续使用
D. 使用global保留字声明简单数据类型变量后,该变量作为全局变量使用
二、填空题
Python中定义函数的关键字是________。(def)
2. 在函数内部可以通过关键字_________来定义全局变量。(global)
3. 当函数的返回值不止一个时,默认的返回值是以_______类型出现。(元组)
3. 如果函数中没有return语句或者return语句不带任何返回值,则该函数的返回值为______。(None)
4. 函数返回时,传入的组合数据类型变量________(会/不会)被释放。(不会)
5. 已知f= lambda x:5,那么表达式f(3)的值为__________。(5)
6. 已知函数定义 def func(*p):return sum§,那么表达式func(1,2,3)的值为____________。(6)
以下是“闭包”的一个例子,请目测下一个print(a())会输出______?(10)
>>> def funX(): x=5 def funY(): nonlocal x x+=1 return x return funY >>> a=funX() >>> print(a()) >>> print(a()) >>> print(a()) >>> print(a())
三、设计题
1.设计一个函数,参数为整数,返回斐波那契数列的前n项之和。
参考答案:
def sum(n): a = 0 b = 1 sum = 0 for i in range(n): sum += a a, b = b, a + b return sum print("The sum of FIB is", sum(8),"!")
2.设计一个函数,调用该函数能够打印一个由指定字符组成的n行金字塔。其中,指定打印的字符和行数n分别由两个形参表示。
参考答案:
def jzt(m,n): for i in range(1,n): print(' '*(20-(i-1)),m*(2*i-1)) a= int (input("输入打印行数:")) b= str (input("要打印的字符:")) jzt(b,a+1)
3.设计一个函数,计算传入字符串中数字、字母、空格以及其他类字符的个数。
参考答案:
def check(msg): res = {'num': 0,'string': 0,'space': 0,'other': 0,} for s in msg: if s.isdigit(): #判断属于数字 res['num'] += 1 elif s.isalpha(): #判断属于字符串 res['string'] += 1 elif s.isspace(): #判断属于空格 res['space'] += 1 else: res['other'] += 1 return res res = check('hello name:jim passowrd:win2008') #给函数传入参数‘hello name:jim passowrd:win2008’ print(res) #结果是{'num': 4, 'string': 23, 'space': 2, 'other': 2}
4.设计函数,输入参数n,判断该数是否为水仙花数。
参考答案:
def sxh (z) : q = z % 10 w = z // 10 % 10 e = z // 100 if z == q * q * q + w * w * w + e * e * e: return True exit(1) return False if sxh(153): print("是水仙花数" ) else: print("不是水仙花数")
5.设计一个函数,求正整数的各位上的数字之和,要求递归思路实现.
参考答案:
def sum_digits(number): # Base Case if number == 0: return 0 else: # Mod (%) by 10 gives you the rightmost digit (227 % 10 == 7), # while doing integer division by 10 removes the rightmost # digit (227 // 10 is 22) return (number % 10) + sum_digits(number // 10) print(sum_digits(57))
- 设计一个函数,判断一个数是否为素数?并求出所有四位数的素数.
参考答案:
import math def sushu(m): k = int(math.sqrt(m)) for i in range(2, k+2): if m % i == 0: break if i == k+1: return True else: return False a=int(input('请输入一个数:')) if a==1: print('1既不是素数也不是合数') else: if sushu(a)==True: print(a,'是素数') else: print(a,'是合数') print('四位数素数为:') n=0 for i in range(1001,10000,2): if sushu(i)==True: if n%30==0: print() print(i,end=' ') n=n+1