【python】day03 公共方法,推导式,函数,函数的变量作用域、返回值、参数,多函数程序流程,拆包和交换变量,引用,递归函数

目录

01-公共方法

02-课堂练习

03-推导式

04-函数

05-函数的变量作用域

06-多函数程序流程

07-函数的返回值

08-函数的参数

09-拆包和交换变量

10-引用

11-学生信息管理系统(函数版)

12-递归函数

01-公共方法

'''
01-公共方法
    1.运算符
        1.1 +    合并(连起来)         字符串、列表、元组
        1.2 *    复制                 字符串、列表、元组
        1.3 in   存在                 字符串、列表、元组、集合、字典
        1.4 out in 不存在              字符串、列表、元组、集合、字典
    2.内置函数(rlmmde人来命名的)
        1.range(start,end,step)范围函数
        2.len()                计算长度
        3.max                  最大值
        4.min                  最小值
        5.del                  删除
          del()
          del list[]
          list.del()
        6.enumerate()           枚举获取容器下标和元素
    3.类型转换(lstul)
        1.list()                列表
        2.set()                 集合
        3.tuple()               元组
'''
# 1.1 +
# 字符串合并
str1 = "hello"
str2 = "world"
str3 = str1 + str2
print("1.1 字符串合并:",str3)

# 列表合并
list1 = ['张无忌','赵敏']
list2 = ['小昭','周芷若']
list3 = list1 + list2
print("1.1 列表合并:",list3)

# 元组合并
tup1 = ('韦小宝',28)
tup2 = ('令狐冲',28)
tup3 = tup1 + tup2
print("1.1 元组合并:",tup3)

# 1.2 复制 *
# 字符串复制
print("1.2 字符串复制:"*10)

# 列表复制(同一个列表中)
list4 = [12,18,19]*5
print("1.2 列表复制:",list4)

# 元组复制(同一个元组中)
tup4 = ('小龙女',18)*3
print("1.2 元组复制:",tup4)

# 1.3 in  存在
print("1.3 字符串存在:",'e' in str1)
print("1.3 列表存在:", 12 in list4)
print("1.3 元组存在:", '小龙女' in tup4)

# 字典的存在(默认匹配字典中key)
dicts = {'name':'张无忌'}
print("1.3 字典存在:",'name' in dicts)
print("1.3 字典存在:",'张无忌' in dicts)

# 集合的存在
sets = {'张学友',18}
print("1.3 集合存在:",18 in sets)

# 1.4 not in 不存在
print("1.4 字符串不存在:",'e' not in  str1)
print("1.4 列表不存在:",'赵敏' not in list1)
print("1.4 元组不存在:",'韦小宝' not in tup1)
# 字典不存在
print("1.4 字典不存在:",'name' not in dicts)
# 集合不存在
print("1.4 集合不存在:",'张学友' not in sets)


# 2.1 range范围(生成的序列不包含end范围)
# 起始位置<=  <结束位置
for i in range(1,10,1):
    print("第一种方式:",i)

for i in range(1,10,2):
    print("第二种方式:",i)

for i in range(10):
    print("第三种方式:",i)

# 2.2 len()
str1 = "HelloWorld"
print("2.1 len字符串:",len(str1))
lt1 = [18,20,19,30]
print("2.1 len列表:",len(lt1))
tp1 = ('张无忌',18)
print("2.1 len元组:",len(tp1))
st1 = {'赵敏',28}
print("2.1 len集合:",len(st1))
dt1 = {'name':'小龙女','age':18}
print("2.1 len字典:",len(dt1))


# 2.5 del  del()
# del str1
# print("2.2 del字符串:",str1)

# del lt1[0]
# print("2.2 del列表:",lt1)

# 元组不能删除

# del st1
# print("2.2 del集合:",st1)
# del dt1['name']
# print("2.2 del字典:",dt1)


# 2.3 max最大值
print("2.3 max字符串:",max(str1))
print("2.3 max列表:",max(lt1))
# tp1中有字符串和整型
# 注意:tuple中比较的是同一种类型
tp1 = (18,29,7,99)
print("2.3 max元组:",max(tp1))
# 注意:set中比较的是同一种类型
st1 = {19,20,30}
print("2.3 max集合:",max(st1))
# 注意:dict中比较的是key的值
print("2.4 max字典:",max(dt1))

# 2.4 min最小值
print("2.4 min字符串:",min(str1))
print("2.4 min列表:",min(lt1))
print("2.4 min元组:",min(tp1))
print("2.4 min集合:",min(st1))
print("2.4 min字典:",min(dt1))

# 2.6 enumerate(可遍历对象,start=0)枚举
# 注意:start参数用来设置遍历数据的下标起始位置,默认为0
# 遍历的item选项(下标,元素值)
lt = [18,30,40,50,60,70,80]
for i in enumerate(lt):
    print("枚举第一种方式:",i)

# 起始位置从1开始但是总数不变
for ix,num in enumerate(lt,start=1):
    print("枚举第二种方式:%d>>>%d"%(ix,num))



list4 = [77,88,99]
set4 = {101,102,103}
print("列表转换为元组:",tuple(list4))
print("集合转换为元组:",tuple(set4))


tup4 = ('张曼玉',18)
str4 = "HelloWorld"
print("元组转换列表:",list(tup4))
print("集合转换列表:",list(set4))
print("字符串转换列表:",list(str4))

print("列表转集合:",set(list4))
print("元组转集合:",set(tup4))

02-课堂练习

'''
02-课堂练习
    1.使用列表[13,56,78,9,36,99]
        1.1 排序算法  升序和降序各做一个
        1.2 不准使用max() min()
    2.用户输入年月日  20220323
        通过计算  输出该日期是今年的第多少天
        2.1 判断是否是闰年
        2.2 判断用户输入的位数是否正确以及类型
        2.3 判断用户输入年、月、日是否正确
'''
#1
numList=[13,56,78,9,36,99]
numList.sort(key=None,reverse=False)
print("升序:",numList)
numList.sort(key=None,reverse=True)
print("降序:",numList)
'''
1.升序和降序
'''
lt = [13,56,78,9,36,99]
# 升序
# 13,56,78,9,36
for x in range(0,len(lt)-1):
    # 56,78,9,36,99
    for y in range(x,len(lt)):
        # 9 < 78
        if lt[y] < lt[x]:
            temp = lt[x]
            lt[x] = lt[y]
            lt[y] = temp
print("升序结果:",lt)

# 降序
lt = [13,56,78,9,36,99]
for x in range(0,len(lt)-1):
    for y in range(x,len(lt)):
        if lt[y] > lt[x]:
            temp = lt[x]
            lt[x] = lt[y]
            lt[y] = temp
print("降序结果:",lt)

#2
"""
这个我写的不流畅,原因:
    1.字符串切片
        1.1知识点案例是直接用老师的,所以知识点记得不牢
        1.2和列表的split()分割混淆
            字符串切片针对字符串
                形式为 字符串名[start:end:step](左闭右开,若想取到下标2的元素值,右边要写下标3)
            字符串在使用split()后,返回的是列表类型
                形式为 字符串.split(分割字符,分割次数)
    2.对于for循环
        for 循环内是不停重复的,而且步长为1,应该是python没有关键词,所以经常忽视掉内循环操作
    3.range()内放数字
      enumerate()内放列表等
"""
import sys
userdate = input("请输入年月日:")
if userdate.isdigit() and len(userdate)==8:
    sumdays=0
    #字符串切片 左闭右开
    year=int(userdate[0:4])
    month=int(userdate[4:6])
    day=int(userdate[6:8])
    for months in range(1,month):
        if months in [1,3,5,7,8,10,12]:
            sumdays +=31
        elif months in [4,6,9,11]:
            sumdays +=30
        else:
            sumdays +=29 if year%400==0 or (year%4==0 and year%100!=0) else 28
        print("现在是%d月,已过%d天。"%(months,sumdays))
    print("%d是本年的第%d天。"%(int(userdate),sumdays+day))

03-推导式

'''
03-推导式
    快速初始化列表,字典,集合;简化代码
    1.列表:[ xx for xx in range() ]
    2.字典:{xx1:xx2 for ... in ...}
    3.集合:{xx for xx in ...}
'''
#while 循环初始化列表
li=[]
x=0
while x<10:
    li.append(x)
    x+=1
print("while循环初始化列表:",li)
#1.1列表推导式
l1=[ i for i in range(len(li))]
print("列表推导式:",l1)
#1.2列表推导式-range步长
l2=[ i for i in range(0,10,2)]
print("列表推导式-range:",l2)
#1.3列表推导式-if
l3=[ i for i in range(0,10) if i%2==0]
print("列表推导式-if:",l3)
#1.4列表推导式-多重for循环 最好顶多两个
l4=[ (i,j) for i in range(10)  for j in range(10)]


#2.1字典推导式
di1={i:i**2  for i in range(5)}
print("字典推导式:",di1)
#2.2字典推导式-列表合并
dic1=['name','age','sex']
dic2=['lili',32,'girl']
di2={ dic1[i]:dic2[i] for i in range(0,3)}
print("字典推导式-列表合并:",di2)
#2.3字典推导式-for-if语句
dic3={'lili':1,'lulu':2,'lrlr':3,'lele':2}
di3={ key for key,value in dic3.items() if value==2}
print("字典推导式-for-if:",di3)
#2.4集合推导式
se=[2,2,3]
se1={se[i] for i in range(len(se))}
print("集合推导式:",se1)

04-函数

'''
04-函数
    1.作用
        定义一个方法,可以在使用时调用
        简化代码
    2.使用步骤
        先定义后调用
            定义:def 函数名(形参列表):
                函数体【属性,方法】
                返回值
            调用:类对象.函数名()
    3.名词解释
        参数:
            形参:参数列表里的
            实参:传入的数据(引用地址值)
        返回值:
            当返回值时元组时,可以返回多个值
        说明文档:
            函数中添加文档注释,用help(函数名)
    4.高级应用
        嵌套
'''
#1
def d1(d):
    print(d)
for i in range(4):
    d1(i)
#1
def name():
    return 'lili'
print("name:",name())
#1
def add(a,b):
    return a+b
print('a+b=%d',add(1,2))
#1
def names():
    return 'lili',18
print("函数返回值多个:",names())

def sumNum(a,b,c):
    return  a+b+c
result = sumNum(10,20,30)

def avgNum(a,b,c):
    return sumNum(a,b,c)/3
rt = avgNum(10,20,30)
print(rt)
#help
def getMsg():
    """江苏师范大学的文档说明书"""
    print("江苏师范大学")
help(getMsg)
'''
6.函数的嵌套调用
    6.1 函数嵌套调用是否有先定义后使用?    
        可以先使用后定义
        预编译===>python解释器中执行
    6.2 函数调用的时候-函数是否被创建?
        函数调用函数的时候用的是同一个地址值
        注意事项:
            此操作仅限于同一个类中(必须要注意)  
'''

def testB():
    print("B函数被调用-start")
    testA()
    print("testA的id",id(testA()))
    print("B函数被调用-end")
def testA():
    print("A函数被调用-start")
    print("A函数被调用-end")

# 调用testB
testB()
# 测试地址值
print("测试:",id(testB()))
print("测试2:",id(testA()))

05-函数的变量作用域

'''
05-函数的变量作用域
    全局变量:整个程序
    局部变量:函数内
        *全局变量和局部变量重名-->两个表示同一个变量-->地址值不同,值也不同
            注意:函数内修改全局变量,修改不是数据值,而是变量的地址值
            因此重名时,函数内的变量地址值已经变了,自然不同
        *global将局部变全局
            将原有的引用地址值修改成新的变量
'''
# 1.变量的定义
# 全局变量
name = "张学友"

def getMessage():
    # 局部变量
    age = 18
    print(f'姓名:{name},年龄:{age}')

def getMessage2():
    age = 30
    print(f"姓名:{name},年龄:{age}")
getMessage()
getMessage2()

# 2.变量的修改
print("修改之前:",id(name))
def setName():
    # 函数内修改全局变量 重新声明并初始化name
    name = "张曼玉"
    print("修改之后:",id(name))
    print(f"setName===>姓名:{name}")
setName()
print(f"函数外调用:{name}")


# 3.函数中的修改全局变量
print("setName2修改之前:",id(name))
def setName2():
    global name
    name = "张三丰"
    print("setName2修改之中:",id(name))
    print(f'姓名:{name}')
setName2()
print(f"setName2修改后:{name}")
print(f"setName2修改后:",id(name))

06-多函数程序流程

'''
06-多函数程序流程
    一个程序由多个函数组成,并且多个函数共享某些数据
        # 1.共用全局变量
        # 2.返回值作为参数传递
'''

# 1.共用全局变量
age = 19

def eat():
    global  age
    if age == 19:
        print("我可以吃青椒肉丝盖浇饭")
    # 局部修改全局变量
    age = 23

def drink():
    if age > 20:
        print("保温杯内泡枸杞")
    else:
        print("百试百灵灵丹妙药-多喝喝水")

eat()
drink()

# 2.返回值作为参数传递
def testA():
    return "张无忌"
def testB(name):
    print(f"我的姓名是:{name}")
testB(testA())

07-函数的返回值

'''
07-函数的返回值
    1.return可以结束函数,后面的代码不再执行
    2.return可以返回多个变量,返回的数据类型为元组
    3.return可以返回list,dict,tuple等类型
'''
# 1.函数两个return
def getName():
    return "张无忌"
    return "张三丰"
print("我的姓名是:",getName())

# 2.函数return 返回多个变量
def getNum():
    return 1,2
print("我的返回值是:",getNum())

def getList():
    a = 30
    b = 40
    lt = [a,b]
    return lt
print("返回列表:",getList())

08-函数的参数

'''
08-函数的参数
    1.位置传参
        顺序、位置、个数必须一致
    2.关键字传参
        若有位置参数则在前面,关键字参数之间不能在顺序
    3.缺省值参数
        默认为缺省值参数赋值,若传递则使用传递的值
            若不传递则使用缺省值
        注意事项:
            函数的定义和调用时候必须要保证缺省值在最后
    4.不定长参数
        可变参数,使用包裹(关键字传参、位置传参)
        *args:包裹位置传参,可以接收多个参数值
        **kwargs:包裹关键字传参,可以接收多个关键字的设置传参
        以上组包的过程
'''
#1.位置传参
def getStudent1(name,age,sex):
    print(f"name:{name},age:{age},sex:{sex}")
getStudent1('lili',19,'gril')
#2.关键词传参
def getStudent2(name,age,sex):
    print(f"name:{name},age:{age},sex:{sex}")
getStudent2(sex='boy',age=23,name='lulu')
#3.缺省值传参
def getStudent3(name,age,sex='boy'):
    print(f"name:{name},age:{age},sex:{sex}")
getStudent3('lili',23)
#4.不定长传参
def getInfo(*args):
    print(args)
getInfo()
getInfo(12)
getInfo(12,'de')
def getInfo2(**kwargs):
    print(kwargs)
getInfo2(name='lili',age=12,sex='girl')

09-拆包和交换变量

'''
09-拆包和交换变量
    1.拆包-元组
    2.拆包-字典
    3.交换变量
'''
#1.拆包-元组
def gettuple(*args):
    a,b=args
    print(a)
    print(b)
gettuple('lili',18)
#2.拆包-字典
def getdice(**kwargs):
    a,b=kwargs
    print(a)
    print(b)
    print(kwargs[a])
    print(kwargs[b])
getdice(name='lili',age=12)
#3.交换变量
def changeNum1(a,b):
    c=a
    a=b
    b=c
    print(a,b)
changeNum1(10,20)
def changeNum2(a,b):
    a,b=b,a
    print(a,b)
changeNum2(10,20)

10-引用

'''
10-引用
    *id()查看地址值
    *可变类型:地址值不变  值改变【列表、字典、集合】
        &不可变类型:地址值变化  值改变【整型、浮点型、元组、字符串】
    以下解释想看就看,记住**内容就行了。
# python中是使用引用地址值进行传递 id()可以查看是否为同一地址
# id()可以理解为内存中那块标识区域
#
# 可变类型和不可变类型的区分
# 可变类型:地址值不变  值改变
# 不可变类型;地址值变化  值改变
#
# 可变类型(引用地址值不变,修改内部元素值):
#     列表、字典、集合
# 不可变类型(引用地址值改变):
#     整型、浮点型、元组、字符串
'''

# 1.int类型 ===>不可变类型
a = 10
# 将a的引用地址值赋值给b
# b = a
# 将10的引用地址值赋值给b
# b = 10
# 将12的引用地址值赋值给b
b = 12
print("int类型:",a == b)
print("int类型2:",a is b)
print("a的地址值:",id(a))
print("b的地址值:",id(b))

# 2.列表 可变类型 更改内部元素地址值不变
listNum = [1,99,22]
listNum2 = [1,99,22]

print("列表类型:",listNum == listNum2)
print("列表类型2:",listNum is listNum2)
print("listNum的值:",id(listNum))
print("listNum2的值:",id(listNum2))
listNum2.append(88)
print("listNum2-添加后:",id(listNum2))

print("列表中元素值对比1:",listNum[0] == listNum2[0])
print("列表中元素值对比2:",listNum[0] is listNum2[0])
print("列表中元素值对比3:",id(listNum[0]))
print("列表中元素值对比4:",id(listNum2[0]))
print("="*20)

# 3.引用作为实参
def getMsg(a):
    print("修改前的a",a)
    print("修改前的a===>id",id(a))
    a += a
    print("修改后的a",a)
    print("修改后的a===>id",id(a))
# 不可变类型的参数传递
b = 10
getMsg(b)
print("="*30)
lt = [10,20]
getMsg(lt)

11-学生信息管理系统(函数版)

'''
11-学生信息管理系统(函数版)
课堂练习:
    1.添加addStudent 删除delStudent
        查询 queryStudent 修改updateStudent
        程序主函数 smss函数(程序结构)
    2.设置全局变量 students===>list===>dict
    3.用户命令的传参 返回值
    4.使用main函数调用所有的函数
'''
import sys
studentList=[]
operateList=['addStudent','delStudent','updateStudent','queryStudent','exit']
def smss():
    while True:
        for i in range(0,len(operateList)):
            print("%d.%s"%(i+1,operateList[i]))
        num=int(input('请选择您要执行的操作序号:'))
        if num==1:
            addStudent()
        elif num==2:
            delStudent()
        elif num==3:
            updateStudent()
        elif num==4:
            queryStudent()
        elif num==5:
            sys.exit(0)
        else:
            print("wrong!")
def addStudent():
    student=input("请输入您要添加的学生信息,学号、姓名、性别、年龄使用逗号分隔")
    student=student.split(',')
    studentList.append(student)
def delStudent():
    for i in range(0,len(studentList)):
        print("%d.%s"%(i,studentList[i]))
    index=int(input("请输入您要删除的学生下标"))
    del studentList[index]
def updateStudent():
    for i in range(0,len(studentList)):
        print("%d.%s"%(i,studentList[i]))
    index=int(input("请输入您要修改的学生下标"))
    student=input("请输入您要添加的学生信息,学号、姓名、性别、年龄使用逗号分隔")
    student = student.split(',')
    studentList[index]=student
def queryStudent():
    for i in range(0,len(studentList)):
        print("%d.%s"%(i,studentList[i]))
if __name__ == '__main__':
    smss()

12-递归函数

'''
12-递归函数
    *自己调用自己
    *有终止
'''
def addNum(num):
    if num==1:
        return 1
    else :
        return num+addNum(num-1)
# num: 3+2+1
print("3以内的数字累加和:",addNum(3))
print("100以内的数字累加和:",addNum(100))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值