首页 > 其他分享 >第六章 1 函数-基础 练习题

第六章 1 函数-基础 练习题

时间:2022-09-04 11:24:26浏览次数:66  
标签:练习题 return 函数 ip print func 第六章 def

第六章 1 函数-基础  练习题
[基础知识]
1 可以使用内置函数_______________查看包含当前作用域内
所有全局变量和值的字典
globals().print

2 可以使用内置函数___________________查看包含当前作用域内
所有局部变量和值的字典
locals().print

3 Python 中定义函数的关键字是_________________
def

4 在函数内部可以通过关键字________________来定义全局变量
global

5 如果函数中没有 return 语句或者 return 语句不带任何返回值,
那么该函数的返回值为

None

6 已知 table = ’‘.maketrans(’abcw’, ‘xyzc’),
那么表达式 ‘Hellow world’.translate(table) 的值为______
Helloc corld

7 已知有函数定义 def demo(*p):return sum(p),
那么表达式 demo(1, 2, 3) 的值为______、表
达式 demo(1, 2, 3, 4) 的值为_________
6, 10

8 已知函数定义 def func(*p):return sum(p),
那么表达式 func(1,2,3) 的值为_____
6

9 已知函数定义 def func(*p):return sum(p),
那么表达式 func(1,2,3, 4) 的值为______
10

10 已知函数定义 def func(**p):return sum(p.values()),
那么表达式 func(x=1, y=2, z=3) 的值为________
6

11 已知函数定义 def func(**p):return ’’.join(sorted(p)),
那么表达式 func(x=1, y=2, z=3)的值为__________
xyz

[进阶拓展]
1 enumerate 的作用是什么?
答案:
enumerrate函数是将一个可迭代对象中的元素,按元素顺序每个增加一个索引值,
将其组成一个索引序列,利用它可以同时获得索引和值,这样做的目的
是为了将一个可迭代对象中的元素组成一个索引:值,以利于后续操作。


2 Python 递归的最大层数?
python的最大递归层数是可以设置的,默认在windows上的最大递归层数是998

3 请写出打印结果:
# 例 1
def func(a,b=[]):
b.append(a)
print(b)
func(1) #[1]
func(1) #[1, 1]
func(1) #[1, 1, 1]
func(1) #[1, 1, 1, 1]

# 例 2
def func(a,b={}):
b[a] = 'v'
print(b)
func(1) #{1: 'v'}
func(2) #{1: 'v', 2: 'v'}


4 以下代码输出结果为
# 调用上下文如下
collapse = True
processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)
print(processFunc("i\tam\ntest\tobject !"))

collapse = False
processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)
print(processFunc("i\tam\ntest\tobject !"))
# 以上代码会在控制台输出什么?
i am test object !
i am
test object !



5 请给出下面代码的输出结果
a = 1
def fun(a):
a=2
fun(a)
print(a) # 1

a = []
def fun(a):
a.append(1)
fun(a)
print(a) # [1]



6 指出下面程序存在的问题
def Lastllindextem(src, index):
'''请返回传入 src 使用空格或者"\"切分后的倒数第 index 个子串'''
return src.split('\')[-index]
解答:return 会出问题的,应当用’\\‘


7 求打印结果
###
```python
arr = [1,2,3]
def bar():
arr+=[5]
bar()
print(arr)
'''
A. error
B. [5]
C. [1,2,3]
D. [1,2,3,5]

解答: A, 递归运行到一定的层数后,就会报错。这个函数没有调协返回


8 下面的函数,哪些会输出 1,2,3 三个数字
def func1():
for i in range(3):
print(i)
a_list = [0, 1, 2]
for i in a_list:
print(i + 1)

def func2():
i = 1
while i < 3:
print(i)
i += 1

def func3():
for i in range(3):
print(i + 1)

func3()


9 以下函数需要在其中引用一个全局变量 k,请填写语句
def fun(): ________

global k

10 阅读以下代码,并写出程序的输出结果
my_dict = {"a":0,"b":1}
def func(d):
d["a"]=1
return d
func(my_dict)
my_dict["c"]=2
print(my_dict) # {'a': 1, 'b': 1, 'c': 2}

答案: {'a': 1, 'b': 1, 'c': 2}

11 有函数定义如下
def calc(a,b,c,d=1,e=2): return (a+b)*(c-d)+e
# 请分别写出以下标号代码的输出结果, 如果出错请写出 Error
print(calc(1,2,3,4,5)) # ____2
print(calc(1,2,3)) # ____8
print(calc(1,2)) # ____报错 missing 1 required positional argument: 'c'
print(calc(1,2,3,e=4)) # ____10
print(calc(e=4, c=5, a=2,b=3)) # ____24
print(calc(1,2,3, d=5, 4)) # ____SyntaxError


12 下列函数的输出结果
def add_end(l=[]):
l.append("end")
return l
print(add_end()) # 输出['end']
print(add_end()) # 再次调用输出什么? 为什么

解答:
['end']
['end','end']
函数在定义阶段,就定义l指向了一个内存地址.,
这个列表只在函数内部存活,不是一个全局的列表,只是一个局部的列表


13 Python 如何定义一个函数
A. class <name>(<Type> arg1, <type> arg2, ...)
B. function <name>(arg1,arg2,...)
C. def <name>(arg1, arg2,...)
D. def <name>(<type> arg1, <type> arg2...)

C

14 选择代码运行结果
country_counter = {}
def addone(country):
if country in country_counter:
country_counter[country] += 1
else:
country_counter[country] = 1
addone("Japan")
addone("china")
print len(country_counter)
'''
A. 0
B. 1
C. 2
D. 3
E. 4
C

15 选择输出结果
def doff(arg1, *args):
print(type(args))
doff("applea", "bananas", "cherry")
A.str
B.int
C.tuple
D.list
E.dict

C


16 下面程序的输出结果是
d = lambda p:p*2
t = lambda p:p*3

x = 2
x = d(x)
x = t(x)
x = d(x)
print(x)

24

17 写函数
''' 有一个数据结构如下所示,请编写⼀个函数从该结构数据中返回
由指定的字段和对应的值组成的字典。如果指定字段不存在,则跳过该字段。
'''
data:{ "time":"2016-08-05T13:13:05",
"some_id":"ID1234",
"grp1":{"fld1":1, "fld2":2,},
"xxx2":{"fld3":0, "fld4":0.4,},
"fld6":11,
"fld7": 7,
"fld46":8
}
# fields:由"|"连接的以 fld 开头的字符串, 如 fld2|fld7|fld29

这T真的不会。。。。

18 Python 中 pass 语句的作用是什么?
解答:
开始进行框架设计的时候,如果还没有具体思路,可以先写下来函数名称,函数体则用pass代替,这样可以
先进行总体设计。有大的思路。但不会影响具体写代码。


19 有这样一段代码,print c 会输出什么,为什么?
a = 10
b = 20
c = [a]
a = 15
10 , 对于字符串、变量, 值的传递是按顺序的。

20 递归函数停止的条件?
递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果进行选择。
是继续调用自身,还是return返回终止递归。
终止的条件:
1、判断递归的次数是否达到某一限定的值
2、判断运算的结果是否达到某个范围等,根据设计的目的来选择。


21 回调函数,如何通信的?
回调函数,是把函数的地址作为参数传递给另一个函数,将整个函数当作一个对象 ,赋值给调用的函数。


22 def func(a, b=[])这种写法有什么陷阱?
函数的第二个形参默认是个list,当第一次执行的时候,保存了一个列表,第二次第三次执行的时候,
可能还会存在这个列表。这样写会影响以后的计算结果。


23 如何判断一个值是函数还是方法?
def func1()
print("hahahah")
print(type(func1)) #如果这个结果显示是calss 'function', 那么这就是一个函数



24 请编写一个函数实现将 IP 地址转换成一个整数。
'''如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001 12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?


def ip_change(ip):
ip = ip.split('.')
ip_int = ''
for i in ip:
ip_number = bin(int(i))
ip_number = ip_number.lstrip('0b')
lenth = len(ip_number)
ip_number = str("0"*(8-lenth)) + str(ip_number)
ip_int = ip_int + ' ' + ip_number
return print(ip_int)



ip_change('10.158.61.3') # 00001010 10011110 00111101 00000011

print('..000.')
def ip_change_to_int(ip):
ipint = ''
ip = ip.split(' ')
for i in ip:
ip_number = int(i,2)
ipint = ipint + '.'+str(ip_number)
ipint = ipint.strip('.')
return print(ipint)


ip_change_to_int('00001010 10011110 00111101 00000011') # 10.158.61.3

25 补全代码
''' 若要将 N 个 task 分配给 N 个 worker 同时去完成,
每个 worker 分别都可以承 担这 N 个 task,但费用不同.
下面的程序用回溯法计算总费用最小的一种工作分 配方案, 在该方案中,
为每个 worker 分配 1 个 task.程序中,N 个 task 从 0 开 始
顺序编号, N 个 worker 也从 0 开始顺序编号,
主要的变量说明如下:
- ci:将任务 i 分配给 worker j 的费用
- task[i]: 值为 0 表示 task i 未分配, 值为 j 表示 task,i 分配给 worker j
- worker[k] 值为 0 表示未分配 task,值为 1 表示 worker k 已分配 task;
- mincost: 最小总费用
''' # 写个函数接收一个文件夹名称作为参数, 显示文件夹中文件的路径,
以及 其中包含文件夹中文件的路径。

...pass

[面试真题]
1 利用递归的方法,写一个删除文件夹(包含所有子文件和子文件夹)函数


2 如何判断字符串 s 是否为浮点数

print(isinstance(1.23, float)) # True
print(isinstance(123, float)) # False

3 下列哪种函数参数定义不合法? ()
• def myfunc(*args):
• def myfunc(arg1=1)
• def myfunc(*args, a=1)
• def myfunc(a=1,**args)

C

4 请用递归和非递归两种方法实现斐波那契数列。
斐波那契数列指的是这样一个数列 1,1,2,3,5,8,13 这个数列从第 3 项开始,
每一项都等于前两项之和。

# 用递归方式实现fibonacci数列
def fibonacci(x):
if x == 0:
return 21
if x == 1:
return 1
return fibonacci(x - 2) + fibonacci(x - 1)
x = int(input('您要输出多少项的递归数列?'))
print(f'开始打印{x}项递归数列')
for i in range(x):
print(fibonacci(i), end=' ')
print()

# 用循环方式实现fibonacci数列
fibo =[1,1]
for i in range(2, x):
fibo.append(fibo[i-2] + fibo[i-1])
print(fibo)


5 实现一个快速排序
# 快速排序,就是二分法

list1 = [11, 5, 33, 9, 222]

def quick_sort(list1):
if len(list1) >= 2:
mid = list1[len(list1) // 2]
left, right = [], []
list1.remove(mid)
for i in list1:
if i <= mid:
left.append(i)
else:
right.append(i)
return quick_sort(left) + [mid] + quick_sort(right)
return list1


print(quick_sort(list1)) # [5, 9, 11, 33, 222]


6 写下以下两个 print 的结果
程序 1:
a=1
def fun(a):
a=2
fun(a)
print(a) # 1


程序 2:
a=[]
def fun(a):
a.append(1)
fun(a)
print(a) # [1]



7 用程序实现:输入某年某月某日,判断这一天是这一年的第几天?


def day_number(date):
date = date.split("-")
year = int(date[0])
month = int(date[1])
day = int(date[2])
if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:
fabu = 29
else:
fabu = 28
day_m = []
list_month = [31, fabu, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
for i in range(1,month):
if month == 1:
day_m.append(0)
elif month >1:
day_m.append(list_month[i])
print(f'这一天是这一年的第{sum(day_m) + day }天')
return f'这一天是这一年的第{sum(day_m) + day }天'


print(day_number('2022-9-3')) # 这一天是这一年的第245天

标签:练习题,return,函数,ip,print,func,第六章,def
From: https://www.cnblogs.com/leeyong49/p/16654679.html

相关文章