day5作业
练习:寻找差异
# 数据库中原有
old_dict = {
"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 },
"#2":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
"#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
}
# cmdb 新汇报的数据
new_dict = {
"#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 800 },
"#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }
"#4":{ 'hostname':c2, 'cpu_count': 2, 'mem_capicity': 80 }
}
需要删除:?需要新建:?需要更新:?
注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新
答案:
#!usr/bin/evn python
# -*- coding:utf-8 -*-
#寻找差异
# 数据库中原有
old_dict = {
'#1':{'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 },
'#2':{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 },
'#3':{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 }
}
# cmdb 新汇报的数据
new_dict = {
"#1":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 800 },
"#3":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 },
"#4":{ 'hostname':'c2', 'cpu_count': 2, 'mem_capicity': 80 }
}
updated_dict=old_dict
#dict的set
old_dict_set=set(old_dict.keys())
new_dict_set=set(new_dict.keys())
#交集 #1#3
old_new_intersection=old_dict_set.intersection(new_dict_set)
#需要删除
#old存在,new中不存在,old中要删除
#del #2
old_dict1={}
old_new_intersection=old_dict_set.intersection(new_dict_set)
for j in old_new_intersection:
old_dict1.setdefault(j,old_dict[j])
#old_dict1[j]=old_dict[j]
print(old_dict1)
#old_dict_del=#2,#3
old_dict_del=old_dict_set.difference(new_dict_set)
#需要新建
#new中存在,old中不存在,old中添加
new_set=new_dict_set.difference(old_dict_set)
old_dict2=old_dict
for k in new_set:
old_dict2[k]=new_dict[k]
print(old_dict2)
#需要更新
#注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新
updated_dict=old_dict
old_dict_update=old_dict_set.intersection(new_dict_set)
for i in old_dict_update:
updated_dict[i]=new_dict[i]
print(updated_dict)
练习题
1、简述普通参数、指定参数、默认参数、动态参数的区别
2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
5、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
6、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
|
1
2
3
|
dic = {"k1": "v1v1", "k2": [11,22,33,44]}PS:字典中的value只能是字符串或列表 |
8、写函数,利用递归获取斐波那契数列中的第 10 个数,并将该值返回给调用者。
答案:
1.述普通参数、指定参数、默认参数、动态参数的区别
(1)普通参数分为形式参数和实际参数;
(2)指定参数就是给函数一个特点的参数;
(3)默认参数就是在给函数设定好一个默认值,并且需要房子参数列表最后;
(4)动态参数就给函数一个带*(tuple or strings orlist)的参数或在带**(dict)的参数
2.写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
#!usr/bin/evn python
# -*- coding:utf-8 -*-
def count_it(it):
count=len(str(it))
print(count)
count_it(22)
3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def whats_len(ob):
length=len(ob)
if length>5:
print('大于5啦!')
else:
print('没事,还小着呢!')
whats_len([1,2,7])
4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
def is_empty(ob):
if type(ob)==str and ob=='':
print('i am empty!')
else:
for i in ob:
if i=='':
print('这货是空的!')
else:
print('这里有东西!')
is_empty('')
is_empty([1,2,3,''])
5、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
def only2(ob):
length=len(ob)
if length>2:
ob=ob[0:2]
print(ob)
else:
print(ob)
return ob
only2([1])
only2([1,3,2,23])
6、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def odd_element(ob):
list_new=[]
length=len(ob)
for i in range(len(ob)):
if i%2==1:
list_new.append(ob[i])
else:
pass
return list_new
print(odd_element([1,2,3,4,5]))
7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
def dict_only2(ob):
new_dic={}
for k,v in dic.items():
if len(v)>:
new_dic[k]=v[0:2]
else:
pass
return new_dic
print(dict_only2(dic))
8、写函数,利用递归获取斐波那契数列中的第 10 个数,并将该值返回给调用者。
#!usr/bin/env python
# -*- coding:utf-8 -*-
#
# import
fib=[]
def fibonacci(depth,a1,a2):
if depth!=11:
a3 = a1 + a2
fibonacci(depth + 1,a2,a3)
fib.append(a1)
print(a1)
# print(a2)
# print(a3)
# print(fib)
#为什么写成:
# else:
# fib.sort()
# print(fib)
# 输出的结果是:[34, 21, 13, 8, 5, 3, 2, 1, 1, 0]
# fib.sort()
# print(fib)
# print(depth)
return depth
fibonacci(1,0,1)
# fib.sort()
# fib.reverse()
print(fib)

浙公网安备 33010602011771号