python_递归函数及模块(math、random)

1.怎么理解递归函数?
2.什么是栈帧空间?
3.怎么理解递归函数的执行过程?
4.如何使用递归函数实现求任意数n的阶乘?
5.如何使用递归函数实现斐波那契?
6.什么是尾递归?
7.math模块的几种常用方法都是什么效果?
ceil()\floor()\pow()\sqrt()\fabs()\modf()\copysign()\fsum()\pi
8.random模块的几种常用方法都是什么效果?
random()\randrange()\randint()\uniform()\choice()\sample()\shuffle()
9.如何自定义choice函数?
10.如何实现随机验证码小程序?
1.递归函数就是自己调用自己的函数,有去有回。
2.函数运行时在内存里开辟的空间,递归过程就是开辟和释放栈帧空间的过程,但空间始终有限,注意溢出。
3.类似于俄罗斯套娃吧,想在最里层的套娃拿东西的过程。
4.实现阶乘:
def jiecheng(n):
	if n <= 1:
		return 1
	return n * jiecheng(n-1)
res = jiecheng(5)
print(res)
5.实现斐波那契:
def feb(n):
	if n ==1 or n == 2:
		return 1
	# 当前值n = 上一个值(n-1) + 上上个值(n-2)
	return feb(n-1) + feb(n-2)
res = feb(5)
print(res)
6.尾递归就是无论调用多少次函数,都只占一份空间,感觉像是把那些小套娃都放在大套娃的壳里,始终只占一份空间。
7.math模块
#ceil()  向上取整操作 *****
res = math.ceil(3.01)
print(res)
#floor() 向下取整操作 *****
res = math.floor(4.1)
print(res)
#pow()  计算一个数值的N次方(结果为浮点数) (对比内置pow)
res = math.pow(2,3)
print(res)
#sqrt() 开平方运算(结果浮点数)
res = math.sqrt(9)
print(res)
#fabs() 计算一个数值的绝对值 (结果浮点数) (对比内置abs)
res = math.fabs(-9)
print(res)
#modf() 将一个数值拆分为整数和小数两部分组成元组
res = math.modf(-19.8)
print(res)
#copysign()  将参数第二个数值的正负号拷贝给第一个 (返回一个小数)
res = math.copysign(-90,-18)
print(res)# -90.0
#fsum() 将一个容器数据中的数据进行求和运算 (结果浮点数)(对比内置sum)
lst = [1,2,3,4]
res = math.fsum(lst)
print(res)
#圆周率常数 pi
res = math.pi
print(res)
8.random模块
#random() 获取随机0-1之间的小数(左闭右开) 0 <= x < 1
res = random.random()
print(res)
#randrange() 随机获取指定范围内的整数(包含开始值,不包含结束值,间隔值) 同range *****
# 一个参数的用法
res = random.randrange(3) # 0 1
# 二个参数的用法
res = random.randrange(3,7) # 3 4 5 6
# 三个参数的用法
res = random.randrange(3,10,2) # 3 5 7 9 
print(res)
#randint() 随机产生指定范围内的随机整数(可以取到最大值)[ 了解 ]
res = random.randint(1,3) # 1 2 3
print(res)
#uniform() 获取指定范围内的随机小数(左闭右开) 1<=x < 3的小数
res = random.uniform(1,3) 
res = random.uniform(3,1)
print(res)
#choice()  随机获取序列中的值(多选一)
lst = ["周杰伦","蔡徐坤","易烊千玺","神秘boy"]
res = random.choice(lst)
print(res)
# 自定义choice函数
def mychoice(lst):
	# 随机获取0 ~ 3的下标
	num = random.randrange(len(lst))
	# 通过下标来获取列表的值
	return lst[num]
print(mychoice(lst))
# lambda表达式
mychoice = lambda lst : lst[random.randrange(len(lst))]
print(mychoice(lst))

#sample()  随机获取序列中的值(多选多) [返回列表]
lst = ["周杰伦","蔡徐坤","易烊千玺","神秘boy"]
res = random.sample(lst,2)
print(res)
#shuffle() 随机打乱序列中的值(直接打乱原序列)
lst = ["周杰伦","蔡徐坤","易烊千玺","神秘boy"]
random.shuffle(lst)
print(lst)
10.随机验证码小程序
def yanzhengma():
	strvar = ""
	for i in range(4):
		# 大写字母 A-Z 65~90
		b_word = chr(  random.randrange(65,91)  )
		# 小写字母 a-z 97~122
		s_word = chr(  random.randrange(97,123) )
		# 数字 0 ~ 9
		num = str( random.randrange(10) )
		# 把可能的字符都放在列表里 , 一次抽一个
		lst = [b_word,s_word,num]
		strvar += random.choice(lst)
	return strvar
res = yanzhengma()
print(res)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值