一、函数练习
#过程:就是没有返回值的函数
def test01():
msg = 'hello The little green frog'
print(msg)
def test02():
msg = 'hello WuDaLang'
print(msg)
return msg
def test03():
msg = 'hello WuDaLang'
print(msg)
return msg, (1,2,3), {"name":"ly"}
t1 = test01()
t2 = test02()
t3 = test03()
print(t1)
print(t2)
print(t3) #实际上只返回一个值,就一个元组
"""
总结:
返回值数=0;返回None
返回值数=1;返回object
返回值数>1;返回tuple
"""
def calc(x,y): # 形参
res = x**y
return res
c = calc(2,3) #实参
print(c)
a = 10
b = 10
d= calc(a,b)
print(d)
def test(x,y,z):
print(x)
print(y)
print(z)
test(1,2,3) #位置参数
test(x=1,y=3,z=2) #关键字参数
test(1,3,z=2) #位置参数必须在关键字参数左边
def handle(x,type='mysql'):
print(x)
print(type)
handle('hello')
handle('hello',type='sqllite')
handle('hello','sqllite')
#参数组**字典 *列表
def test(x,*args):
print(x)
print(args)
print(args[0])
test(1,2,3,4,5,6)
test(1,{'name':'alex'})
test(1,[x,y,z])
test(1,*[x,y,z]) #遍历一遍
def test(x,**kwargs):
print(x)
print(kwargs)
test(1,y=2,z=3) # 字典
# 一起使用,*args必须在前面,不能违背大原则
def test(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
test(1,2,k=2)
def test(x,*args,**kwargs):
print(x)
print(args,args[-1])
print(kwargs,kwargs.get('y')) # 字典获取元素
test(1,1,2,1,1,11,x=1,y=2,z=3) # 报错
test(1,1,1,2,4,11,y=2,z=3)
test(1,*[1,2,3],**{'y':1})
二、递归的艺术
1. 经典的阶乘问题
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
return n * factorial(n-1)
-
魔法解析:阶乘就是所有小于及等于该数的正整数的乘积。这个函数说:“我算n的阶乘,就是n乘以(n-1)的阶乘。”直到n=0,它才说:“哦,1!”这就是递归的终止条件。
2. 斐波那契数列
def fibonacci(n):
if n <= 0:
print("输入错误")
elif n == 1:
return 0
elif n == 2:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
-
解密:斐波那契数列,每一项都是前两项之和,看起来是不是很像“我叫你,你叫他,我们三个一起玩”?
3. 汉诺塔挑战
def hanoi(n, source, target, auxiliary):
if n == 1:
print(f"将盘子从 {source} 移到 {target}")
else:
hanoi(n-1, source, auxiliary, target)
print(f"将盘子从 {source} 移到 {target}")
hanoi(n-1, auxiliary, target, source)
-
游戏规则:汉诺塔是个古老的游戏,用递归解决,就像是指挥小精灵按步骤搬家,一步步解决大问题。
4. 计算列表长度
def list_length(lst):
if lst == []:
return 0
else:
return 1 + list_length(lst[1:])
-
小技巧:空列表的长度是0,其他的就加上第一个元素后剩余部分的长度。简单吧?
5. 检查回文词Palindrome
def is_palindrome(s):
if len(s) < 2 or s[0] == s[-1]:
return len(s) == 1 or is_palindrome(s[1:-1])
else:
return False
-
镜像效应:这个词正读反读都一样?递归帮你一探究竟,逐层剥开字符的外衣。