我的博客第八篇
集合的运算
。& 交集的运算
s1 = {1,2,3,4}
s2 = {3,4,5,6}
r = s1 & s2
print(r)
#结果
{3, 4}
。| 并集运算 #合并所有不重复的数据
s1 = {1,2,3,4}
s2 = {3,4,5,6}
r = s1 | s2
print(r)
#结果
{1, 2, 3, 4, 5, 6}
。- 差级运算
s1 = {1,2,3,4}
s2 = {3,4,5,6}
r = s1 - s2
print(r)
#结果
{1, 2}
r = s2 - s1
#结果
{5,6}
。^ 亦或集 #就是集合里面不想交的部分
r = s1 ^ s2
print(r)
#结果
{1, 2, 5, 6}
。<= 检查一个集合是否是另一个集合的子集
s1 = {1,2,3,4,5,6}
s2 = {1,2,3,4,5,6}
r = s1 <= s2
#结果
True
。< 检查一个集合是否是另一个集合的真子集
s1 = {1,2,3,4,5,6}
s2 = {1,2,3,4,5,6}
r = s1 < s2
print(r)
#结果
False
。>=检查一个集合是否是另一个集合的超集
s1 = {1,2,3,4,5,6}
s2 = {1,2,3,4,5,6}
r = s1 >= s2
print(r)
#结果
True
。 >检查一个集合是否是另一个集合的真超集
s1 = {1,2,3,4,5,6}
s2 = {1,2,3,4,5,6}
r = s1 > s2
print(r)
#结果
False
函数
1.函数简介
。函数也是⼀个对象
。函数⽤来保存⼀些可执⾏的代码,并且可以在需要时,对这些语句进⾏多次调用
。函数中保存的代码不会立即执行,需要调用的时候代码才会执行
#语法:
def 函数名([形参1,形参2,形参3....]):
代码块
。fn是函数名,也是函数对象。 fn()这是调用函数对象
def fn(): #fn就是个自定义函数
print('这是我的第一个函数')
fn() #相当于加了一个入口调用这个函数
#结果
这是我的第一个函数
注意:
函数名必须符合标识符的规范(可以包含字⺟、数字、下划线但是不能以数字开头)
print是函数对象 print()是调⽤函数
2.函数的参数
。形参(形式参数) :在定义函数的时候,可以再函数后面的括号里定义数量不等的形参,形参就是形式上的参数,多个参数之间必须用逗号隔开(形参就是没有给赋值的参数)
。实参(实际参数):实参就是会赋值给对应的形参的参数,有几个形参就要传几个实参
def fn(a,b): #a,b 传入的就是形参
print(a + b)
fn(1,2) # 1,2 传入的就是实参
#结果
3
3.函数的传递方式
。参数可以指定一个默认值。指定了默认值以后,如果⽤户传递了参数则默认值不会⽣效。如果⽤户没有传递,则默认值就会⽣效
def fn(a,b,c=20):
print('a = ', a)
print('b = ', b)
print('c = ', c)
fn(1,2,3)
#结果
a = 1
b = 2
c = 3
def fn(a,b,c=20):
print('a = ', a)
print('b = ', b)
print('c = ', c)
fn(1,2)
#结果
a = 1
b = 2
c = 20
。位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
def fn(a,b,c):
print('a = ', a)
print('b = ', b)
print('c = ', c)
fn(1,2,3)
#结果
a = 1
b = 2
c = 3
。关键字参数:关键字参数可以不按照形参定义的顺序去传递,⽽根据参数名进⾏传递
def fn(a,b,c):
print('a = ', a)
print('b = ', b)
print('c = ', c)
fn(a=80,c=88,b=90)
#结果
a = 80
b = 90
c = 88
。混合使⽤位置参数和关键字参数的时候必须将位置参数写到关键字参数前⾯
def fn(a,b,c):
print('a = ', a)
print('b = ', b)
print('c = ', c)
fn(1,c=88,b=90)
#结果
a = 1
b = 90
c = 88
#例如:requests.get(url,headers=headers)
4.参数的类型
。实参可以传递任意类型的参数
def fn1():
print('我是fn1')
def fn(a):
print('a = ', a)
a = 1
a = [1,2,3]
a = {1:'1'}
a = True
a = fn1()
fn(a)
def fn1():
print('我是fn1')
def fn(a):
print('a = ', a)
#a = 1
#a = [1,2,3]
#a = {1:'1'}
#a = True
a = fn1()
fn(a)
#结果
我是fn1
a = None
def fn(a):
a = 20
print('a = ', a)
b = 10 #a = b b赋值给a
fn(b)
print(b)
#结果
a = 20
10
5.不定长参数
。使用*a接受不定长参数,a的对应数据是一个元组
def fn(*a):
print('a = ', a)
fn(1,2,3)
#结果
a = (1, 2, 3)
def fn(*args):
r = 0
print('a = ', args)
for i in args:
r += i
print(r)
fn(1,2,3)
#结果
a = (1, 2, 3)
6
。a可以和其他的参数配合使用,但是注意a要放到后面,且带星号的参数只能有一个
def fn(b,*a):
print('a = ', a)
print(b)
fn(1,2,3)
。*a只能接受位置参数
def fn(*a):
print('a = ',a)
fn(a=1,b=2,c=3) #如果参数为关键字传参用一个星号会报错
#结果 报错
。**a来接受关键字参数,a的对应数据是一个字典
def fn(**a):
print('a = ',a)
fn(a=1,b=2,c=3)
#结果
a = {'a': 1, 'b': 2, 'c': 3}
def fn(**kwargs):
print('a = ',kwargs)
fn(a=1,b=2,c=3
#结果
a = {'a': 1, 'b': 2, 'c': 3}
。总结:不定长参数: *args kwargs *args要放到kwargs前面 :
def fn(*args,**kwargs):
print('a = ',args)
print('a = ',kwargs)
fn(1,2,3,a=1,b=2,c=3)
#结果
a = (1, 2, 3)
a = {'a': 1, 'b': 2, 'c': 3}
6.参数的拆包
。元组拆包
def fn(a,b,c):
print('a = ', a)
print('b = ', b)
print('c = ', c)
tuple1 = (1,2,3)
fn(*tuple1) #要加星号拆包
#结果
a = 1
b = 2
c = 3
。字典拆包 只能拿到一个值
def fn(a,b,c):
print('a = ', a)
print('b = ', b)
print('c = ', c)
dict1 = {'a':1,'b':2,'c':3}
fn(**dict1) #要加2个星号拆包
#结果
a = 1
b = 2
c = 3
7.可变和不可变类型
。可变类型: value可以变,但是id不会变。
。不可变类型:一般value不可变,但是value一旦改变,id也会改变,相当于重新赋值。
#可变对象(可变类型):list, dict, set
#不可变对象(不可变类型):str tuple
str1 = 'abcd'
print(id(str1))
print(id(str1.upper()))
#结果
2292453410608
2292453411784
作业
1.打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
。控制姓名长度为6-20
。电话号码长度11
。性别只能允许输入男或女
。每一样信息不允许为空
方法1:
print('''
******************************************
打印名片
******************************************
''')
#自定义名片函数
def Card(name,phone,sex):
print('''************个人名片*************
姓名:{}
电话:{}
性别:{}
*****************************
'''.format(name,phone,sex))
#请输入姓名,设置条件:
while True:
name = input('请输入姓名(不允许为空,长度6-20):')
if 6 <= len(name) <=20:
break
else:
print('您的输入有误,请重新输入:')
#输入电话,设置条件
while True:
phone = input('请输入您的电话号码(不允许为空,长度11):')
if len(phone) == 11:
break
else:
print('您输入的电话不正确,请重新输入')
#输入性别,设置条件
while True:
sex = input('请输入您的性别(不能为空,只允许输入男或女):')
if sex == '男' or sex == '女':
break
else:
print('您输入的性别有误,请重新输入:')
Card(name,phone,sex)
方法2:
def card():
while True:
name = input('请输入你的姓名,长度为6-20')
if 6 < len(name) < 20:
break
else:
print('错误,自己检查好了在输入!!')
while True:
tel = input('请输入你的电话号码,长度为11')
if len(tel) == 11:
if tel.isdigit():
break
else:
print('错了,自己检查清楚再输入!!')
while True:
sex = input('请输入你的性别:')
if sex == '男' or sex == '女':
break
else:
print('难道你是阴阳人?')
return name,tel,sex #如果返回多个值的时候 print(r) 返回的会是一个元组
r = card()
print(r) ##如果返回多个值的时候 print(r) 返回的会是一个元组
print('姓名:%s, 电话:%s, 性别:%s' % r)
2.使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21…即:起始两项均为1,此后的项分别为前两项之和
方法1:
s1 = [1,1]
#定义函数
def Shulie(a):
i = 2
while i <20:
r = s1[i-1]+s1[i-2]
s1.append(r)
i += 1
Shulie(s1)
print(s1)
print(len(s1))
方法2:
def sequence(num):
a = b = 1
list1 = []
for i in range(num):
if i == 0:
list1.append(a)
if i > 0:
a,b = b,b+a
list1.append(a)
return list1
r = sequence(20)
print(r)
3.编写一段代码,定义一个函数求1-100之间所有整数的和,并调用改函数打印结果
方法1:
def Num():
i = 1
x = i
while i < 100:
x = x + i + 1
i += 1
print('1-100之间的整数和是:{}'.format(x))
Num()
方法2:
def sum1():
n = 0
for i in range(1,101):
n += i
return n
r = sum1()
print(r)
方法3:
def fn(n):
for i in range(1,n):
n += i
return n
r = fn(100)
print(r)