#集合 set 与列表很相似
#集合子还能存储不可变对象,存储的对象是无序的 不能出现重复元素
#集合表示 {} 字典也是{}表示
#创建空集合,需要用到set()
s =set()#用set()才可以创建集合
print(type(s))
# 集合存储对象是无序的
s2 ={
6,8}
print(s2,type(s2))
# 集合不能出现重复元素
s3 ={
1,2,3,4,1,2,3,4}
print(s3)
# 可以通过该不能出现重复元素的特性,来实现数据去重效果
lst1 =[1,2,3,3,4]
s4 =set(lst1)
print(s4)
# 集合 字典去区分:有:就是字典,没有:就是集合
dict1 ={
'1':2}
print(set(dict1))#只是去key不能去vaule
# len() 获取集合元素数量
s =set()
s ={
1,2,3,4,5,6}
print(len(s))
# add()在集合中添加元素
s =set()
s.add(1)
s.add(2)
s.add(3)
print(s)
# update() 将一个集合的元素添加到另一集合中
s1 ={
1,2,3}
s2 ={
4,5}
s1.update(s2)
print(s1)
# pop()随机删除集合中的元素,一般删除最开始的元素
s1.pop()
s1.pop()#逐个打一次就删一次
print(s1)
# remove()删除集合中制定元素
s1.remove(1)
print(s1)
# clear()清空集合
s1.clear()
print(s1)
s =set()
s1={
1,2,3,7,8}
s2={
4,5,6,7,8}
# & 交集运算
s3 =s1 & s2
print(s3)
# | 并集运算
s4 =s1 | s2
print(s4)
# - 差集运算
s5 =s1 -s2
print(s5)#只能减有的,没有的不能减
# ^ 亦或集
s6 =s1^s2
print(s6)
# 可变类型:列表,字典,集合 里面的元素改变了,但是他的id还是不会变的
# 不可变类型: int float 字符串 元组 里面的元素改变了,id也会改变
# 储存的是id,type,value,
str1 ='abc'
str2 =str1.upper()
print(str2,id(str1))##通过这样s2来改变str1,但是也没有改变str1
#字符串不可变
str2=str1.replace('a','b')
print(str2,id(str2))
# str1和str2id变了
lst1=[1,2,3,4]
print(id(lst1))
lst1.remove(4)#id没变
print(id(lst1))
# 函数
# 函数可以用来保存一些可以执行的代码,在需要的时候进行多次使用
# 函数保存的代码不会立即执行,需要调用函数的时候代码才会执行
# def 函数名() 就是定义函数
# 调用函数
# 函数对象() 例如: fun() fun是函数对象,fun()是调用函数
# fun()是调用函数!!!!!
def fun():
print('hanshu')#此时不会出现,因为没调用只是定义了了
fun()#调用了,就出现了
# 需求:定义一个函数求和
# 在函数中定义形参,相当于在函数内声明了变量
def fun(a,b):#a,b是形参 就是形式上的参数,如果定义了形参,就必须在调用的时候传递实参
print(a +b)
fun(1,2)#a,b是形参,1,2是实参
# 有定义了形参必须有相应的实参
# 传参1.
def fun(a,b,c=20):
#参数可以在设置形参的时候,直接给他设置一个默认值如果实参没有传递参数,那么直接直接使用默认值,如果实参传递了,使用实参
print(a)
print(b)
print(c)
fun(1,2)
# 传参1.
def fun(a,b,c=20):
#参数可以在设置形参的时候,直接给他设置一个默认值如果实参没有传递参数,那么直接直接使用默认值,如果实参传递了,使用实参
print(a)
print(b)
print(c)
fun(1,2,3)
# 传参2.位置传参 就是将对应位置上的实参赋予对应位置的形参
def fun(a,b,c):
print(a)
print(b)
print(c)
fun(1,2,3)
# 关键字传参 可以不按照定义的顺序去进行参数传递,根据参数名与传递实参
def fun(a,b,c):
print(a)
print(b)
print(c)
fun(b =1, a =2, c =3)
# 混合使用 混合使用的时候,位置传参必须放到关键字传参的前面
def fun(a,b,c):
print(a)
print(b)
print(c)
fun(2,c =3,b =1)
# 需求 求任意个数和 *
def fn(*a):
print(*a)
fn(1,2,3)
# 需求 求任意个数和 *
def fn(b,*a):
r =0
# print(a)#a是元组()
for i in a:
r +=i
print(r)
fn(1,2,3,4,5)#b =1 ,*a接收2,3,4,5
# 不定长参数要放到位置参数的后面,放到关键字参数的前面
def fn(b,*a,c):
r =0
# print(a)#a是元组()
for i in a:
r +=i
print(r)
fn(1,2,3,4,c =5)#b =1 ,*a接收2,3,4,5
def fn(y,a,**f):#y是位置参数,a是关键字参数
# **是关键字传参 **不定长参数要放到位置参数和关键字参数后面
# print(a)#a是元组()
print(f)
fn(1,a=2,c=3,d=4,e=5)#b =1 ,*a接收2,3,4,5
# 不定长参数在一个函数中不管是*(不定长位置参数)还是**(不定长关键字参数)都只能存在一个,而且*要在**之前
# 任意类型发的参数都可以传递
# (*args,**kwargs)前面是位置不定长参数,后面是不定长关键字参数
def fun1():
pass
def fun(a):
print(a)
b =12
b ='12'
b =True
b =fun1#输出的是函数对象的地址
fun(b)
# 任意类型发的参数都可以传递
def fun2(a):#把
a =10#运行的时候a又等于10,所以 a=10,b=1
print(a)
b =1
fun2(b)#这一句把b赋值a了,所以=b=1
print(b)#因为a没有调用,b没改
def fun3(a):#a =b=[1,2,3
a[2] =10#a=[1,2,10]
print(a)
b =[1,2,3]
fun3(b)
print(b)#因为a调用了,b'也变了
# 参数的拆包
def fun(a,b,c):
print(a)
print(b)
print(c)
t =(4,5,6)
fun(*t)
def fun(a,b,c):
print(a)
print(b)
print(c)
t =(4,5,6)
t={
'a':1,'b':2,"c":3}
fun(**t)#取的是value值
fun(*t)#取得时key
# 复习
# 函数可以将可以执行的代码储存在内部在需要的时候使用
# 函数保存的代码不会立即执行,调用时才会用fun()
# 语法
# def 函数(形参):
# pass
# 函数(实参)
# 函数参数
# 形参:形式上的参数,实参:就是实际的参数
# 形参定义 相当于在函数内部声明变量
# 实参定义:有多少个形参就要传递多少个实参,不能多不能少
# 函数传递
# 1.设置默认值 设置了默认值,可以不用在传递,但是传递了实参,就用实参
# 2.位置传参
# 3.关键字传参
# 不定长参数:(*args【位置传参】,**kwargs【关键字传参】)万能传参
# 混合使用:位置传参在关键字传参前面,*args在位置传参后面,关键字传参前面,**kwargs在最后
# 位置 *args 关键字 **kwargs
# 参数拆包
# 元组:
# def fun(a,b,c):
# pass
# t =(1,2,3)
# fun(*t)
# 字典
# def fun(a,b,c)
# pass
# t ={'a':1,'b':2,'c':3}
# fun(**t)
a = {
"name":"123","data":{
"result":[{
"src":"python1"},{
"src":"python2"},{
"src":"python3"}]}}
print(a['data']['result'][0]['src'])
a=[11,22,33,44,55,66,77,88,99,90]
lst1 =[]
lst2 =[]
dict1 ={
}
for i in a:
if i>66:
lst1.append(i)
elif i<66:
lst2.append(i)
print(lst1)
print(lst2)
dict1['key1']=lst1
dict1['key2']=lst2
print(dict1)
• 控制姓名长度为6-20
• 电话号码长度11
• 性别只能允许输入男或女
• 每一样信息不允许为空
# 作业
# 1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
# • 控制姓名长度为6-20
# • 电话号码长度11
# • 性别只能允许输入男或女
# • 每一样信息不允许为空
def fn_name(xingming):
if len(xingming) == 0:#要写在前面,不然被后面的<6 or>20覆盖了
print('姓名不能为空,请重新输入')
elif len(xingming) < 6 or len(xingming) > 20:\
print('姓名长度为6-20,请重新输入')
else:
return xingming#这里还没有调用fn_name,到最后面调用fn_mingpian时用xingming这个实参时赋值了fn_name时才被调用
def fn_number(telnum):
if not telnum.isdigit():
print('电话号码只能为11为数字,请重新输入')
elif len(telnum) ==0:
print('电话号码不能为空,请重新输入')
elif len(telnum) !=11:
print('电话号码只能为11为数字,请重新输入')
else:
return telnum
def fn_xingbie(sex):
if len(sex) ==0:
print('请重新输入,性别为(男或者女):')
elif sex == 'male' or sex =='female':
return sex
else:
print('请重新输入,性别为(男或者女):')
def fn_mingpian(xingming,tel,sex):
mingpian ={
'姓名':xingming,
'电话':tel,
'xingbie':sex}
print('姓名为:%s'%mingpian['姓名'])
print('电话为:%s'%mingpian['电话'])
print('性别为:%s'%mingpian['xingbie'])
while True:#死循环,直到break结束
while True:#姓名的死循环
xingming =fn_name(input('请输入姓名,长度为6-20位:'))
if xingming ==None:#跳过本次循环,仍继续循环直到正确输入break
continue
else:
break
while True:
tel =fn_number(input('请输入电话号码:'))
if tel ==None:
continue
else:
break
while True:
sex =fn_xingbie(input('请输入性别(male或者female):'))
if sex ==None:
continue
else:
break
fn_mingpian(xingming,tel,sex)
break
# # 使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21...即: 起始两项均为1,此后的项分别为前两项之和
def fun(a,b):#定义函数斐波那契
shuzi =[a,b]#数的列表
changdu =len(shuzi)#数的个数
while changdu <20:#前20个
shuzi.append(shuzi[changdu-1]+shuzi[changdu-2])#倒1倒2相加 变量[len(变量)-1] 代表len(变量)从右到左的顺序的第一个(倒数第一)
changdu +=1#一直加到20位
return shuzi
c =1
d =1
print(fun(c,d))
# 编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
def fun_qiuhe(a,b):#a是起始值,b是结束值
he =0
for i in range(a,b+1):#遍历一遍a到b,range(start,end)end的值取不到取到的只是start到end-1的值
he +=i
return he
print(fun_qiuhe(a =1,b =100))