2020-09-29-集合和字符串及作业

day7-集合和字符串
集合
  1. 什么是集合

    集合是容器型数据类型,将{}作为容器的标志,里面多个元素用逗号隔开:{元素1,元素2…}

    集合是可变的(支持增删改查),集合是无序的(不支持下标操作)

    元素是不可变类型,唯一的:

    1)空集合

    x = {}  # 空字典
    s1 = set()  # 空集合
    print(type(x),type(s1))  # # <class 'dict'> <class 'set'>
    

    2)元素是不可变的

    s2 = {10,'abc',(1,2)}
    # 报错,列表可变不能作为集合元素
    # s3 = {10,'abc',[1,2]}  # s3 = {10,'abc',[1,2]}  # 
    

    3)集合的唯一性

    s4 = {1,52,3,52,1}  # {1, 3, 52}
    print(s4)
    
    # 集合去重
    names = ['张三','李四','张三']
    print(list(set(names)))  #  ['李四', '张三']
    

    4)集合是无序的

    print({1,2,3}  == {2,3,1})  # True
    
  2. 集合的增删改查

    1)查 - 集合只能遍历

    # 补充:通过for循环无序序列的时候,都是先将序列转换成列表,然后编列列表
    games = {'王者','和平精英','我的世界','贪吃蛇'}
    for i in games:
        print(i)
    

    2)增

    # 集合.add(元素)  - 在集合中添加指定元素
    # 集合.update(序列) - 将序列中所有的元素添加到集合中(序列中的元素是不可变的)
    games = {'王者','和平精英','我的世界','贪吃蛇'}
    games.add('英雄联盟')
    print(games)
    games.update({'开心消消乐','QQ炫舞'})
    print(games)  # # {'王者', '英雄联盟', 'QQ炫舞', '开心消消乐', '我的世界', '贪吃蛇', '和平精英'}
    

    3)删

    # 集合.remove(元素) - 删除集合中指定的元素(元素不存在会报错)
    # 集合.discard(元素)  - 删除集合中指定的元素(元素不存在不会报错)
    games = {'王者', '英雄联盟', 'QQ炫舞', '开心消消乐', '我的世界', '贪吃蛇', '和平精英'}
    games.remove('贪吃蛇')
    print(games)   #  {'英雄联盟', '开心消消乐', 'QQ炫舞', '和平精英', '我的世界', '王者'}
    
    games.discard('我的世界')
    print(games)  #  {'和平精英', '英雄联盟', '王者', 'QQ炫舞', '开心消消乐'}
    

    4)改 - 先删除原来的,再添加新的

    games.remove('和平精英')
    games.add('部落冲突')
    print(games)  #  # {'开心消消乐', '部落冲突', '英雄联盟', '王者', 'QQ炫舞'}
    
  3. 数学集合运算

    python中的集合支持数学中的集合元素:&(交集)、|(并集)、-(差集)、^(对称差集)> >= < <=(判断子集包含关系)
    
    # 集合1 & 集合2  - 求两个集合的公共部分
    print({1,5,2}&{5,3,6,99,2,2})  # {2, 5}
    print({1,5,2,'abc'} & {5,3,6,99,2,2}) # {2, 5}
    print({1,5,2,'abc'} | {5,3,6,99,2,2}) # {1, 2, 99, 3, 5, 6, 'abc'}
    print({1,5,2,'abc'} ^ {5,3,6,99,2,2}) # {1, 99, 3, 6, 'abc'}
    
    # 2) 集合1 - 集合2  - 集合1中去掉包含集合2中剩下的元素
    print({1,5,2,'abc'} - {5,3,6,99,2,2})  # {1, 'abc'}
    
    # 3)集合1 > 集合2  - 判断集合2是否是结合1的真子集
    # 3)集合1 < 集合2  - 判断集合1是否是结合2的真子集
    # 3)集合1 >= 集合2  - 判断集合2是否是结合1的子集
    # 3)集合1 <= 集合2  - 判断集合1是否是结合2的子集
    print({1,2,3,4} > {1,2})  # True
    
    python = {'stu1', 'stu2', 'stu4', 'stu6', 'stu7', 'stu10', 'stu11'}
    h5 = {'stu1', 'stu3', 'stu5', 'stu7', 'stu8', 'stu10'}
    java = {'stu1', 'stu2', 'stu5', 'stu6', 'stu7', 'stu9', 'stu12'}
    # 	a. 求选课学生总共有多少人
    s1 = python | h5 | java
    print('总人数:',len(s1))
    # 	e. 求选了三门学生的学生的数量和对应的名字
    s2 = python & h5 & java
    print('选了三门课的学生:',len(s2))
    #  	b. 求只选了第一个学科的人的数量和对应的名字
    s3 = python - h5 - java
    print('只选了python的学生:',len(s3))
    # 	c. 求只选了一门学科的学生的数量和对应的名字
    s4 = python ^ h5 ^ java - s2
    print('只选了一门学科的学生:',len(s4))
    #  	d. 求只选了两门学科的学生的数量和对应的名字
    s5 = s1 - s4- s2
    print('只选了两门学科的学生:',len(s5))
    
    
  4. 什么是字符串(str)

    字符串是容器型数据类型,将‘’、“”、“”“”“”、‘’‘’‘作为容器的标志,里面的每一个基本符号就是字符串的元素

    字符串是不可变的(不支持增删改);字符串是有序的(支持下标)

    元素:引号里面的每个基本单元就是字符串的元素,又叫字符(一般使用长度为1的字符串来表示字符)

    # 空串
    s1 = ''
    s2 = ""
    s3 = ''''''
    s4 = """"""
    print(type(s1))  # # <class 'str'>
    
    # 字符串是有序的
    print('abc' == 'bac') # False
    
  5. 字符

    1)转义字符:

    在特定的一个或者多个符号前加 \ 让符号具有特殊功能和特殊意义;那么这种带有\ 的字符就是转义字符

    转义字符特殊功能和特殊意义
    \n换行
    \t水平制表符
    \’表示一个普通的单引号
    \"表示一个普通的双赢号
    \\表示一个普通反斜杠
    注意:任意一个转义字符的长度都是1

    2)普通字符:

    除了转义字符以外的字符都是普通字符,普通字符在字符串中表示这个符号本身。

  6. 字符的编码

    编码:计算机在存储数据的时候只能存数字(存数字二进制补码),为了能够让计算机存储字符,我们给每一个字符都对应一个数字,那么这个对应的数字就是这个字符的编码值

    字符编码表 - 记录字符和数字之间一一对应关系的表就是字符编码表

    ASCII码表Unicode编码表
    ASCII码表总共有128个字符对应的编码,主要包含的是美国的通用符号其中包括:数字、字母(大写,小写)数字字符在字母字符的前面,大写字母在小写字母的前面,大写字母和小写字母之间有间隔Unicode编码表包含ASCII码表 中文编码:4e00 - 9fa5

    1)编码字符

    print('\u4e00','\u9fa5')  #  # 一 龥
    

    2)chr(编码值) - 获取编码值对应的字符

    print(chr(97))  # a
    print(chr(65))  # A
    # 打印所有的中文字符
    count = 0
    for x in range(0x4e00,0x9fa5+1):
        print(chr(x),end=' ')
        count += 1
        if count % 25 == 0:
            print()
    
    

    3)ord(字符) - 获取字符对应的编码值

    print(ord('杨'))
    print(bin(ord('杨')),bin(ord('健')))  # 0b110011101101000 0b101000001100101
    
  7. 字符串的相关操作

    1.获取字符:字符串获取字符和列表获取元素方法一样

    1)获取单个字符

    sentence = '死亡如风,常伴吾身!'
    print(sentence[2])  # 如
    print(sentence[-8])  # 如
    

    2)字符切片

    sentence2 = 'good good study!day up'
    print(sentence2[5:-2])  # good study!day
    print(sentence2[::-1]) # pu yad!yduts doog doog
    

    3)遍历

    sentence2 = 'good good study!day up'
    for x in sentence2:
        print(x)
    for index,x in enumerate(sentence2):
        print(index,x)
    for index in range(len(sentence2)):
        print(sentence2[index])
    

    2.加法和乘法

    print('abc'+'123') # abc123
    print('abc'*2)  # abcabc
    

    3.比较大小:两个字符串比较大小是比较第一对不相等的字符编码值的大小

    char判断
    ‘a’ <= char <= ‘z’小写字母
    'A <= char <= ‘Z’大写字母
    ‘a’ <= char <= ‘z’ or 'A <= char <= ‘Z’字母
    ‘0’ <= char <= ‘9’数字字符
    ‘\u4e00’ <= char <= ‘\u9fa5’中文范围
    print('abc' > 'XKKDK')  # True
    print('abc' > '你好')  #  False
    
    # 练习:输入一个字符串,统计字符串中小写字母的个数
    char = input('请输入:')
    count = 0
    for x in char:
        if 'a' <= x <= 'z':
            count += 1
    print('输入字符串中小写字母个数:',count)
    
    # 练习:输入一个字符串,删除字符串中所有的中文字符
    char = 'nis离开ss===KLKJLk看看'
    new_char = ''
    for x in char:
        if '\u4e00' <= x <= '\u9fa5':
            continue
        new_char += x
    print(new_char)
    
作业
  1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

    例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**

    char = 'abcd1234'
    print(char[1::2])  # bd24
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

    user_name = input('输入用户名:')
    if 6 <= len(user_name) <= 10:
        print('合法')
    else:
        print('不合法')
    
  3. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

    例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法

    for x in user_name:
        if not (('a' <= x <= 'z' or 'A' <= x <= 'Z') or '0' <= x <= '9'):
            print('不合法')
            break
    else:
        print('合法')
    
  4. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

    例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法

    if 'A' <= name[0] <= 'Z':
        have_name = False
        for c in name:
            if not ('a' <= c <= 'z' or 'A' <= c <= 'Z' or '0' <= c <= '9'):
                print('不合法')
            else:
                if '0'<= c <='9':
                    have_name = True
        else:
            if have_name:
                print('合法')
            else:
                print('不合法')
    else:
        print('不合法')
    
  5. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

    例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’

    char = 'abc1shj23kls99+2kkk'
    new_char = ''
    for i in char:
        if '0' <= i <= '9':
            new_char += i
    print(new_char)
    
  6. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)

    例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'

    char = 'a2h2klm12+'
    new_char = ''
    print(char.upper())  # A2H2KLM12+
    
    for x in char:
        temp_char = x
        if 'a' <= x <= 'z':
            temp_char = chr(ord(x)-32)
        new_char += temp_char
    print(new_char)
    
  7. 输入一个小于1000的数字,产生对应的学号

    例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**

    user_char = int(input('请输入:'))
    print('py1901{:0>3d}'.format(user_char))
    
    user_char = int(input('请输入:'))
    print('py1901'+user_char.zfill(3))
    
    
  8. 输入一个字符串,统计字符串中非数字字母的字符的个数

    例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3

    char = 'anc2+93-sj胡说'
    count = 0
    for i in char:
        if not ('a' <= i <= 'z' or 'A' <= i <= 'Z' or '0' <= i <= '9'):
            count += 1
    print(count)
    
  9. 输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串

    例如: 输入字符串**‘abc123’, 输出’+bc12+’**

    char = 'abc123'
    print(f'+{char[1:-1]}+')
    
  10. 输入字符串,获取字符串的中间字符

例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**

char = 'abc123'
if len(char) & 1:
    print(char[len(char) // 2 -1])
else:
    print(char[len(char) // 2 - 1],char[len(char) // 2])
  1. 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8

char = 'how are you? Im fine, Thank you!'
print(char.find('you'))  # 8
print(char.find('you',50))  # -1   索引超出范围,不会报错返回 -1
print(char.index('you')) # 8
# print(char.index('you',50)) # 索引超出范,会报错
  1. 获取两个字符串中公共的字符

例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3

str1 = 'abc123'
str2 = 'hua1112bk333'
new_str = ''
for x in str1:
    for i in str2:
        if x == i and x not in new_str:
            new_str += x
print(new_str)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值