07 练习题:基础类型及转化、编码

# 1. 看代码写结果
# v1 = [1,2,3,4,5]
# v2 = [v1,v1,v1]
# v1.append(6)
# print(v1)
# print(v2)
# result:
# [1, 2, 3, 4, 5, 6]
# [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]]


# 2. 看代码写结果
# v1 = [1,2,3,4,5]
# v2 = [v1,v1,v1]
# v2[1][0] = 111
# v2[2][0] = 222
# print(v1)
# print(v2)
# result
# [222, 2, 3, 4, 5]
# [[222, 2, 3, 4, 5], [222, 2, 3, 4, 5], [222, 2, 3, 4, 5]]


# 3. 看代码写结果,并解释每一步的流程。
# v1 = [1,2,3,4,5,6,7,8,9]
# v2 = {}
# for item in v1:
#     if item < 6:
#         continue
#     elif 'k1' in v2:
#         v2['k1'].append(item)
#     else:
#         v2['k1'] = [item]
# print(v2)
# result: {'k1': [6, 7, 8, 9]}


# 4. 简述深浅拷贝?
# 浅拷贝:仅仅拷贝了最外层的容器数据类型,而容器内部的容器再次发生改变仍然会影响拷贝数据。
# 深拷贝:将所有可变化数据类型都拷贝了地址不同的一份新的,容器内部的可变数据类型改变不会影响另一个数据。


# 5.看代码写结果
# import copy
# v1 = "alex"
# v2 = copy.copy(v1)
# v3 = copy.deepcopy(v1)
# print(v1 is v2)
# print(v1 is v3)
# result:
# True
# True


# 6.看代码写结果
# import copy
# v1 = [1,2,3,4,5]
# v2 = copy.copy(v1)
# v3 = copy.deepcopy(v1)
# print(v1 is v2)
# print(v1 is v3)
# result:
# False
# False


# 7. 看代码写结果
# import copy
# v1 = [1,2,3,4,5]
# v2 = copy.copy(v1)
# v3 = copy.deepcopy(v1)
# print(v1[0] is v2[0])
# print(v1[0] is v3[0])
# print(v2[0] is v3[0])
# result:
# True
# True
# True


# 8. 看代码写结果
# import copy
# v1 = [1,2,3,4,[11,22]]
# v2 = copy.copy(v1)
# v3 = copy.deepcopy(v1)
# print(v1[-1] is v2[-1])
# print(v1[-1] is v3[-1])
# print(v2[-1] is v3[-1])
# result:
# True
# False
# False


# 9. 看代码写结果
# import copy
# v1 = [1,2,3,{"name":'太白',"numbers":[7,77,88]},4,5]
# v2 = copy.copy(v1)
# print(v1 is v2)
# print(v1[0] is v2[0])
# print(v1[3] is v2[3])
# print(v1[3]['name'] is v2[3]['name'])
# print(v1[3]['numbers'] is v2[3]['numbers'])
# print(v1[3]['numbers'][1] is v2[3]['numbers'][1])
# result:
# False
# True
# True
# True
# True
# True


# 10.看代码写结果
# import copy
# v1 = [1, 2, 3, {"name": '太白', "numbers": [7, 77, 88]}, 4, 5]
# v2 = copy.deepcopy(v1)
# print(v1 is v2)
# print(v1[0] is v2[0])
# print(v1[3] is v2[3])
# print(v1[3]['name'] is v2[3]['name'])
# print(v1[3]['numbers'] is v2[3]['numbers'])
# print(v1[3]['numbers'][1] is v2[3]['numbers'][1])
# result:
# False
# True
# False
# True
# False
# True


# 11. 请说出下面a,b,c三个变量的数据类型。
# a = ('太白金星')                             # 字符串 string
# b = (1,)                                    # 元组 tuple
# c = ({'name': 'barry'})                     # 字典 dict


# 12. 按照需求为列表排序:
# l1 = [1, 3, 6, 7, 9, 8, 5, 4, 2]
# 从大到小排序
# 从小到大排序
# 反转l1列表
l1 = [1, 3, 6, 7, 9, 8, 5, 4, 2]
l1.sort(reverse= True)
print(l1)
l1.sort()
print(l1)
l1.reverse()
print(l1)


# 13. 利用python代码构建一个这样的列表(升级题):
# [['_','_','_'],['_','_','_'],['_','_','_']]
print([['_'] * 3] * 3)


# 14. 看代码写结果:
# l1 = [1,2,]
# l1 += [3,4]
# print(l1)
# result:
# [1, 2, 3, 4]


# 15. 看代码写结果:
# dic = dict.fromkeys('abc',[])
# dic['a'].append(666)
# dic['b'].append(111)
# print(dic)
# result:
# {'a': [666, 111], 'b': [666, 111], 'c': [666, 111]}


# 16.
# l1 = [11, 22, 33, 44, 55],请把索引为奇数对应的元素删除(不能一个一个删除,此l1只是举个例子,里面的元素不定)
l1 = [11, 22, 33, 44, 55]
del l1[1::2]
print(l1)


# 17.
# dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18} 请将字典中所有键带k元素的键值对删除.
dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18}
dic_keys = list(dic.keys())
for key in dic_keys:
    if 'k' in key:
        dic.pop(key)
print(dic)


# 18. bytes数据类型是python的基础数据类型,bytes类型存在的意义是什么?
# 作为唯一的非Unicode编码基础数据类型,肩负起将Unicode编码转化为其他编码方式的任务来时实现存储和传输的工作。


# 19.列举bytes类型与str类型的三个不同点?
# 1) 编码方式不同:一个为Unicode,一个为非Unicode。
# 2) 组成基本单位不同:一个以字符为基本单位,一个以字节为基本单位。
# 3) 用途不同:一个用于存储少量的数据,一个用于传输和文件保存。
# 4) 表现形式不同:一个是'a'、'字符'形式,一个是b'a'、b'xe5xadx97xe7xacxa6'形式。


# 20. 完成下列需求:
# s1 = '太白金星'
# 将s1转换成utf-8的bytes类型。
# 将s1转化成gbk的bytes类型。
# b = b'xe5xa4xaaxe7x99xbdxe6x9cx80xe5xb8x85'
# b为utf-8的bytes类型,请转换成gbk的bytes类型。
s1 = '太白金星'
s2 = s1.encode('utf-8')                        # 将s1转换成utf-8的bytes类型
print(s2)
s3 = s1.encode('gbk')                          # 将s1转化成gbk的bytes类型
print(s3)
b = b'xe5xa4xaaxe7x99xbdxe6x9cx80xe5xb8x85'
b = b.decode('utf-8')                          # utf-8 -> Unicode
b = b.encode('gbk')                            # Unicode -> gbk
print(b)


# 21. 用户输入一个数字,判断一个数是否是水仙花数。
# 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数,
# 例如: 153 =1**3 + 5**3 + 3**3
d = input('pls input:').strip()
if d.isdecimal() and len(d) == 3:
    if int(d[0]) ** 3 + int(d[1]) ** 3 + int(d[2]) ** 3 == int(d):
        print('{}是水仙花数'.format(d))
    else:
        print('{}不是水仙花数'.format(d))
else:
    print('input error.')


# 22. 把列表中所有姓周的⼈的信息删掉(此题有坑, 请慎重):
# lst = ['周⽼⼆', '周星星', '麻花藤', '周扒⽪']
# 结果: lst = ['麻花藤']
lst = ['周⽼⼆', '周星星', '麻花藤', '周扒⽪']
for i in range(len(lst)-1,-1,-1):
    if '周' in lst[i]:
        lst.pop(i)
print(lst)


# 23. 车牌区域划分, 现给出以下车牌. 根据车牌的信息, 分析出各省的车牌持有量. (选做题)
# cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪 B25041'.....]
# locals = {'沪':'上海', '⿊':'⿊⻰江', '鲁':'⼭东', '鄂':'湖北', '湘':'湖南'.....}
# 结果: {'⿊⻰江':2, '⼭东': 1, '北京': 1}
cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪 B25041']
locals = {'沪':'上海', '⿊':'⿊⻰江', '鲁':'⼭东', '鄂':'湖北', '湘':'湖南', '京':'北京'}
# 方法一:
total = {}
for car in cars:
    if total.get(locals[car[0]]) == None:
        total.setdefault(locals[car[0]],1)
    else:
        total[locals[car[0]]] += 1
print(total)
# 方法二:
dic = {}
for i in cars:
    dic[locals[i[0]]] = dic.get(locals[i[0], 0], 1)
print(dic)
原文地址:https://www.cnblogs.com/raygor/p/13245738.html