博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
020--python函数基础知识考试(包括:函数_递归等知识)
阅读量:5084 次
发布时间:2019-06-13

本文共 11876 字,大约阅读时间需要 39 分钟。

 1、列举布尔值为 False 的值

 空,None,0, False, '', [], {}, ()

 

2、写函数:

 根据范围获取其中 3 和 7 整除的所有数的和,并返回调用者:符合条件的数字个数以及符合条件的数字的总和
 如: def func(start,end):

def func(start,end,count=0):    s=0    for i in range(start,end+1):        if i%3==0 and i%7==0:            s+=i            count+=1    print('总和:%s 个数:%s'%(s,count))func(1,100)#输出 总和:210 个数:4

 

3、函数的默认返回值是什么?

  None

 

4、简述break/continue/return的区别

  break        结束当前层循环

  continue    结束本次循环

  return       作为函数运行结束标志

 

5、函数传递参数时,是引用还是复制值?并证明提示:可以用 id 进行判断

  传引用

def fib(n):    print('函数中',id(n))n=5print('函数外',id(n))fib(5)输出:函数外 1729344704函数中 1729344704

  

 6、简述三元运算书写格式以及应用场景

 c = a if a<b else b

 

 7、简述 lambda 表达式书写格式以及应用场景

  lambda n:n**2  适用于逻辑运算简单的函数

 

 8、使用 set 集合获取两个列表l1=[11,22,33],l2=[22,33,44]中相同的元素集合

  n1=set(l1) n2=set(l2)  res=n1.intersation(n2)

 

 9、定义函数统计一个字符串中大写字母、小写字母、数字的个数,并以字典为结果返回给调用者

 

def fib(stre):    count1,count2,count3=0,0,0    for i in stre:        if i.isupper():            count1+=1        if i.islower():            count2+=1        if i.isdigit():            count3+=1    return ({'大写字母':count1,'小写字母':count2,'数字':count3})res = fib('ASDfg1')print(res)

  

 10、简述函数的位置参数、关键字参数、默认参数、可变长参数的特点以及注意事项

  位置参数:按照对应形参位置一一对应传入参数,普通参数

  关键字参数:允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

  默认参数:形参直接指定默认值的参数

  可变长参数:传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个

 

11、检查代码,如有错误请改正(禁止运行代码):

    a

1 def func(x,y,z):2     print(x,y,z)3 4 func(1,2,3)
#输出(1 2 3)

 b

1 def func(x,z,y=5):    #有赋值的参数,传入的参数必须在右边,否则会报错2     print(x,y,z)3 func(1,3,3)
#输出(1 3 3)

 c

1 def func(x,y,*z):2     print(x,y,z)3 4 func(1,2,3,4,5,6)
#输出 (1 2 (3,4,5,6))

  d

1 def func(x,y,*z):2     print(x,y,z)3 4 func(1,2,3,4,5,6,6)
#输出(1 2 (3,4,5,6,6))

 e

1 def func(x,*z,**y):2     print(x,y,z)3 4 func(1,2,3)
#输出(1 {} (2,3))

 f

1 def func(x,*y,**z):2     print(x,y,z)3 4 func(1,name=2,age=3)
#输出(1 () {'name':2,'age':3})

  g

1 def func(x,*y,**z):2     print(x,y,z)3 4 func(1,2,3,4,name=2,age=3)
#输出(1 (2,3,4) {'name':2,'age':3})

  h

1 def func(x=2,*y,**z):2     print(x,y,z)3 4 func(name=2,age=3)
#输出(2 () {'name':2,'age':3})

 

13、书写输出结果(禁止运行代码):

     a 

1 def func(*y,**z):2     print(y,z)3 4 func(1,2,3,4,5)
#输出((1,2,3,4,5) {})

  b

1 def func(*y,**z):2     print(y,z)3 4 func([1,2,3,4,5])
#输出(([1,2,3,4,5],) {})

  c

1 def func(*y,**z):2     print(y,z)3 4 func(*[1,2,3,4,5])
#输出 ((1,2,3,4,5) {})

 d

1 def func(*y,**z):2     print(y,z)3 4 func(*[1,2,3,4,5],name="alex",age=19)
#输出((1,2,3,4,5) {'name':'alex','age':19})

  e

1 def func(x,*z,**y):2     print(x,y,z)3 4 func(1,2,3)
#输出 (1 {} (2,3))

  f

1 def func(*y,**z):2     print(y,z)3 4 func(*[1,2,3,4,5],**{"name":"alex","age":19})
#输出 ((1,2,3,4,5) {'name':'alex','age':19})

 14、书写执行结果(禁止运行代码)

1 def func1(x=1,*y,**z): 2     print(x,y,z) 3     return y 4     print(x) 5  6 def func2(arg): 7     ret=func1(name=arg) 8     print(ret) 9 10 result = func2("Fuck")11 print(result)
#输出 1 () {'name':'Fuck'} () None

 15、书写执行结果(禁止运行代码)

1 def func(arg):2     arg.append(55)3 4 li=[11,22,33,44]5 func(li)6 print(li)7 li=func(li)8 print(li) #输出 [11,22,33,44,55] None

 

16、书写执行结果(禁止运行代码)

1 def f1(arg): 2     print(arg+100) 3  4 def f2(arg): 5     ret=f1(arg+1) 6     print(arg) 7     print(ret) 8  9 ret=f2(7)10 print(ret) #输出 108 7 None None

 

17、简述 Python3 中的 range 函数和 Python2.7 中的 range 函数有什么区别?

   返回值的不同: python3中range不会马上生成值,用的时候才生成    python2中range会直接生成一个列表返回

 区别示例:

 python2.x中的range返回的是一个列表

1 >>> range(1,10)  #打印出1-10的数字,python默认从0开始2 [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 python3.x中的range返回的是一个迭代值

 #错误的方法

1 >>> range(1,10)2 range(1, 10)

 #正确的方法,要想打印出列表,需要加list

1 >>> list(range(1,10))2 [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 18、书写执行结果(禁止运行代码)

 a、

1 a="oldboy%"2 print(a) #输出 oldboy%

b、

1 b="oldboy%d%%"%(12,)2 print(b) #输出 oldboy12%

 

 19、简述对象和类的关系

 如果值是某个类型,那么这个值是类的对象

 

 20、书写执行结果(禁止运行代码)

1 def func(a1):2     return a1 + 100   #func值被系统垃圾回收机制回收。3 4 func = lambda a1:a1 + 200   def func(a1)   5      return a1 + 200    #下面这个func覆盖掉上面那个a1的值=a1+200=210
6 ret = func(10) 7 print(ret) #输出 210

 

 21、内置函数 all 和 any 的区别

 all   : 当传入空可迭代对象时返回True,当可迭代对象中有任意一个不为True,则返回False

 any : 当传入空可迭代对象时返回False,当可迭代对象中有任意一个不为False,则返回True

 

22、简述文件打开模式'r'和'rb'的区别

 'r':只读模式打开,默认utf-8格式

 'rb':以字节的形式打开文件

 

 23、将字符串"老男人"转换成 UTF-8 编码的字节类型

1 name = "老男人"2 #print(bytes(name, encoding='utf-8'))3 print(bytes(name, encoding='utf-8').decode('utf-8'))

 

 24、利用内置函数将十进制数字12,分别转换成二进制、八进制、十六进制表示的字符串

1 print(bin(12))   #二进制2 print(oct(12))   #八进制3 print(hex(12))   #十六进制

 

 25、简述内置函数 globals()、locals()作用

 globals()  获取所有的全局变量

 locals()    获取所有局部变量

 

 26、利用内置函数 zip(),实现功能

 l1=["alex",22,33,44,55]

 l2=["is",22,33,44,55]
 l3=["good",22,33,44,55]
 l4=["guy",22,33,44,55]

 请获取字符串s="alex_is_good_guy"

res = list(zip(l1,l2,l3,l4))s='_'.join(res[0]

  

 27、判断输出结果是否相同?并可得到什么结论?

1 def f1(arg):2     print(id(arg))3 4 n=11111115 print(id(n))6 f1(n)

 输出的两个值是否相同:相同  对于传参数的时候传值还是传引用?python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。这种方式  相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一  个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

 

 28、书写执行结果(禁止运行代码)

 a.

1 NAMELIST=["alex","eric"]2 3 def func():4     NAMELIST=1235 6 func()7 print(NAMELIST) #输出
["alex","eric"]

 

b.

1 NAMELIST=["alex","eric"]2 3 def func():4     global NAMELIST5     NAMELIST=1236 7 func()8 print(NAMELIST) #输出 123

 

 c.

1 NAMELIST=["alex","eric"]2 3 def func():4     NAMELIST.append("seven")5 6 func()7 print(NAMELIST) #输出
["alex","eric","seven"]

 

d

1 NAMELIST = ["alex", "eric"]2 3 def func():4     NAMELIST = 1235     global NAMELIST6 7 func()8 print(NAMELIST)

输出结果为:报错 SyntaxError: name 'NAMELIST' is assigned to before global declaration

 

29、书写执行结果(禁止运行代码)

a.

1 name = "root" 2 def func(): 3     name = "seven" 4     def outer(): 5         name = "eric" 6         def inner(): 7             global name 8             name = "蒙逼了吧..." 9         print(name)10     print(name)11 12 ret = func()13 print(ret)14 print(name)

输出结果为:

seven

None

root

 

b.

1 name = "root" 2 def func(): 3     name = "seven" 4     def outer(): 5         name = "eric" 6         def inner(): 7             global name 8             name = "蒙逼了吧..." 9         print(name)10     o = outer()11     print(o)12     print(name)13 14 ret = func()15 print(ret)16 print(name)

输出结果为:

eric

None

seven

None

root

 

c.

1 name = "root" 2 def func(): 3     name = "seven" 4     def outer(): 5         name = "eric" 6         def inner(): 7             global name 8             name = "蒙逼了吧..." 9         print(name)10         inner()11     o = outer()12     print(o)13     print(name)14 15 ret = func()16 print(ret)17 print(name)

输出结果为:

eric

None

seven

None

蒙逼了吧...

 

d.

1 name = "root" 2 def func(): 3     name = "seven" 4     def outer(): 5         name = "eric" 6         def inner(): 7             nonlocal name 8             name = "蒙逼了吧..." 9         print(name)10         inner()11     o = outer()12     print(o)13     print(name)14 15 ret = func()16 print(ret)17 print(name)

输出结果为:

eric

None

seven

None

root

 

30、书写执行结果并解释每一步操作

a.

1 name = "苍老师"2 3 def outer(func):4     name = 'alex'5     func()6 7 def show():8     print(name)9 outer(show)

执行结果:

苍老师

 

b.

1 name = "苍老师" 2  3 def outer(): 4     name = "波多" 5     def inner(): 6         print(name) 7     return inner() 8  9 ret = outer()10 print(ret)

输出结果为:

波多

None

 

c.

1 name = "苍老师" 2  3 def outer(): 4     name = "波多" 5     def inner(): 6         print(name) 7     return inner 8  9 ret = outer()10 ret()11 print(ret)12 result = ret()13 print(result)

输出结果为:

波多

<function outer.<locals>.inner at 0x01225660> #inner内存地址

波多

None

 

d.

1 name = "苍老师" 2  3 def outer(): 4     name = "波多" 5     def inner(): 6         print(name) 7     return inner 8  9 ret = outer()10 print(ret)11 result = ret()12 print(result)

输出结果为:

<function outer.<locals>.inner at 0x01225660> #inner内存地址

波多

None

 

e.

1 name = "苍老师" 2  3 def outer(func): 4     def inner(): 5         name = "李杰" 6         func() 7     return inner 8  9 def show():10     print(name)11 12 outer(show)()

执行结果:

苍老师

 

31、书写执行结果并解释每一步操作

a.

1 def outer(func,z,y):2     func(z)3 4 def show(x):5     return x * x6 7 ret = outer(show,9,23)8 9 print(ret)

输出结果为:

None

 

b.

1 def outer(func, z, y):2     return func(z)3 def show(x):4     return x * x5 6 ret = outer(show,9,23)7 print(ret)

输出结果为:

81

 

c.

1 def outer(func,z,y):2     func(z,y)3 4 f1 = lambda x,y:x+y5 ret = outer(f1,11,23)6 print(ret)

输出结果为:

None

 

d.

1 def outer(func, z, y):2     return func(z, y)3 4 f1 = lambda x,y:x + y5 ret = outer(f1, 11, 23)6 print(ret)

输出结果为:

34

 

32、写输出结果

a.

1 def f5(arg): 2     arg.append('偷到 500 万') 3  4 def f4(arg): 5     arg.append('开第四个门') 6     f5(arg) 7     arg.append('关第四个门') 8  9 def f3(arg):10     arg.append('开第三个门')11     f4(arg)12     arg.append('关第三个门')13 14 def f2(arg):15     arg.append('开第二个门')16     f3(arg)17     arg.append('关第二个门')18 19 def f1(arg):20     arg.append('开一个门')21     f2(arg)22     arg.append('关一个门')23 24 user_list = []25 result = f1(user_list)26 print(user_list)27 print(result)

输出结果为:

['开一个门', '开第二个门', '开第三个门', '开第四个门', '偷到 500 万', '关第四个门', '关第三个门', '关第二个门', '关一个门']

None

 

b.

1 def f5(arg): 2     arg = arg + 5 3  4 def f4(arg): 5     arg = arg + 4 6     f5(arg) 7     arg = arg + 4 8  9 def f3(arg):10     arg = arg + 311     f4(arg)12     arg = arg + 313 14 def f2(arg):15     arg = arg + 216     f3(arg)17     arg = arg + 218 19 def f1(arg):20     arg = arg + 121     f2(arg)22     arg = arg + 123 24 num = 125 result = f1(num)26 print(num)27 print(result)

输出结果为:

1

None

 

c.

1 def f5(arg): 2     arg = arg + 5 3     return arg 4  5 def f4(arg): 6     arg = arg + 4 7     f5(arg) 8     arg = arg + 4 9     return arg10 11 def f3(arg):12     arg = arg + 313     f4(arg)14     arg = arg + 315     return arg16 17 def f2(arg):18     arg = arg + 219     f3(arg)20     arg = arg + 221     return arg22 23 def f1(arg):24     arg = arg + 125     f2(arg)26     arg = arg + 127     return arg28 29 num = 130 result = f1(num)31 print(num)32 print(result)

输出结果为:

1

3

 

d、利用递归实现32 题中c题的功能

1 def fnuc(x,y=0): 2     y += 1 3     if y == 5: 4         return x + y 5     x += y 6     func(x,y) 7     x += y 8     return x 9 10 num = 111 result = fnuc(num)12 print(num)13 print(result)

 

 33、利用递归实现1*2*3*4*5*6*7

def fib(n):    if n==1:        return 1    return n*fib(n-1)res = fib(7)print(res)

  

from functools import reduceprint(reduce(lambda x,y:x*y,[x for x in range(1,8)]))

  

 

34、写程序

a.利用filter、自定义函数获取 l1 中元素大于 33 的所有元素l1=[11,22,33,44,55]

l1=[11,22,33,44,55]def fib(n):    l = []    if n>33:        l.append(n)    return lres = list(filter(fib,l1))print(res)内置函数filter和lambdares = list(filter(lambda n:n>33,l1))print(res)

  

b.利用filter、lambda 表达式获取 l1 中元素小于 33 的所有元素l1=[11,22,33,44,55]

l1=[11,22,33,44,55]res = list(filter(lambda n:n<33,l1))print(res)

  

c.利用map、自定义函数将所有是奇数的元素加 100

l1=[11,22,33,44,55]def fib(n):    if n%2!=0:        n+=100    return nres = list(map(fib,l1))print(res)

  

d.利用map、lambda 表达式将所有是偶数的元素加 100

l1=[11,22,33,44,55]

 

35、写程序

a.文件操作时 with 的作用?

在操作文件结束后自动关闭

 

b.写程序:利用 with 实现同时打开两个文件(一读,一写,并将读取的内容写入到写入模式的文件中)

with open('a.txt','r',encoding='utf-8') as file_a,open('b.txt','w',encoding='utf-8') as file_b:    file_b.write(file_a.read())

  

36、写函数:

如有以下两个列表
l1=[...]
l2=[]
第一个列表中的数字无序不重复排列,第二个列表为空列表
需求:
取出第一个列表的最小值放到第二个列表的首个位置,
取出第一个列表的最小值(仅大于上一次的最小值)放到第二个列表的首个位置,
取出第一个列表的最小值(仅大于上一次的最小值)放到第二个列表的首个位置,
...
依此类推,从而获取一个有序的列表 l2,并将其返回给函数调用者。

deffunc(l1,l2):

pass

l1 = [50,70,30,80,75]l2 = []def deffunc(n1,n2):    while True:        if l1:            res=min(n1)            n1.remove(res)            n2.insert(0,res)        else:break    return n2res = deffunc(l1,l2)print(res)

  

37、猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾又多吃了一个。以后每天都吃前一天剩下的一半再加一个。到第 10 天刚好剩一个。问猴子第一天摘了多少个桃子?

p = 1print('第10天吃之前就剩1个桃子')for i in range(9, 0, -1):    p = (p+1) * 2    print('第%s天吃之前还有%s个桃子' % (i, p))print('第1天共摘了%s个桃子' % p)输出:第10天吃之前就剩1个桃子第9天吃之前还有4个桃子第8天吃之前还有10个桃子第7天吃之前还有22个桃子第6天吃之前还有46个桃子第5天吃之前还有94个桃子第4天吃之前还有190个桃子第3天吃之前还有382个桃子第2天吃之前还有766个桃子第1天吃之前还有1534个桃子第1天共摘了1534个桃子s = 1func = lambda x: (x + 1) * 2for i in range(9):    s = func(s)print(s)输出:1534

  

 

转载于:https://www.cnblogs.com/guotianbao/p/6795284.html

你可能感兴趣的文章
PLMN和PSTN
查看>>
Android绘制基础及手写绘制实例
查看>>
学习笔记 java多线程(四)线程间协作
查看>>
[转]单点登录原理与简单实现
查看>>
NABCD分析
查看>>
实验4
查看>>
初次使用Windbg检查C#程序内存
查看>>
前端开发时经常会被浏览器缓存搞得头大,apache设置一下就好了
查看>>
【HighCharts系列教程】五、版权属性——Credits
查看>>
Java去掉Html标签的方法
查看>>
MyEclipse破解详谈
查看>>
Linux学习笔记之一————什么是Linux及其应用领域
查看>>
H3C 配置帧中继交换
查看>>
HDFS概念名称节点和数据节点-名称节点
查看>>
lspci - 列出所有PCI设备
查看>>
strings - 显示文件中的可打印字符
查看>>
android onClick onTouch事件
查看>>
android Activity launch mode 一个实例 singleTask
查看>>
调用淘宝订单接口想到的一个问题
查看>>
map的使用方法
查看>>