函数:
定义函数
def qiuhe(a,b): #qiuhe函数名,a,b形参
c = a + b
return c
print(qiuhe(1,2)) #1,2实参
return(),执行后退出整个函数
a = 5
def qiuhe1(a):
return 5 + a
a = 6
def qiuhe2(a):
return 5 + a
a = 7
def qiuhe3(a):
return 5 + a
print(qiuhe1(a)) #12
print(qiuhe2(a)) #12
print(qiuhe3(a)) #12
参数
位置参数:位置必须一一对应
def dengji(a,b,c):
print("我是",a) #张三
print("年龄",b) #18
print("性别",c) #男
dengji("张三",18,"男")
关键字参数:赋值给每个形参,位置不需要一一对应
def dengji(name,age,sex):
print("我是",name) #张三
print("年龄",age) #18
print("性别",sex) #男
dengji(age = 18,sex = "男",name = "张三")
位置,关键字参数,同时使用时,位置参数必须在关键字参数前面
def qiuhe(a,b):
c = a + b
return c
x = qiuhe(1,b = 2)
print(x) #3
y = qiuhe(a = 1,2)
print(y) #SyntaxError: positional argument follows keyword argument
默认参数:给关键字参数指定一个特定值,要放在所有参数的最后面
def dengji(name,age,sex = "男"): #默认sex = "男"
print(name,age,sex)
dengji("张三",18) #张三 18 男
dengji("李四",17,"女") #李四 17 女
dengji("王五",15) #王五 15 男
可变参数:
加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
def kb(a,b,*c):
print(a)
print(b)
for i in c:
print(i,end = "")#1,2,3456
kb(1,2,3,4,5,6)
*能打散有序序列
a = [1,2,3]
b = (4,5,6)
c = "abc"
print(*a) #1 2 3
print(*b) #4 5 6
print(*c) #a b c
加了两个星号 ** 的参数会以字典的形式导入。
def dengji(a,**b):
print(a,b)
dengji(1,name = "张三",age = 18,sex = "男") #1 {'name': '张三', 'age': 18, 'sex': '男'}
dengji(2,name = "李四",age = 16,sex = "女") #2 {'name': '李四', 'age': 16, 'sex': '女'}
dengji(3) #3 {}
**能打散字典
def dengji(name,age):
print(name,age)
a = {"name": "张三", "age": 16}
dengji(**a)
def kb(a,*b,c = 19,**d):
print(a,b,c,d)
kb(1,2,3,4,5,6,7,8,9,10) #1 (2, 3, 4, 5, 6, 7, 8, 9, 10) 19 {}
kb(1,2,c = 9,name = "abc") #1 (2,) 9 {'name': 'abc'}
return语句
return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。
return可以出现在函数的任何位置,只要执行一次,就退出函数
def qiuhe(a,b):
c = a + b
return c
print(qiuhe(10, 20))
不带参数值的return语句返回None。
def jisuan(a,b):
c = a + b
print(jisuan(1,2)) #None
a = [1,2,3,4]
print(a.remove(4)) #None ,remove()没有返回值,返回none
返回多个值;多个值则返回元组
def jisuan(a,b):
c = a + b
d = a - b
e = a * b
f = a/b
return a,b,c,d
a,b,c,d = jisuan(1,2)
print(a,b,c,d) #1 2 3 -1
x = jisuan(3,4)
print(x) #(3, 4, 7, -1)
a = 1,2,3
print(a) #(1, 2, 3)
a = 3
b = 4
x = (b,a)
print(x)
在函数里调用其他函数:
def jisuan(a,b):
c = a + b
return c
def jisuan1(a,b,c):
return a - b,jisuan(a,b)*c #在这调用了函数jisuan(a,b)
a = jisuan1(1,2,3)
print(a) #(-1, 9)
递归函数,在函数里调用自己的函数,叫递归函数:
def jiecheng(n):
if n == 1:
return 1
else:
return n * jiecheng(n - 1)
print(jiecheng(5)) #120
分别用循环和函数,求以下数列的第n代时,有几只兔子:
斐波那契数列:1,1,2,3,5,8,13,21,34,55,89…
方法一:
n = int(input("请输入查找第几代:"))
i = 0
while i < n:
i += 1
if i == 1 or i == 2:
num1 = 1
num = 1
else:
num1,num = num,num + num1
print("第{}代有{}只兔子".format(i,num))
方法二:
n = int(input("请输入查找第几代:"))
num,num1= 0,0
for i in range(1,n+1):
if i == 1 or i == 2:
num,num1= 1,1
else:
num1,num = num,num + num1
print("第{}代有{}只兔子".format(i,num))
方法三:
def fbnq(n):
i = 0
while i < n:
i += 1
if i == 1 or i == 2:
num1 = 1
num = 1
else:
num1,num = num,num + num1
print("第{}代有{}只兔子".format(i,num))
fbnq(10)
方法四:
def fbnq(n):
for i in range(1,n+1):
if i == 1 or i == 2:
num,num1= 1,1
else:
num1,num = num,num + num1
print("第{}代有{}只兔子".format(i,num))
fbnq(10)
分别用循环和函数
有m个桃子,猴子吃桃,每天吃剩余总数的一半,问第N天之后还剩多少桃子:
方法一:
num = int(input("请输入桃子总数:"))
day = int(input("请输入查看第几天:"))
i = 0
while i < day:
i += 1
num = num//2
print("第{}天剩余桃子{}个".format(i,num))
方法二:
num = int(input("请输入桃子总数:"))
day = int(input("请输入查看第几天:"))
for i in range(1,day+1):
num = num // 2
print("第{}天剩余桃子{}个".format(i,num))
方法三:
def chitao(num,day):
i = 0
while i < day:
i += 1
num = num//2
print("第{}天剩余桃子{}个".format(i,num))
chitao(100,1) #第6天剩余桃子1个
方法四:
def chitao(num,day):
for i in range(1,day+1):
num = num // 2
print("第{}天剩余桃子{}个".format(i,num))
chitao(100,6) #第6天剩余桃子1个
分别用循环和函数
有一球,从h高度掉落,每次掉落反弹高度的一半,求第n次弹起到最高点时,在空中运动的总长度:
方法一:
height = float(input("请输入起始高度:"))
times = int(input("请输入查看第几次:"))
distance = 0
i = 0
while i < times:
i += 1
distance += height + height/2
height = height / 2
print("第{}次反弹到最高点时运动总长{}米".format(i,distance))
方法二:
height = float(input("请输入起始高度:"))
times = int(input("请输入查看第几次:"))
distance = 0
for i in range(1,times+1):
distance += height + height / 2
height = height / 2
print("第{}次反弹到最高点时运动总长{}米".format(i,distance))
方法三:
def fantan(height,times):
distance = 0
i = 0
while i < times:
i += 1
distance += height + height/2
height = height / 2
print("第{}次反弹到最高点时运动总长{}米".format(i,distance))
fantan(100,2) #第2次反弹到最高点时运动总长225.0米
方法四
def fantan(height,times):
distance = 0
for i in range(1,times+1):
distance += height + height / 2
height = height / 2
print("第{}次反弹到最高点时运动总长{}米".format(i,distance))
fantan(100,2) #第2次反弹到最高点时运动总长225.0米
分别用循环和函数
有一蜗牛在井底,井深20米,蜗牛白天向上爬3米,晚上掉落1米,哪天爬出井
方法一:
height = float(input("请输入井深:"))
up = float(input("请输入白天向上爬几米:"))
down = float(input("请输入晚上向下降几米:"))
distance = 0
day = 1
while True:
distance += up
if distance >= height:
break
distance -= down
day += 1
print("第{}天爬出井".format(day))
方法二:
def pa(height,up,down,day = 1):
distance = 0
while True:
distance += up
if distance >= height:
break
distance -= down
day += 1
print("第{}天爬出井".format(day))
pa(20,3,1) #第10天爬出井
字典的增删改查
a={
"001":{"name":"张三",'age':18,"sex":"男"},
"002":{"name":"李四",'age':28,"sex":"女"},
"003":{"name":"王五",'age':17,"sex":"男"},
"004":{"name":"赵六",'age':15,"sex":"女"},
}
while True:
num = input("请输入操作编号:1增,2删,3改,4查:")
if num == "1":#增
id = input("请输入要增加的学号:")
if id in a.keys():
print("学号重复,请重新输入:")
continue
else:
data = {}
data["name"] = input("请输入姓名:")
data["age"] = int(input("请输入年龄:"))
data["sex"] = input("请输入性别:")
a[id] = data
print(a)
elif num == "2":#删
id = input("请输入要删除的学号:")
if id not in a.keys():
print("查无此号,请重新输入:")
continue
else:
print("删除{}".format(a[id]))
del a[id]
elif num == "3":#改
id = input("请输入要修改的学号:")
if id not in a.keys():
print("查无此号,请重新输入:")
continue
else:
gai = input("请输入要修改的项目:")
if gai == "name":
a[id][gai] = input("请输入姓名:")
elif gai == "age":
a[id][gai] = int(input("请输入年龄:"))
elif gai == "sex":
a[id][gai] = input("请输入性别:")
print(a[id])
elif num == "4":#查
id = input("请输入要删除的学号:")
if id not in a.keys():
print("查无此号,请重新输入:")
continue
else:
print(a[id])
break
作业
练习传递参数
1、写一个函数实现斐波那契数列(1,1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377…)
要求:接收一个参数,返回一个存着等量值的列表
def fbnq(times):
quantity = 1
i = 1
list = []
while i <= times:
if i == 1 or i == 2:
quantity1,quantity = 1,1
list.append(quantity)
else:
quantity1,quantity=quantity,quantity1 + quantity
list.append(quantity)
i += 1
return list
print(fbnq(14)) #[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
2.计算任意多个数字的和
需求
(1).定义一个函数 sum_numbers,可以接收的 任意多个整数
(2).功能要求:将传递的 所有数字累加 并且返回累加结果
def sum_numbers(*n):
sum = 0
for i in n:
sum += i
return sum
print(sum_numbers(1,2,3,4,5,6,7,8,9,10)) #55
递归函数练习
3.使用递归,计算 1 + 2 + … num 的结果
def leijia(num):
if num == 1:
return 1
return num + leijia(num - 1)
print(leijia(100))