python3基础08

day08

集合 set
  集合是可变的容器
  集合内的数据对象都是唯一的(不能重复多次的)
  集合是无序的存储结构,集合中的数据没有先后关系,与字典相似
  集合内的元素必须是不可变对象
  集合是可迭代对象
  集合是相当于只有键没有值的字典(键则是集合的数据)

创建空的集合:
  set()

创建非空的集合的字面值:
  s = {1, 2, 3}

集合的构造函数:
  set()  创建一个空的集合(不能用{} 来创建空集合)
  set(iterable) 用可迭代对象创建一个新的集合

  示例:
    s = set()            #创建空集合

    s = {2,3,5,7}

    s = set("ABC")       
    # s = {'A', 'B', 'C'}

    s = set("ABCCBA")    
    # s = {'A', 'B', 'C'}  (集合中的内容不可重复)

    s = set({1:"1", 2:'2', 5:'5'}) 
    # s = {1, 2, 5} (键)                                 
    s = set({1:"1", 2:'2', 5:'5'}.values())
    # s = {1, 2, 5} (值)
                                     
    s = set(('ABC', '123', True)) 
    #s = {'ABC', '123', True}

    s = {True, None, "ABC", (1, 2, 3)}
    #s = {True, None, "ABC", (1, 2, 3)}
    
    
   注:字典,列表,集合是不能放在集合当中的,因为其可变
       


python3 中不可变数据类型
  bool, int, float, complex, str, tuple, frozenset,bytes 字节串(后面才学)

  None  (特殊的对象,忽略类型)

可变数据类型
  list, dict, set, bytearray 字节数组(后面才学)

  可变的数据类型不能作为字典的键,不能作为集合的值

集合的运算:
  交集&   并集|   补集-   对称补集^   子集<    超集>

& 用于生成两个集合的交集(共有的部分)     
  s1 = {1, 2, 3}
  s2 = {2, 3, 4}
  s1 & s2  # {2, 3}

| 生成两个集合的并集(两个集合的全部元素)
  s1 = {1, 2, 3}
  s2 = {2, 3, 4}
  s1 | s2  # {1, 2, 3, 4}

- 生成两个集合的补集
  s1 = {1, 2, 3}
  s2 = {2, 3, 4}
  s1 - s2  # {1}  # 生成属于s1, 但属于 s2的所元素的集合
  s2 - s1  # {4}  # 生成属于s2, 但属于 s1的所元素的集合

^ 生成两个集合的对称补集(并集-交集)
  s1 = {1, 2, 3}
  s2 = {2, 3, 4}
  s1 ^ s2  # {1, 4}

> 判断一个集合是另一个集合的超集
< 判断一个集合是别一个集合的子集
  s1 = {1, 2, 3}
  s2 = {2, 3}
  s1 > s2  # True   s1是s2的超集
  s2 < s1  # True   s2是s1的子集

  集合中的比较只是比较有或没有

== != 集合相同/不同
  s1 = {1, 2, 3}
  s2 = {3, 2, 1}
  s1 == s2   # True(集合中不分顺序)

in / not in 运算
   in 同列表和字典的in运算符规则相同,如果存在于集合中返回 True,否则返回False
示例:
  2 in {1, 2, 3}  # True

用于集合的函数
  len(x)  返回集合的长度
  max(x)  返回集合的最大值元素
  min(x)  返回集合的最小值元素
  sum(x)  返回集合中所有元素的和  (x为int类型)
  any(x)  真值测试,规则与列表相同
  all(x)  真值测试,规则与列表相同

集合是可迭代对象,可以用于for语句中

练习一:
  经理有: 曹操,刘备,孙权
  技术员有: 曹操,孙权,张飞,关羽
  用集合求:
    1. 即是经理也是技术员的有谁?
    2. 是经理,但不是技术人员的都有谁?
    3. 是技术人员,但不是经理的都有谁?
    4. 张飞是经理吗?
    5. 身兼一职的人都有谁?
    6. 经理和技术员共有几个人?


集合的方法:
  详见:
    >>> help(set)
  文档参见:
    python_base_docs_html/set.html


    S.add(e)    在集合中添加一个新的元素e;如果元素已经存在,则不添加
    S.remove(e)     
    从集合中删除一个元素,如果元素不存在于集合中,
    则会产生一个KeyError错误
    S.discard(e)        
    从集合S中移除一个元素e,
    在元素e不存在时什么都不做;(不报错)
    S.clear()   
    清空集合内的所有元素
    S.copy()    
    将集合进行一次浅拷贝
    S.pop()     
    从集合S中删除一个随机元素;如果此集合为空,
    则引发KeyError异常
    S.update(s2) 等同于   s|=s2  s=s|s2   

    s={1,2,3}
    s2={2,3,4}
    s.update(s2)   #等同于   s|=s2  s=s|s2
    # s={1,2,3,4}

 
    集合不支持索引

集合推导式:
  是用可迭代对象创建集合的表达式 

  语法:
    {表达式 for 变量 in 可迭代对象 [if 真值表达式]}

    [] 部分代表可省略

  示例:
    numbers = [1, 3, 5, 7, 9, 3, 4, 5, 6, 7]
    s = {x ** 2 for x in numbers if x % 2 == 1}
    print(s)

    #{81,1,9,25,49}   (去重)

固定集合 frozenset
  固定集合是不可变的,无序的,含有唯一元素的集合

  作用:
    固定集合可以作为字典的键,也可以作为集合的值
  
  固定集合的构造函数 frozenset
    frozenset()  创建一个空的固定集合
    frozenset(iterable) 用可迭代对象创建一个新的固定集合

    示例:
      fz = frozenset()
      fz = frozenset("ABCAB")
      #frozenset({'B', 'C', 'A'})
      fz = frozenset([1, 2, 3, 4, 5])
      #frozenset({1, 2, 3, 4, 5})
      fz = frozenset((frozenset({1, 2}), 3, 4, 5))


固定集合的运算:
  &  交集
  |  并集
  - 补集
  ^ 对称补集
  in / not in运算
  > >= < <= == !=
  (以上运算等同于集合的运算)

固定集合的方法:
  相当于集合的全部方法去掉修改集合的方法


阶段总结:
  数据类型:
    不可变数据类型:
       bool, int, float, complex, str, tuple, frozenset,bytes(后面才学)
    可变的数据类型:
       list, dict, set, bytearray(后面才学)

    值:
      None, False, True, ....
  运算符:
    + - * / // % **
    < <= > >= == !=  (判断值是不是相等)
    is , is not    (判断是不是同一个对象,id)
    in , not in
    not  and   or
    &  |  ^  ~ << >>
    +(正号)  -(负号)

表达式:
  100          
  100 + 200
  max(1,2,3)  # 函数调用也是表达式
  条件表达式  x if x > y else y
  全部的推导式:
      列表,字典,集合推导式(只有三种)
  x = 表达式
  if 表达式:
  while 表达式:
  print(表达式)

语句:
  表达式 语句:
    print("hello world!")
    '''这是字符串'''
  赋值语句:(创建变量和修改变量,只有赋值语句能创建变量)
    a = 100
    b = c = d = 200
    x, y = 100, 200
    列表[整数表达式] = 表达式
    字典[键] = 表达式
  if 语句
  while语句
  for 语句
  break 语句
  continue语句
  pass 语句
  del 语句
  
  函数:
    len(x),max(x), min(x), sum(x), any(x),all(x)
    构造函数:
      bool(x) int(x),float(x), complex(x),str(x)
      list(x), tuple(x),dict(x),
      set(x), frozenset(x)

    abs(x) round(x), pow(x,y,z=None)
    bin(x), oct(x), hex(x), chr(x), ord(x)
    range(start, stop, step)
    input(x), print(....)


函数 function
  什么是函数
    函数是可以重复执行的语句块,可以重复的调用
  
  作用:
    用于封装语句块,提高代码的重用性
    定义用户级别的函数

def 语句
  语法:
    def 函数名(形参列表):
        语句块(代码块)
  作用:
    用语句块创建一个函数,并用函数名变量绑定这个函数
  语法说明:
    1. 函数名是变量,它用于绑定语句块
    2. 函数有自己的名字空间,在函数外部不可以访问函数内部的变量,在函数内部可以访问函数外部的变量
      (要让函数处理外部的数据需要用参数给函数传入一些数据)
    3. 函数不需要传入参数时,形参列表可以为空
    4. 语句部分不能为空,如果为空需要填充pass语句
  示例见:
    def.py
    def2.py

函数调用
  函数名(实际调用传递参数)
    注: 实际调用传递参数 以后称为实参

  说明:
   函数调用是一个表达式
   如果函数内部没有return语句,则函数执行完毕后返回None对象

练习二:
  写一个函数 myadd,此函数中的参数列表里有两个参数x,y
  此函数的功能是打印x+y的和
      def myadd(...):
         ....

      myadd(100, 200)  # 300
      myadd("ABC", '123')  # ABC123

  2. 写一个函数 print_even, 传入一个参数n代表终止整数
      打印 2 4 6 8 ... n之间的所有偶数
      函数定义如下:
        def print_even(n):
           ... 此处自己完成
      测试调用:
        print_even(8)
        2
        4
        6
        8


  

return 语句:
  语法:
    return [表达式]
    注: []代表可以省略其中的内容
  作用:
    用于函数中结束当前函数的执行,返回到调用该函数的地方,同时返回一个对象的引用关系
  return 语句说明:
    1. return 语句后跟表达式可以省略,省略后相当于 return None
    2. 如果函数内没有 return 语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条return None语句)
  示例见:
    return.py

练习三:
  写一个函数myadd2, 实现返回两个数的和:
    如:
      def myadd(a, b):
          .... # 此处自己实现

    #测试代码如下:
      a = int(input("请输入第一个数: "))
      b = int(input("请输入第二个数: "))
      print("您输入的两个数之和是: ", myadd(a, b))


练习四:
  1.  写一个函数mymax, 实现返回两个数的最大值:
  如:
    def mymax(a, b):
       ...
    print(mymax(100, 200))  # 200
    print(mymax("ABCD", "ABC"))  # ABCD
  2. 写一个函数 input_number:
    def input_number():
        ...
    此函数用来获取用户输入的整数,当输入负数时结束输入.
    将用户输入的数字以列表的形式返回,再用内建函数max,min,sum求出用户输入的最大值,最小值及和
    L = input_number()
    print(L)  # 打印列表中的数据
    print("用户输入的最大数是:", max(L))
    print("用户输入的最小数是:", min(L))
    print("用户输入的这些数的和是:", sum(L))


练习五:
  1. 编写函数fun,其功能是: 计算并返回下载多项式的值
     Sn = 1 + 1/2 + 1/3 + 1/4 + .... + 1/n
    函数如下:
      def fun(n):
          ...
    print(fun(3))  # 1.8333333333333
    print(fun(10))  # ?????????????
  2. 编写函数fun2,计算下列多项式的和
    Sn = 1/(1*2) + 1/(2*3) + 1/(3*4) +
              ... + 1/(n*(n+1)) 的和

    print(fun2(3))  # 0.75
    print(fun2(1000))  
  

课后练习:
  1. 写一个函数 get_chinese_char_count,此函数实现的功能是从一个给定的字符串中返回中文字符的个数
    def get_chinese_char_count(x):
        ...

    s = input("请输入中英文混合的字符串:")  # hello中国
    print('您输入的中文的字符个数是:', get_chinese_char_count(s))  # 2

  2. 写一个函数isprime(x) 判断x是否为素数,如果为素数,返回True,否则返回False
     如:
       print(isprime(5))  # True
       print(isprime(6))  # False
  3. 写一个函数prime_m2n(m, n) 返回从m开始,到n结束范围内的素数,返回这些素数的列表,并打印.
    如:
      L = prime_m2n(10, 20)
      print(L)  # [11, 13, 17, 19]
  4. 写一个函数 primes(n)  返回指定范围内n(不包含n)的全部素数的列表,并打印这些列表
    如:
      L = primes(10)
      print(L)  # [2, 3, 5, 7]
    1) 打印100以内全部素数的和
    2) 打印200以内全部素数的和

  5.  改写之前的学生信息管理程序,将其改为两个函数:
    def input_student():
          ...
    def output_student(L):
        ....
    input_student用于从键盘读取学生数据,形成列表并返回列表
    output_student(L) 用于将传和的列表L 打印成为表格
   测试代码:
     L = input_student()
     print(L)
     output_student(L)  # 打印表格


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值