Python集合的运算 函数基础

  • 1.集合的运算
  • 2.函数的简介
  • 3.函数的参数
  • 形参和实参
  • 4.参数的传递方式
  • 5.实参的类型
  • 6.不定长参数
  • 7.参数的拆包
  • 8.可变和不可变
  • 9.打印名片程序
  • 10.求前20个斐波那契数列
  • 11.函数求1-100之间的所有整数的和


1.集合的运算

集合的运算

&

交集运算

|

并集运算

-

差集运算

^

异或运算

<=

判断子集

<

判断真子集

>=

判断超集

>

判断真超集

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
# 交集运算 &    
r = s1 & s2   # {3, 4}       
print(r) 	


# | 并集运算
r = s1 | s2   # {1, 2, 3, 4, 5, 6}
print(r)

 
# - 差集运算
r = s1 - s2   # {1, 2}    
r = s2 - s1   # {5, 6}
print(r)

# ^ 亦或集  就是集合里面不相交的部分
r = s1 ^ s2   #  {1, 2, 5, 6}
print(r)

2.函数的简介

1 语法
2 def 函数名([形参1,形参2,形参3....]):
3 代码块
  • 函数也是一个对象。
  • 用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
  • 函数中保存的代码不会立即执行,需要调用的时候代码才会执行
    函数名必须符合标识符的规范(可以包含字⺟、数字、下划线但是不能以数字开头)
  • print是函数对象 print()是调⽤函数
def fn():
    print('这是我的第一个函数')
fn()	#这是我的第一个函数

3.函数的参数

形参和实参

  • 参数: 在定义函数的时候,可以在函数后面的括号里定义数量不等的形参,形参就是形式上的参数,多个参数之间必须用逗号隔开(形参就是没有给赋值的参数)
  • 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
  • 实参(实际参数)指定了形参,那么在调⽤函数时必须传递实参,实参将会赋值
    给对应的形参,简单来说有⼏个形参就要有⼏个实参

4.参数的传递方式

  • 定义形参时,可以为形参指定默认值。指定了默认值以后,如果⽤户传递了参数则默认值不会⽣效。如果⽤户没有传递,则默认值就会⽣效
  • 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
  • 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,⽽根据参数名
    进⾏传递
  • 混合使⽤位置参数和关键字参数的时候必须将位置参数写到关键字参数前⾯
# 参数可以制定一个默认值
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(1, b=2, c=3)
					#
					a =  1
					b =  2
					c =  3
requests.get(headers=headers, 'www.baidu.com')
# SyntaxError: positional argument follows keyword argument

requests.get('www.baidu.com', headers=headers)

5.实参的类型

  • 实参可以传递任意类型的参数

6.不定长参数

  • 定义函数时,可以在形参前⾯加⼀个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到⼀个元组中
  • 带*号的形参只能有⼀个,可以和其他参数配合使⽤
  • *形参只能接受位置参数,不能接受关键字参数
  • **形参可以接收其他的关键字参数,它会将这些参数统⼀保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
  • **形参只有⼀个,并且必须写在所有参数的后⾯
def fn(*args, **kwargs):
    print('a = ', kwargs)
    print('a = ', args)
    r = 0
    for i in args:
        r += i
    print(r)
fn(1, 2, 3, a=1, b=2, c=3)
			# 
			a =  {'a': 1, 'b': 2, 'c': 3}
			a =  (1, 2, 3)
			6

d = dict(a=1, b=2)
print(type(d))	
			#<class 'dict'>

7.参数的拆包

  • 传递实参时,也可以在序列类型的参数前添加星号,这样它会⾃动的将序列
    中元素依次作为参数传递
  • 要求序列中的元素的个数必须和形参的个数⼀致
def fn(a, b, c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)

tuple1 = (1, 2, 3)
d = {'a': 1, 'b': 2, 'c': 3}
fn(tuple1[0], tuple1[1], tuple1[2])
												#  a =  1
												   b =  2
												   c =  3
fn(**d)
												#  a =  1
												   b =  2
												   c =  3

8.可变和不可变

# 可变对象(可变类型): list, dict, set  value 改变了,id不会改变
# 不可变对象(不可变类型): str, tuple   value改变了,id也会改变
str1 = 'abcd'
print(id(str1))
print(id(str1.upper()))


list1 = [1, 2, 3]
print(id(list1))
list1[0] = 10
print(id(list1))

										#
										2793223377648
										2793252919600
										2793222853128
										2793222853128

9.打印名片程序

输入姓名,电话号码,性别,最后打印出来名片
两种实现,普通函数和使用基础的类功能
普通函数

def NewName():
    while True:
        while True:
            name = input('请输入姓名,拼音,长度6-20个字符\n')
            if 5 < len(name) < 21:
                break
            else:
                print('输入格式不符,也不能为空')
        while True:
            gender = input('请输入性别,男或女\n')
            if gender =='男' or gender =='女':
                break
            else:
                print('输入格式不符,也不能为空')
        while True:
            phone = input('请输入电话号码,长度为11位\n')
            if len(phone) == 11:
                break
            else:
                print('输入格式不符,也不能为空')
        break
    return name,gender,phone

a = NewName()
# print(**a)
print(*a)
											# 
											请输入姓名,拼音,长度6-20个字符
											luzhuren
											请输入性别,男或女
											不知道
											输入格式不符,也不能为空
											请输入性别,男或女
											男
											请输入电话号码,长度为11位
											23
											输入格式不符,也不能为空
											请输入电话号码,长度为11位
											12345678911
											luzhuren 男 12345678911

类对象初探

class Namecard():
    def __init__(self):
        # self.name = input('请输入姓名,拼音,长度6-20个字符\n')
        while True:
            self.name = input('请输入姓名,拼音,长度6-20个字符\n')
            if 5 < len(self.name) < 21:
                # self.name = name
                break
            else:
                print('输入格式不符,也不能为空')
        # self.gender = input('请输入性别,男或女\n')
        while True:
            self.gender = input('请输入性别,男或女\n')
            if self.gender =='男' or self.gender == '女':
                break
            else:
                    print('输入格式不符,也不能为空')
        while True:
            self.phone = phone = input('请输入电话号码,长度为11位\n')
            if len(phone) == 11:
                break
            else:
                print('输入格式不符,也不能为空')
    def print_Namecard(self):
        print('姓名: ',self.name)
        print('姓别: ', self.gender)
        print('电话: ', self.phone)
        
dict1 = {}
for i in range(2):
    a = Namecard()
    key = a.name
    dict1.update({a.name:(a.name, a.gender, a.phone)})

print(dict1)

				#
				请输入姓名,拼音,长度6-20个字符
				湖南长沙刘亦菲
				请输入性别,男或女
				女
				请输入电话号码,长度为11位
				11011011011
				请输入姓名,拼音,长度6-20个字符
				橘子洲张学友
				请输入性别,男或女
				不知道
				输入格式不符,也不能为空
				请输入性别,男或女
				男
				请输入电话号码,长度为11位
				11211211212
				{'湖南长沙刘亦菲': ('湖南长沙刘亦菲', '女', '11011011011'),
				 '橘子洲张学友': ('橘子洲张学友', '男', '11211211212')}

10.求前20个斐波那契数列

def finonacci(n):
    sequence = [1, 1]
    # print(sequence[1])
    if n < 1:
        print('最少要有一个数\n')
        return
    if n <= 2:
        print(sequence[0:n])
        return sequence[0:n]
    else:
        for i in range(3,n+1):
            # print(i)
            val = sequence[i-3] + sequence[i - 2]
            # print(val)
            sequence.append(val)
        # print(sequence)
        return sequence
a = finonacci(20)
print(a)
							# 
							[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 
							233, 377, 610, 987, 1597, 2584, 4181, 6765]

11.函数求1-100之间的所有整数的和

def sum1(left,right):
    sum2 = 0
    for i in range(left,right+1):
        print(i)
        sum2 = sum2 + i
    return sum2
a = sum1(1,100)
print(a)
								# 5050