Python基础语法小结4(集合&函数)



集合的定义 python实现 python的集合函数_集合类型


一、集合

1.集合的定义

Python中的集合类似于数学中的集合概念,它是一组无序、不可重复元素序列,集合用{value1,value2}创建,某种程度上可以把集合看作是没有值的字典。字典是dict = {key:value,key2:value2,}需要key。

特点:1、不同元素组成 2、无序 3、集合中的元素必须是不可变类型

1)自动去重
set1 = {1, 2, 4, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 1}
print(set1)       # {1, 2, 3, 4}
len(set('1232'))  # 3
len('1232')       # 4
2)打印内容是无序的

集合的元素是无序的,因此打印的时候,也是无序的

set_0 = {"cheney","真","是","帅"}
print(set_0)   # {'是', '帅', 'cheney', '真'}
3)集合中的元素必须是不可变类型

集合类型要求元素是独一无二的,不能存在相同的元素,但是如果其中的某一个元素是可以被改变的,它一旦改变之后可能会和其他的元素相同,这样子的话集合类型就会出现错误,所以集合类型要求,该元素不能是可变数据类型

2.集合的创建

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

s = {'s', 'e', 't'}
s = set(['a, b, c, d, e'])

创建空集合必须用set()

set = set()  # 创建空集合必须用这种方式
dict = {}    # 使用这种方式创建的为空的字典
3.集合的使用(常用方法)
1)add()
  • add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
  • 注意: list,dict 都不能嵌入到集合
2)clear()
  • **描述:**clear() 方法用于移除集合中的所有元素。
3)pop()
  • 描述:pop() 方法用于随机移除一个元素,一般是删除最开始的一个元素
4)remove()
  • **描述:**remove() 方法用于移除集合中的指定元素。该方法不同于discard()方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
5)update()
  • **描述:**update() 方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
4.集合的运算
  • & 交集运算
  • | 并集运算
  • — 差集运算
  • ^ 亦或集运算
a = set('abracadabra')
b = set('alacazam')
print('a = ', a)
print('b = ', b)
print('a - b = ', a - b)        # 集合a中包含而集合b中不包含的元素
print('a | b = ', a | b)        # 集合a或b中包含的所有元素
print('a & b = ', a & b)        # 集合a和b中都包含了的元素
print('a ^ b = ', a ^ b)        # 不同时包含于a和b的元素

输出结果:

a =  {'c', 'a', 'b', 'd', 'r'}
b =  {'c', 'a', 'm', 'l', 'z'}
a - b =  {'d', 'r', 'b'}
a | b =  {'c', 'a', 'b', 'm', 'd', 'l', 'r', 'z'}
a & b =  {'c', 'a'}
a ^ b =  {'r', 'm', 'd', 'l', 'b', 'z'}

二、函数

1.函数定义
  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
  • 函数能提高应用的模块性,和代码的重复利用率。已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
2.定义一个函数
  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
1)让我们使用函数来输出"Hello World!"
def hello() :
    print("Hello World!")

hello()

注意:函数必须调用才能使用,否则没有效果

2)函数中带上参数变量
def max_num(a, b):
    if a > b:
        return a
    else:
        return b


a = 4
b = 5
print(max_num(a, b))
3)Python中函数的参数
  • 可以分为两大类形参和实参
def func(x, y):  # x, y 就是形参
  print(x, y)

func(2, 3)     # 2, 3 就是实参
  • 关键字参数
def func(x, y, z):
    print(x, y, z)

func(1, z = 2, y = 3)

使用注意点:

  • 在调用函数时,位置实参 必须在 关键字实参的前面~
def func(x, y, z):
  print(x, y, z)

# 位置参数和关键字参数混合使用的时候
func(1, z = 2, y = 3)   # 正确

func(x = 1, z = 2, 3)   # 错误
  • 一个形参不能重复传值
def func(x, y, z):
  print(x, y, z)

func(1, x = 2, y = 3, z = 4)  # 错误,形参 x 重复传值
4)不定长参数

在定义函数时,若不确定调用时需要传入多少个参数,这时就可以使用可变长参数,即实参的个数不固定

可变长参数 可以分为两类:

  • 按位置定义的可变长度的实参(*)
  • 按关键字定义的可变长度的实参(**)

- 按位置定义的可变长度的实参

def func(x, y, *args, z):     # *args 会把传入的 多余的 参数以一个元组的形式存放,元组的变量名就是args
  print(x, y)
  print(args)
  print(z)

func(1, 2, 3, 4, 5, z=6)    # x=1, y=2, args=(3,4,5),z=6

注意:不定长参数必须放到位置实参后面,关键字实参的前面

三、作业

1.作业1
打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
• 控制姓名长度为6-20
• 电话号码长度11
• 性别只能允许输入男或女
• 每一样信息不允许为空

代码:

name = input("请输入您的姓名:")
tel = input("请输入您的电话号码:")
gender = input("请输入您的性别:")

def fun():
    if len(name) <= 20 and len(name) >= 6:
        print("您的姓名:", name)
    elif len(name) == 0:
        print("您的姓名输入为空")
    else:
        print("您的姓名输入有误!")
    if len(tel) == 11:
        print("您的电话号码:", tel)
    elif len(tel) == 0:
        print("您的电话号码输入为空")
    else:
        print("您的电话号码输入有误!")
    if gender == "男" or gender == "女":
        print("您的性别:", gender)
    elif len(gender) == 0:
        print("您的性别输入为空")
    else:
        print("您的性别输入有误!")


f = fun()
2.作业2
使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21...
即: 起始两项均为1,此后的项分别为前两项之和

代码:

def fib_loop_for(n):
    a, b = 1, 1
    for j in range(n):
        a, b = b, a + b
    return a


for i in range(20):
    print(fib_loop_for(i), end=' ')
3.作业3
编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果

代码:

def sum_num(n):
    num = 0
    for i in range(1, n+1):
        num += i
    return num


print(sum_num(100))