day008-元组和集合

1,元组(tuple)

元组:元组是将( )作为容器的标志,里面多个元素用逗号隔开:(元素1, 元素2, 元素3,…)
元素是不可变的(元素本身可以是可变序列,放在元组后不可变);有序的(支持下标),所以元组不可进行增,删,改操作,只有查操作,可以理解为元组就是不可变的列表。

t1 = (10, 20, True, '123', 10, [1, 2], {'a': 100})
print(t1, type(t1))

t2 = ('周一', '周二', '周三', '周四', '周五', '周六', '周天')
print(t2[1])
print(t2[-1])
print(t2[2:])    # ('周三', '周四', '周五', '周六', '周天')
print(t2[:4:-1])  # ('周天', '周六')

① 元组特有或者常用的一些操作

A 只有一个元素的元组:必须在唯一的那个元素后加逗号;

t4 = (10,)
print(t4, type(t4))    # (10,) <class 'tuple'>

B 在没有歧义的情况下,元组的小阔号可以直接省略。(直接将多个元素用逗号隔开,也是表示一个元组)

t6 = 10, 20, 30
print(t6, type(t6))     # (10, 20, 30) <class 'tuple'>

C 可以通过让变量的个数和元组中元素的个数保持一致,来获取元组中的每个元素

point2 = (20, 89, 67)
x, y, z = point2
print(x, y, z)   # 20 89 67

D 可以让变量的个数小于元组元素的个数,但是必须在其中一个变量前加星号。取值的时候先让不带的按照顺序先取,剩下的元素以列表的形式返回给的变量。

t2 = ('小明', 18, 89, 78, 67, 45)
x1, *x2 = t2
print(x1, x2)    # 小明 [18, 89, 78, 67, 45]
x1, x2, *x3 = t2
print(x1, x2, x3)    # 小明 18 [89, 78, 67, 45]

2,集合(set)

集合:集合是将{ }作为容器的标志,里面多个元素用逗号隔开:{元素1, 元素2, 元素3,…}元素之间是互异的且无序。

s1 = set()      # 空集合
s2 = {10, True, 'abc', (1, 2)}      # 元素必须是不可变的
print(s2)
# s3 = {10, True, 'abc', [1, 2]}   # 报错

# 集合无序
print({1, 2, 3} == {1, 3, 2})     # True

# 元素唯一
s3 = {1, 2, 3, 1, 2, 3, 1, 1, 1}
print(s3)    # {1, 2, 3}

# 集合自带去重功能
scores = [89, 78, 45, 67, 89, 78, 90, 89]
new_scores = list(set(scores))   # 去出列表中重复的元素并返回列表
print(new_scores)

① 数学集合运算: 交集、并集、差集、对称差集、子集和真子集

A 交集(&) - 求两个集合的公共部分

B 并集(|) - 合并两个集合

C 差集(-) - 集合1-集合2 -> 集合1中除了包含在集合2中以外的部分

D 对称差集(^) - 两个集合合并然后去掉公共部分

# 练习:用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
python = {'stu1', 'stu4', 'stu5', 'stu6', 'stu8', 'stu10', 'stu11'}
java = {'stu2', 'stu4', 'stu7', 'stu8', 'stu9', 'stu10'}
h5 = {'stu1', 'stu3', 'stu7', 'stu8', 'stu10', 'stu11'}
# 求选课学生总共有多少人
s1 = python | java | h5
print(len(s1))    # 11
# 求只选了第一个学科的人的数量和对应的名字
s2 = python - java - h5
print(s2)
# 求选了三门学生的学生的数量和对应的名字
s3 = python & java & h5
print(s3)
# 求只选了一门学科的学生的数量和对应的名字
s4 = python ^ java ^ h5 - s3
print(s4)
# 求只选了两门学科的学生的数量和对应的名字
s5 = s1 - s3 - s4
print(s5)

3,字符串(str)

字符串:字符串是容器(序列),将’’、""、’’’’’’、""""""作为容器的标志,在引号中的每一个符号都是字符串的元素(字符串的元素又叫字符)。字符串不可变(所以所有字符串相关的可变操作,全部都是会产生一个新的字符串);是有序的。

str3 = '''abc'''
str4 = """abc"""
print(type(str3), type(str4))   # <class 'str'> <class 'str'>
# 注意: ''和""引起来的字符串内容不能直接通过回车换行,''''''和""""""引起来的字符串内容可以直接通过回车换行

① 字符:字符分为普通字符和转义字符两种。

A 普通字符:除了转义字符以外的字符都是普通字符。

B 转义字符 :在一些特定符号前加 \ 在字符串中表示一些具有特殊功能或者特殊意义的符号。

\n - 换行
\t - 水平制表符(相当于按一次tab键)
’ - 表示一个单引号
" - 表示一个双引号
\ - 表示一个反斜杠
\uxxxx(四位的十六进制编码值) - 将编码值转换对应的字符

str11 = 'abc\"123\'456'
print(str11)   # abc"123'456

str13 = 'abc\u4e80123'
print(str13)    # abc亀123

② 字符编码

字符编码: 计算机只能存数字,所以为了能够保存字符,给每一个字符对应一个固定的数字。每次需要保存字符的时候直接保存字符对应的那个数字。 一个字符对应的那个固定的数字就是这个字符的编码值。

编码表:记录字符和编码值之间一一对应关系的表, 常见的编码表有两种:ASCII码表和Unicode编码表。

A ASCII码表:总共有128个字符,表中数字字符在大写字母的前面,大写字母在小写字母的前面,大写字母和小写字母之间有其他字母。

B Unicode编码表:Unicode编码表是对ASCII码表的扩充,它记录了世界上所有的国家所有的民族所有的语言的所有符号。
中文的编码范围:4e00 ~ 9fa5

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

print(chr(97))    # a

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

print(ord('余'), ord('婷'))   # 20313 23159
print(hex(ord('余')), hex(ord('婷')))   # 0x4f59 0x5a77

c 字符串比较大小 - 比较第一对儿不相等的字符的编码值的大小。(两个字符串同位置上的字符是一对)。

print('abc' > 'ABCDEF')      # True
print('abcd' > 'acdb')       # False
print('你好' > 'hello')      # True
pw = input('请输入密码(字母和数字组成):')
for x in pw:
    if not ('0' <= x <= '9' or 'A' <= x <= 'Z' or 'a' <= x <= 'z'):
        print('密码不合法!')
        break
else:
    print('密码合法!')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值