# 练习:
# 1. 有字符串列表如下:
# L = ["tarena", 'xiaozhang', 'hello']
# 用推导式生成如下字典:
# d = {"tarena":6, 'xiaozhang':9, 'hello':5}
# 注: 字典的值为键的长度
L = ["tarena", 'xiaozhang', 'hello']
d = {x: len(x) for x in L}
print(d)
# 2. 输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数:
# 如:
# 输入:abcdabcaba
# 打印如下:
# a: 4次
# b: 3次
# d: 1次
# c: 2次
# 注: 不要求打印顺序
s = input("请输入: ")
# 方法1
# char_set = set(s)
# for c in char_set:
# print(c, ":", s.count(c), "次")
# 方法2
# 先创建一个空字典,字典的键为字符,字典的值为: 重复次数
# 'abcdabcaba'
d = {}
for c in s:
# 先判断字典d里有没有 c对应的字符。
if c in d:
# 如果已经存在于字典中,将次数做加1操作
d[c] += 1
else:
# 否则 把c绑定的字符作为键加到字典中,此键对应的值为1
d[c] = 1
print(d)
for k in d: # 打印结果
print(k, ":", d[k], "次")
# 集合练习:
# 经理有: 曹操,刘备,周瑜
# 技术员有: 曹操,周瑜,张飞,赵云
# 用集合求:
# 1. 即是经理也是技术员的有谁?
# 2. 是经理,但不是技术员的有谁?
# 3. 是技术人员,但不是经理的都有谁?
# 4. 张飞是经理吗?
# 5. 身兼一职的人都有谁?
# 6. 经理和技术员共有几个人?
#
manager = {'曹操', '刘备', '周瑜'}
tech = {'曹操', '周瑜', '张飞', '赵云'}
print("即是经理也是技术员的有:", manager & tech)
print("是经理,但不是技术员的有:", manager - tech)
print("是技术人员,但不是经理的都有:", tech - manager)
print("张飞", "是" if "张飞" in manager else "不是", "经理")
print("身兼一职的人都有谁", manager ^ tech)
print("经理和技术员共有%d个人" % len(manager | tech))