一、流程控制
"""
流程:程序执行的顺序
流程控制:控制程序执行的顺序
流程控制三种形式:
1、顺序控制(从上往下依次执行)
2、条件控制
3、循环控制
"""
1、顺序控制
print ( "打开冰箱" )
print ( "放进大象" )
print ( "关闭冰箱" )
2、条件控制
1>简单条件控制
"""
if 条件:
满足条件执行的代码
else:
条件不成立时执行的代码
print("条件判断结束")
"""
# 如果体温超过37.3,不让进学校
temp= float ( input ( "请输入你的体温:" ) ) #注意:input接收到数据为string类型
print ( type ( temp) ) #<class 'float'>
if temp> 37.3 :
print ( "不可以进学校" )
else :
print ( "可以进入" )
2>多条件控制
"""
if 条件1:
满足条件1执行的代码块1
elif 条件2:
不满足条件1,但是满足条件2 执行的代码块
elif 条件3:
不满足条件1、2,但是满足条件3 执行的代码块
else:
上述均不满足,执行该代码块
"""
#成绩>90 优;80-90 良;70-80 中;<70 勉强
score= int ( input ( "please input your score:" ) )
if score> 90 :
print ( "优" )
elif score> 80 :
print ( "良" )
elif score> 70 :
print ( "中" )
else :
print ( "勉强" )
3>条件嵌套
"""
if 条件1:
执行代码块1
if 条件2:
满足条件1和条件2,执行的代码块
if 条件3:
满足条件1、2、3,执行的代码块
"""
#--------------练习--------------
#进火车站
#1、有没有票
#2、刀的长度<20cm
ticket= float ( input ( "请输入是否有票:" ) )
knife_len= float ( input ( "请输入刀的长度:" ) )
if ticket:
if knife_len< 20 :
print ( "进" )
else :
print ( "不能进" )
3、循环控制:往复执行某段代码
1>while循环
"""
while 条件:
条件满足时执行的代码块
如果条件永远成立,循环变成死循环
"""
money= 0
year= 0
while money< 100000000 :
#学习、工作、赚钱
print ( "第{}年学习、工作、赚钱" . format ( year) )
money+= 300000
year+= 1
#60岁退休
if year== 60 :
break #跳出循环
if year% 12 == 0 :
year += 1
continue #跳出本次循环
print ( "一共需要多少年" , year)
print ( "一共赚到多少钱" , money)
2>for循环
"""
XX是可迭代对象---字符串是可迭代对象
for tmp in XX:
print(tmp)
"""
#range函数--产生结果为可迭代对象
# range(start,stop,step) 生成一组指定范围的数值
# 会取start,不取stop,前闭后开,0--9
# start默认值是0,step默认为1
# 如果只写一个值,表示是stop的值;如果是两个值,是start和stop的值
for tmp in range ( 0 , 10 ) :
print ( tmp, end= ' ' )
# 练习:输出9*9乘法表
for i in range ( 1 , 10 ) :
for j in range ( 1 , i+ 1 ) :
print ( '%d*%d=%d' % ( i, j, i* j) , end= '\t' )
print ( '\n' )
for i in range ( 1 , 10 ) :
for j in range ( i, 10 ) :
print ( "{}*{}={}" . format ( i, j, i* j) , end= '\t' )
print ( '\n' )
二、函数
"""
减少代码的重复
def 函数名([参数1,参数2...]):
函数体(代码段)
[return xxx]
函数:先定义,后调用;不调用,不执行
"""
1、函数声明
def show_sep ( str1) :
print ( str1. center( 60 , '*' ) )
# print('*'*60)
2、函数调用
# show_sep()
show_sep( "开始学习" )
3、函数参数
show_sep( "函数参数" )
def add ( a, b= 0 ) :
print ( "{}和{}相加等于{}" . format ( a, b, a+ b) )
# #位置参数要在默认值参数之前
# def add(a=1,b):
# print("{}和{}相加等于{}".format(a,b,a+b))
1>位置参数,实参和形参一一对应
add( 10 , 20 )
2>关键字参数(在函数调用时设置)
add( b= 20 , a= 10 )
3>默认参数(在函数定义时设置)
add( 10 )
add( 10 , 20 )
4>变长度参数(在函数定义时设置)
def add_multi ( * args) :
print ( type ( args) ) # <class 'tuple'>
sum1= 0
for tmp in args:
sum1+= tmp
print ( tmp, end= ' ' )
print ( "多个数值相加等于" , sum1)
add_multi( 10 , 20 , 30 , 40 )
5>可变长度参数2(在函数定义时设置)
# **kwargs对于函数调用,只能传递关键字参数
# 将多个关键字参数组织成字典的形式
def show_info ( ** kwargs) :
print ( type ( kwargs) ) # <class 'dict'>
print ( kwargs)
for tmp in kwargs:
print ( tmp)
# 只能传关键字参数,不能接收位置参数
show_info( name= "张三" , age= 20 )
# *args 将实参中的位置参数,转换为元组的形式
# **kwargs 将实参中的关键字参数,转换为字典的形式
# 同时存在于形参中,位置参数 默认参数 *args(元组参数) **kwargs(字典参数)的顺序
# 1>位置参数->默认参数 add(a,b=1)√ add(a=1,b)×
# 2>默认参数和*args的先后顺序:默认参数->*args
def add ( * args, a= 10 ) :
print ( a) #10
print ( args) #(10,20,30)
add( 10 , 20 , 30 )
# add(10,20,a=100)
def add ( a= 10 , * args) :
print ( a) #10
print ( args) #(20,30)
add( 10 , 20 , 30 )
# 3>*args和**kwargs的先后关系:*args->**kwargs
def add ( * args, ** kwargs) : # √
print ( kwargs) #
print ( args) #
add( 10 , 20 , 30 , name= "张三" , age= 20 )
# def add(**kwargs,*args): # ×
# print(kwargs) #
# print(args) #
# add(10,20,30,name="张三",age=20)
# 4>位置参数和*args的先后顺序
# 调用时关键字参数的顺序
# 位置参数 -> *args(元组参数) -> 默认参数 -> **kwargs(字典参数)
# def print(self, *args, sep=' ', end='\n', file=None)
4、函数返回值
# 如果函数没有返回值,默认返回None
# 如果返回值有多个,默认会被组织成元组的形式
# 求平均值和总和
def fun ( * args) :
sum1= 0
for tmp in args:
sum1+= tmp
mean1= sum1/ len ( args)
return sum1, mean1
res= fun( 10 , 30 )
print ( res)
5、递归函数
1>阶乘
def jiecheng ( n) :
if n== 1 :
return 1
else :
res= n* jiecheng( n- 1 )
return res
res= jiecheng( 3 )
print ( res)
2>斐波那契数列
def fibo ( n) :
if n== 1 or n== 2 :
return 1
else :
return fibo( n- 1 ) + fibo( n- 2 )
res= fibo( 4 )
print ( res)
三、列表
"""
列表
定义[元素1,元素2,....]
可以修改的有序序列
"""
1、定义一个空列表
# 1>方式1
# list1=[]
# 2>方式2
list1= list ( )
print ( list1) # []
print ( type ( list1) ) # <class 'list'>
# 列表里边可以有不同类型的值
list2= [ "张三" , "里斯" , 12 , 34 , 0.08 , True ]
print ( list2)
2、列表的加法和乘法
list3= [ "hah" , "heih" ]
print ( list2+ list3)
print ( list3* 2 )
print ( [ None ] * 2 ) # 生成指定长度的列表
3、增删改查
1>查-----和字符串完全一致,下标法和切片法
# 列表里边可以有不同类型的值
list2= [ "张三" , "里斯" , 12 , 34 , 0.08 , True ]
# 访问12
print ( list2[ 2 ] )
# 访问12和34
print ( list2[ 2 : 4 ] )
# 访问 张三和里斯
print ( list2[ 0 : 2 ] )
# 使用下标法会降低维度;切片法不会降低维度
print ( list2[ 0 ] ) # 张三
print ( list2[ 0 : 1 ] ) # ['张三']
2>增
"""
1>用+ 的形式
2>append:会将追加的内容(数据)作为一个整体,添加到列表中
作为列表中的一个新元素
3>extend:将增加的数据拆分成单个元素,添加到列表中;
必须传递可迭代对象(是否可以提取元素)
4>insert:在指定的位置增加元素
"""
list3= [ "haha" , "xixi" ]
list3. append( "hehe" )
list3. append( [ "pp" , "qq" ] )
list3. append( 1 )
print ( list3) # ['haha', 'xixi', 'hehe', ['pp', 'qq'],1]
list3= [ "haha" , "xixi" ]
list3. extend( [ "pp" , "qq" ] )
# list3.extend(1) 不可以
print ( list3) # ['haha', 'xixi', 'pp', 'qq']
list3= [ "haha" , "xixi" ]
list3. insert( 1 , "hehe" )
list3. insert( 100 , [ "pp" , "qq" ] ) #超出索引范围,插到最后
# list3.insert(-1,["aa","bb"])
print ( list3)
3>改:可以针对某个索引的元素,也可以修改某一段
list3= [ "haha" , "xixi" , 1 , 2 , 3 , 4 ]
# list3[0]="aa"
list3[ 0 ] = [ "aa" , "bb" ]
list3[ - 4 : ] = [ 11 , 12 ]
print ( list3)
4>删
"""
1>pop:返回最后一个元素,并且将最后一个元素从列表中删除
2>remove:删除指定元素
3>del
"""
list4= [ "张三" , "里斯" , 12 , 34 , 0.08 , True ]
list4. pop( )
list4. remove( 12 )
del list4[ 0 ] # 删除一个元素
# del list4 # 删除整个列表
print ( list4)
5>查找
list4= [ "张三" , "里斯" , 12 , 34 , 0.08 , True ]
ind= list4. index( "里斯" )
print ( list4[ ind: ] )
6>count:统计某元素在列表中存在的次数
7>翻转
list4= [ "张三" , "里斯" , 12 , 34 , 0.08 , True ]
list4. reverse( )
print ( list4)
8>排序
# 排序关键字key 按照什么方式进行排序
# list5=[-1,-3,-2,"12"]
list5= [ - 1 , - 3 , - 2 , 100 ]
# list5.sort(key=str) # 默认升序排序
# list5.sort(key=int,reverse=True) # reverse=True降序排序
list5. sort( key= abs ) #按绝对值进行升序排序
print ( list5)