pathon笔记-0426

函数:

定义函数

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

猜你喜欢

转载自blog.csdn.net/jiameheng/article/details/89605121