python递归函数基础知识_python基础-基础知识(包括:函数递归等知识)

老男孩 Python 基础知识练习(三)

1、列举布尔值为 False 的值

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

2、写函数:

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

如: def func(start,end):

1 deffunc(x,y):2

3 n =[]4 sum =05 for i inrange(x,y):6 if (i % 3 == 0 and i % 7 ==0):7 sum +=i8 n.append(i)9 print(len(n))10 print(sum)11

12 func(1,100)

执行结果:

1 4

2 210

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

None

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

Break:用于**退出当前循环体**

continue:跳出本次循环,继续执行下次循环

return:程序返回,不再执行下面的代码

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

答:是引用,

ps:

1 deff1(arg):2 print(id(arg))3

4 n=1111111

5 print(id(n))6 f1(n)

执行结果:

1 26219232

2

3 26219232

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

python的三元运算书写格式:

变量名 = 变量1 if 条件判断成立 else 变量2

解释:条件成立 变量名值为变量1 否则为变量2

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

1、书写格式:函数名=lambda 形参:功能 不写函数名也可以

2、应用场景

将简单的函数书写成 匿数名函数,减少代码

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

法1:

1 l1=[11,22,33]2 l2=[22,33,44]3

4 n1=set(l1)5 n2=set(l2)6 print(n1.intersection(n2))

执行结果:

1 {33, 22}

法2:

1 l1=[11,22,33]2 l2=[22,33,44]3 set(11)&set(12)

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

1 defnum(st):2 a =03 b =04 c =05 for i inst:6 if i.isupper(): #判断是否是大小字母

7 a += 1

8 elif i.islower(): #判断是否是小写字母

9 b += 1

10 elif i.isdigit(): #判断是否是数字

11 c += 1

12 returna, b, c,13

14 sf = "sefisehfi294723dASE"

15 cc =num(sf)16 print(cc)

执行结果:

1 (3, 10, 6)

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

位置参数:按形参的位置传入,叫位置参数就是普通参数

关键字参数:传入实参时指定形参的值

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

可变长参数:*args **kwargs,一个只能接收没有位置参数的实参或参入的列表,元组,俩可以接收关键字参数和字典格式。

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

a.

1 deffunc(x,y,z):2 print(x,y,z)3

4 func(1,2,3)

输出结果为:

1 1 2 3

b.

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

输出结果为:

1 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 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 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 1 {} (2, 3)

f.

1 def func(x,*y,**z):2 print(x,y,z)3

4 func(1,name=2,age=3)

输出结果为:

1 1 () {'age': 3, 'name': 2}

g.

1 def func(x,*y,**z):2 print(x,y,z)3

4 func(1,2,3,4,name=2,age=3)

输出结果为:

1 1 (2, 3, 4) {'age': 3, 'name': 2}

h.

1 def func(x=2,*y,**z):2 print(x,y,z)3

4 func(name=2,age=3)

输出结果为:

1 2 () {'age': 3, 'name': 2}

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

a.

1 def func(*y,**z):2 print(y,z)3

4 func(1,2,3,4,5)

输出结果为:

1 (1, 2, 3, 4, 5) {}

b.

1 def func(*y,**z):2 print(y,z)3

4 func([1,2,3,4,5])

输出结果为:

1 ([1, 2, 3, 4, 5],) {}

c.

1 def func(*y,**z):2 print(y,z)3

4 func(*[1,2,3,4,5])

输出结果为:

1 (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 (1, 2, 3, 4, 5) {'age': 19, 'name': 'alex'}

e.

1 def func(x,*z,**y):2 print(x,y,z)3

4 func(1,2,3)

输出结果为:

1 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 (1, 2, 3, 4, 5) {'age': 19, 'name': 'alex'}

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

1 def func1(x=1,*y,**z):2 print(x,y,z)3 return y4 print(x)5

6 deffunc2(arg):7 ret=func1(name=arg)8 print(ret)9

10 result = func2("Fuck")11 print(result)

输出结果为:

1 1 () {'name': 'Fuck'}2 ()3 None

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

1 deffunc(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)

输出结果为:

1 [11, 22, 33, 44, 55]2

3 None

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

1 deff1(arg):2 print(arg+100)3

4 deff2(arg):5 ret=f1(arg+1)6 print(arg)7 print(ret)8

9 ret=f2(7)10 print(ret)

输出结果为:

1 108

2 7

3 None4 None

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

答:区别:在于返回值的不同

python3.x range 不会生成值,只有用的时候才会生成

python2.7.x 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)

输出结果为:

1 oldboy%

b、

1 b="oldboy%d%%"%(12,)2 print(b)

输出结果为:

1 oldboy12%

19、简述对象和类的关系

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

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

1 deffunc(a1):2 return a1 + 100 #func值被系统垃圾回收机制回收。

3

4 func = lambda a1:a1 + 200

def func(a1)

5return a1 + 200 #下面这个func覆盖掉上面那个a1的值=a1+200=210

6 ret = func(10)7 print(ret)

输出结果为:

1 210

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

答:any是任意,而all是全部。

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

执行结果:

1 老男人

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

1 print(bin(12)) #二进制

2 print(oct(12)) #八进制

3 print(hex(12)) #十六进制

执行结果:

1 0b1100 #二进制

2 0o14 #八进制

3 0xc #十六进制

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”

ps1:

1 l1 = ["alex", 22, 33, 44, 55]2 l2 = ["is", 22, 33, 44, 55]3 l3 = ["good", 22, 33, 44, 55]4 l4 = ["guy", 22, 33, 44, 55]5

6 #print(list(zip(l1,l2,l3,l4)))

7 n1 =list(zip(l1,l2,l3,l4))8 n2 =n1[0]9 n3 = '_'.join(n2)10 print(n3)

执行结果:

1 alex_is_good_guy

ps2:

1 print("_".join(list(zip(l1,l2,l3,l4))[0]))

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

1 deff1(arg):2 print(id(arg))3

4 n=1111111

5 print(id(n))6 f1(n)

输出的两个值是否相同:相同

1 执行结果:2 11277024

3

4 11277024

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

a.

1 NAMELIST=["alex","eric"]2

3 deffunc():4 NAMELIST=123

5

6 func()7 print(NAMELIST)

输出结果为:

1 ['alex', 'eric']

b.

1 NAMELIST=["alex","eric"]2

3 deffunc():4 globalNAMELIST5 NAMELIST=123

6

7 func()8 print(NAMELIST)

输出结果为:

1 123

c.

1 NAMELIST=["alex","eric"]2

3 deffunc():4 NAMELIST.append("seven")5

6 func()7 print(NAMELIST)

输出结果为:

1 ['alex', 'eric', 'seven']

d.

1 NAMELIST = ["alex", "eric"]2

3 deffunc():4 NAMELIST = 123

5 globalNAMELIST6

7 func()8 print(NAMELIST)

输出结果为:

1 123

2

3 D:/python/job8/job.py:335: SyntaxWarning: name 'NAMELIST' is assigned to before globaldeclaration4 global NAMELIST

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

a.

1 name = "root"

2 deffunc():3 name = "seven"

4 defouter():5 name = "eric"

6 definner():7 globalname8 name = "蒙逼了吧..."

9 print(name)10 print(name)11

12 ret =func()13 print(ret)14 print(name)

输出结果为:

1 seven2 None3 root

b.

1 name = "root"

2 deffunc():3 name = "seven"

4 defouter():5 name = "eric"

6 definner():7 globalname8 name = "蒙逼了吧..."

9 print(name)10 o =outer()11 print(o)12 print(name)13

14 ret =func()15 print(ret)16 print(name)

输出结果为:

1 eric2 None3 seven4 None5 root

c.

1 name = "root"

2 deffunc():3 name = "seven"

4 defouter():5 name = "eric"

6 definner():7 globalname8 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)

输出结果为:

1 eric2 None3 seven4 None5 蒙逼了吧...

d.

1 name = "root"

2 deffunc():3 name = "seven"

4 defouter():5 name = "eric"

6 definner():7 nonlocal name8 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)

输出结果为:

1 eric2 None3 seven4 None5 root

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

a.

1 name = "苍老师"

2

3 defouter(func):4 name = 'alex'

5 func()6

7 defshow():8 print(name)9 outer(show)

执行结果:

1 苍老师

b.

1 name = "苍老师"

2

3 defouter():4 name = "波多"

5 definner():6 print(name)7 returninner()8

9 ret =outer()10 print(ret)

输出结果为:

1 波多2 None

c.

1 name = "苍老师"

2

3 defouter():4 name = "波多"

5 definner():6 print(name)7 returninner8

9 ret =outer()10 ret()11 print(ret)12 result =ret()13 print(result)

输出结果为:

1 波多2 .inner at 0x01225660> #inner内存地址

3 波多4 None

d.

1 name = "苍老师"

2

3 defouter():4 name = "波多"

5 definner():6 print(name)7 returninner8

9 ret =outer()10 print(ret)11 result =ret()12 print(result)

输出结果为:

1 .inner at 0x01715660>

2 波多3 None

e.

1 name = "苍老师"

2

3 defouter(func):4 definner():5 name = "李杰"

6 func()7 returninner8

9 defshow():10 print(name)11

12 outer(show)()

执行结果:

1 苍老师

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

a.

1 defouter(func,z,y):2 func(z)3

4 defshow(x):5 return x *x6

7 ret = outer(show,9,23)8

9 print(ret)

输出结果为:

1 None

b.

1 defouter(func, z, y):2 returnfunc(z)3 defshow(x):4 return x *x5

6 ret = outer(show,9,23)7 print(ret)

输出结果为:

1 81

c.

1 defouter(func,z,y):2 func(z,y)3

4 f1 = lambda x,y:x+y5 ret = outer(f1,11,23)6 print(ret)

输出结果为:

1 None

d.

1 defouter(func, z, y):2 returnfunc(z, y)3

4 f1 = lambda x,y:x +y5 ret = outer(f1, 11, 23)6 print(ret)

输出结果为:

1 34

32、写输出结果

a.

1 deff5(arg):2 arg.append('偷到 500 万')3

4 deff4(arg):5 arg.append('开第四个门')6 f5(arg)7 arg.append('关第四个门')8

9 deff3(arg):10 arg.append('开第三个门')11 f4(arg)12 arg.append('关第三个门')13

14 deff2(arg):15 arg.append('开第二个门')16 f3(arg)17 arg.append('关第二个门')18

19 deff1(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)

输出结果为:

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

b.

1 deff5(arg):2 arg = arg + 5

3

4 deff4(arg):5 arg = arg + 4

6 f5(arg)7 arg = arg + 4

8

9 deff3(arg):10 arg = arg + 3

11 f4(arg)12 arg = arg + 3

13

14 deff2(arg):15 arg = arg + 2

16 f3(arg)17 arg = arg + 2

18

19 deff1(arg):20 arg = arg + 1

21 f2(arg)22 arg = arg + 1

23

24 num = 1

25 result =f1(num)26 print(num)27 print(result)

输出结果为:

1 1

2 None

c.

1 deff5(arg):2 arg = arg + 5

3 returnarg4

5 deff4(arg):6 arg = arg + 4

7 f5(arg)8 arg = arg + 4

9 returnarg10

11 deff3(arg):12 arg = arg + 3

13 f4(arg)14 arg = arg + 3

15 returnarg16

17 deff2(arg):18 arg = arg + 2

19 f3(arg)20 arg = arg + 2

21 returnarg22

23 deff1(arg):24 arg = arg + 1

25 f2(arg)26 arg = arg + 1

27 returnarg28

29 num = 1

30 result =f1(num)31 print(num)32 print(result)

输出结果为:

1 1

2 3

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

1 def fnuc(x,y=0):2 y += 1

3 if y == 5:4 return x +y5 x +=y6 func(x,y)7 x +=y8 returnx9

10 num = 1

11 result =fnuc(num)12 print(num)13 print(result)

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

ps1:

1 #参数t保存每次计算的结果,n保持递增,然后进行计算

2

3 deffunc(n,t):4 t=t*n5 if n>=7:6 returnt7 n+=1

8 returnfunc(n,t)9

10 print(func(2,1))

执行结果:

1 5040

ps2:

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

执行结果:

1 5040

34、写程序

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

ps1:

1 deff1(args):2 if args>33:3 returnTrue4

5 l1 = [11,22,33,44,55]6 ret =filter(f1,l1)7 print(list(ret))

执行结果:

1 [44, 55]

ps2:

filter+lambda方式

1 l1 = [11,22,33,44,55]2 print(list(filter(lambda x:x>33,l1)))

执行结果:

1 [44, 55]

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

1 l1 = [11,22,33,44,55]2 print(list(filter(lambda x:x<33,l1)))

执行结果

1 [11, 22]

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

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

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

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

35、写程序

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

whih 打开文件执行完毕后自动关闭

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

1 with open("a", "r") as x, open("b","w") as y:2 y.write(x.read())

36、写函数:

如有以下两个列表

l1=[…]

l2=[]

第一个列表中的数字无序不重复排列,第二个列表为空列表

需求:

取出第一个列表的最小值放到第二个列表的首个位置,

取出第一个列表的最小值(仅大于上一次的最小值)放到第二个列表的首个位置,

取出第一个列表的最小值(仅大于上一次的最小值)放到第二个列表的首个位置,

依此类推,从而获取一个有序的列表 l2,并将其返回给函数调用者。

deffunc(l1,l2):

pass

答:

1 l1 = [11,33,44,2,66]2 l2 =[]3 deffoo(x,y):4 for item inrange(len(x)):5 v =min(x)6 y.insert(0,v)7 x.remove(v)8 returny9 print(foo(l1,l2))

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

解题思路:

这题得倒着推。第10天还没吃,就剩1个,说明第9天吃完一半再吃1个还剩1个,假设第9天还没吃之前有桃子p个,可得:p * 1/2 - 1 = 1,可得 p = 4。以此类推,即可手算出。

代码思路为:第10天还没吃之前的桃子数量初始化 p = 1,之后从9至1循环9次,根据上述公式反推为 p = (p+1) * 2 可得第1天还没吃之前的桃子数量。for循环中的print()语句是为了验证推算过程而增加的。

代码如下:

ps:

1 p = 1

2 print('第10天吃之前就剩1个桃子')3 for i in range(9, 0, -1):4 p = (p+1) * 2

5 print('第%s天吃之前还有%s个桃子' %(i, p))6 print('第1天共摘了%s个桃子' % p)

执行结果:

1 第10天吃之前就剩1个桃子2 第9天吃之前还有4个桃子3 第8天吃之前还有10个桃子4 第7天吃之前还有22个桃子5 第6天吃之前还有46个桃子6 第5天吃之前还有94个桃子7 第4天吃之前还有190个桃子8 第3天吃之前还有382个桃子9 第2天吃之前还有766个桃子10 第1天吃之前还有1534个桃子11 第1天共摘了1534个桃子

ps2:

1 s = 1

2 func = lambda x: (x + 1) * 2

3 for i in range(9):4 s =func(s)5 print(s)

ps3:

1 deffunc(x, day):2 day -= 1

3 if day ==0:4 returnx5 x = (1 + x) * 2

6 ret =func(x, day)7 returnret8

9 ret = func(1, 10)10 print(ret)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值