目录
练习 3.1
1、判断题
2、选择题
3、代码分析题
4、程序设计题
练习 3.1
1、判断题
(1) 函数定义可以嵌套。 (✔)
(2) 函数调用可以嵌套。 (✔)
(3) 函数参数可以嵌套。 (✖)
(4) Python 函数调用时的参数传递,只有传值一种方式,所以形参值的变化不会影响实参。 (✖)
(5)一个函数中可以定义多个 return 语句。 (✔)
(6)定义 Pthon 函数时,无须指定其返回对象的类型。 (✔)
(7) 可以使用一个可变对象作为函数可选参数的默认值。 (✖)
(8) 函数有可能改变一个形式参数变量所绑定对象的值。 (✔)
(9)函数的形式参数是可选的,可以有,也可以无。 (✖)
(10) 传给函数的实参必须与函数签名中定义的形参在数目、类型和顺序上一致。 (✔)
(11) 函数参数可以作为位置参数或命名参数传递。 (✔)
(12) Python 函数的 retumm 语句只能返回一个值。 (✖)
(13) 函数调用时,如果没有实参调用默认参数,则默认值被当作 0。 (✖)
(14) 无返回值的函数称为 None 函数。 (✔)
(15) 递归函数的名称在自己的函数体中至少要出现一次。 (✔)
(16) 在递归函数中必须有一个控制环节用来防止程序无限期地运行。 (✔)
(17) 递归函数必须返回一个值给其调用者,否则无法继续递归过程。 (✔)
(18) 不可能存在无返回值的递归函数。 (✖)
2、选择题
(1) 代码
>>> def func(a, b=4,c=5) :
print (a,b,c)
>>> func(1,2)
执行后输出的结果是_A_。
A. 1 2 5 B. 1 4 5 C. 2 4 5 D.1 2 0
(2) 函数
def func(x,y,z = 1, *par, **parameter) :
print (x,y,z)
print (par)
print(parameter)
用 func (1,2,3,4,5, m = 6) 调用,输出结果是___B__
A. B. C. D.
1 2 1 1 2 3 1 2 3 1 2 1
(3,4,5) (4,5) (4, 5) (4,5)
('m'=6) {'m' : 6} (6) (m=6)
(3) 代码
>>> x,y = 6,9
>>> def foo() :
global y
x,y = 0,0>>> x,y
执行后的显示结果是_B_
A. 0 0 B. 6 0 C. 0 9 D. 6 9
(4)下列关于匿名函数的说法中,正确的是。___A___
A. lammbda 是一个表达式,不是语句
B. 在 lambda 的格式中,lambda 参数 1,参数 2,.....: 是由参数构成的表达式
C. lambda 可以用 def定义一个命名函数替换
D. 对于 mn=(lambda x,y : x if x <y else y),mn(3,5) 可以返回两个数字中的大者
lambda是一个表达式,而不是一个语句。因为这一点,lambda能够出现在Python语法不允许def出现的地方
3、代码分析题
(1) 阅读下面的代码,指出函数的功能。
def f(m,n) :
if m < n:
m,n = n,m
while m % n != 0:
r = m % n
m = n
n = r
return n
计算两个正整数的最大公约数
(2) 阅读下面的代码,指出程序运行结果。
d = lambda p: p; t = lambda p: p * 3
x = 2; x = d(x); x = t(x); x = d(x); print(x)
6
(3) 阅读下面的代码,指出其中 while 循环的次数
def cube(i) :
i = i * i * ii = 0
while i < 1000:
cube (i)
i+1
while 的循环次数为:
按照题目,循环次数为1000
(4) 指出下面的代码输出几个数据,并说明它们之间的关系
a =1
id(a)
def fun (a) :
print (id(a))
a = 2
print (id(a))
fun(a)
id(a)
140735017677072
140735017677072
140735017677104
140735017677072
(5) 指出下面的代码输出几个数据,说明它们之间的关系,并说明此题与(4) 题不同的原因
a = []
id(a)
def fun (a) :
print (id(a))
a.append (1)
print (id(a))
fun(a)
id(a)
1877739262472
1877739262472
1877739262472
1877739262472
6)下面这段代码的输出结果是什么? 请解释。
def extendlist (val,Liist = []):
Liist .append(val)
return Liist
list1 = extendlist(10)
list2 = extendlist(123, [])
list3 = extendlist('a')
print('list = %s' % list1)
print('list = %s' % list2)
print('list = %s' % list3)
list = [10, 'a']
list = [123]
list = [10, 'a']
(7)下面这段代码的输出结果是什么? 请解释
def multipliers () :
return ([lambda x:i * x for i in range (4)])
print ([m(2) for m in multipliers() ])
[6, 6, 6, 6]
4、程序设计题
(1) 编写一个函数,求一元二次多项式的值。
(2) 编写一个计算 f(x) = x^n 的递归程序。
(3) 假设银行一年整存整取的月息为 0.32%,某人存入了一笔钱。然后,每年年底取出 200 元。这
样到第 5 年年底刚好取完。请设计一个递归函数,计算他当初共存了多少钱。
(4) 设有 n 个已经按照从大到小顺序排列的数,现在从键盘上输入一个数 ,判断它是否在已知数列中。
(5) 用递归函数计算两个非负整数的最大公约数。
(6) 约瑟夫问题: M个人围成一圈,从第 1个人开始依次从1到N循环报数,并且让每个报数为N的人出圈,直到圈中只剩下一个人为止。请用 python语言程序输出所有出圈者的顺序(分别用循环和递归方法)。
(7) 分割圆。在一个圆的边上任选 n 个点,然后用直线段将它们连接,会把圆分成若干块
(8) 台阶问题。一只青蛙一次可以跳 1 级台阶,也可以跳 2 级台阶。求该者蛙跳一个,级的台阶总共有多少种跳法。请用函数和 lammbda 表达式分别求解。
(9) 变态台阶问题。一只青蛙一次可以跳 1 级台阶,也可以跳 2 级台阶....它也可以跳 n 级台阶。求该青蛙跳一个 n 级的台阶总共有多少种跳法。请用函数和 lambda 表达式分别求解。
(10) 矩形覆盖。 可以用 2x1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2 x 1的小矩形无重叠地覆盖一个 2xn 的大矩形,总共有多少种方法? 请用函数和 ambda 表达式分别求解。