Python开发Day03(练习解答)
练习一、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
'''普通参数分为形参、实参,有多少形参,就必须要给函数多少个实参。 指定参数为,假如有name和age两个形参,在给函数参数的时候指定name='****',age='**' 默认参数为必须放在参数的尾部,列如一个name形参,一个age形参,我们可以将name形参放在前面,这样用户必须给函数一个名字,age放在后面默认等于18。(name,age=18) 动态参数:在形参前面加一个*号,可以传入多个参数,在函数内类型会变为元组。 在形为参数前面加两个*号,传入的值为字典类型,相当于可以传入多个参数,并且改为字典格式。def he(**kwargs): 给动态参数传元组、列表、字典,给他们传入时加*或者** '''
练习二、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def lianxier(a): #创建一个新的函数,函数名为lianxier,可以使用一个参数,参数名为a shuzi=0 zifuchuan=0 kongge=0 qita=0 for i in a: #for循环取出每一个值 if i.isdigit(): #判断循环的是不是数字,如果是给固定的局部变量shuzi+1 shuzi+= 1 elif i.isalpha(): #判断循环的是不是字符串,如果是给固定的局部变量zifuchuan+1 zifuchuan += 1 elif i.isspace(): #判断循环的是不是空格,如果是给固定的局部变量kongge+1 kongge += 1 else: #循环的是其他的,给固定的局部变量qita+1 qita += 1 return '数字有:',shuzi,'\t字符串有:',zifuchuan,'\t空格有:',kongge,'其他有:',qita #返回数据的点用函数的使用者 print(lianxier('asdasd 1234((((')) #输出执行函数后的结果 执行结果: ('数字有:', 4, '\t字符串有:', 6, '\t空格有:', 4, '其他有:', 4)
练习三、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def lianxisan(b): #创建一个新的函数,函数名为lianxisan,可以使用一个参数,参数名为b if type(b) == int: #判断传进来的参数是不是int类型 if len(b) >= 6: #判断b参数的程度是不是大于6,如果大于6给调用函数者返回 '您输入的长度过长!' return '您输入的长度过长!' else: #调用函数者传进来的参数小于6,给调用函数者返回'输入成功!' return '输入成功!' else: return '输入有误!不能为字符串.' print(lianxisan({1:2,2:3,3:4,4:5,5:6,6:7})) #输出执行函数后的结果 执行结果: 您输入的长度过长!
练习四、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def lianxisi(b): #创建一个新的函数,函数名为lianxisi,可以使用一个参数,参数名为b for i in b: #for循环参数b if i.isspace(): #判断参数有没有空格,如果有空格就不在执行了,给调用函数者返回:对不起您输入了空格! return '对不起您输入了空格!' return '输入成功!' #如果循环完毕没有空格给调用函数者返回:'输入成功!' print(lianxisi('adsfsdafasd ')) #输出执行函数后的结果 执行结果: 对不起您输入了空格!
练习五、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def lianxiwu(a): #创建一个新的函数,函数名为lianxiwu,可以使用一个参数,参数名为a if type(a) == list: #判断调用者传进来的参数是不是列表,如果不是返回:'请传入列表!' if len(a) > 2: #满足上面的条件判断传进来的列表长度是不是大于2,如果大于2返回列表中的前两个元素 return a[:2] else: #判断等于或者小于2,返回列表元素 return a else: return '请传入列表!' print(lianxiwu([1,2,3,4,5])) #输出执行函数后的结果 执行结果: [1, 2]
练习六、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def lianxiliu(a): #创建一个新的函数,函数名为lianxiliu,可以使用一个参数,参数名为a li=[] #定义一个空的列表 if type(a) == list: #判断调用函数者传进来的参数是不是列表 for i in range(len(a)): #使用range来for循环用户传进来参数的长度,找到索引 if type(a[i]) == int: #判断调用函数者传的列表中是数字,如果不是返回:'请确保列表中全时数字!' if a[i]%2 == 1: #判断从索引开始到结束中的数字是奇数的添加到局部变量li列表中 li.append(i) else: return '请确保列表中全时数字!' else: return '请传入列表!' return li #执行完毕函数后返回li列表 print(lianxiliu([1,2,3,4,55,66,77,88,11,33,22])) #输出执行函数后的结果 执行结果: [0, 2, 4, 6, 8, 9]
练习七、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def lianxiqi(a): #创建一个新的函数,函数名为lianxiqi,可以使用一个参数,参数名为a b={} #定义一个空的字典 if type(a) == dict: #判断调用函数者传进来的参数是不是字典类型的,如果不是返回:'请传入字典!' for k,v in a.items(): #for循环输出传进来字典的key和value。 if len(v) > 2: #判断传进来字典的value长度大于2的 b[k] = v[:2] #判断成功后将value长度大于2的改为value的前两位 else: b[k] = v #if判断长度小于或者等于2的不改变 else: return '请传入字典!' return b #执行完毕函数后返回b字典。 print(lianxiqi({"k1": "v1v1", "k2": [11,22,33,44]})) #输出执行函数后的结果 执行结果: {'k1': 'v1', 'k2': [11, 22]}
练习八、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def func(arg1, arg2, abc=1): # 定义了函数名和三个参数。 if abc == 10: #判断次数。 return arg1 #if判断满足条件返回arg3 arg3 = arg1 + arg2 a=func(arg2,arg3,abc+1) #a=func()函数执行的返回结果 return a #返回之前func函数执行的结果 print(func(arg1=0, arg2=1)) # 输出执行函数后的结果 执行结果: 34
练习九、
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 } } 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 } } # old_set=set(old_dict) #将字典改成集合 # new_set=set(new_dict) #将字典改成集合 def dic(old,new): #创建一个变量名称,并需要传入两个参数。 if type(old) == dict and type(new) == dict: #判断传进来的参数是不是全是字典格式的。 old_set=set(old) #将字典改成集合 new_set=set(new) #将字典改成集合 a=old_set.difference(new_set) #判断old_set中存在new_set中不存在的,将结果给变量b for i in a: #循环new中有的old中没有的服务器名称: print('服务器',i,'已经不存在是否删除?Y/N\t\t其配置为:\thostname:',old_dict[i]['hostname'],'\tcpu_count:',old_dict[i]['cpu_count'],'\tmem_capicity:',old_dict[i]['mem_capicity']) shuru1=input() #等待用户输入y或者n。 if shuru1.upper() == 'Y': #用户输入的是y转成大写。 old_dict.pop(i) #将old字典中的对用的服务器名称删除 elif shuru1.upper() == 'N': #用户输入的是n转成大写。 pass #什么都不做 else: #用户输入的其他的。 print('请正确输入!') #提示用户正确输入 dic(old,new) #函数本身重新调用本身函数 dic2(old,new) #执行完毕以上代码后执行dic2函数并将调用dic函数的参数传给dic2 else: #传进来的参数不是字典格式。 return '您传入的格式不正确!' #结束函数返回传入的参数不正确 return old #整个函数执行完毕,将数据返回给调用函数者。 def dic2(old,new): old_set=set(old) #将字典改成集合 new_set=set(new) #将字典改成集合 b=new_set.difference(old_set) #判断new_set中存在old_set中不存在的,将结果给变量b for i in b: #循环old中有的new中没有的服务器名称: print('是否新建',i,'Y/N?\t配置为:\thostname:',new_dict[i]['hostname'],'\tcpu_count:',new_dict[i]['cpu_count'],'\tnew_capicity:',new_dict[i]['mem_capicity'])#自定义输出 shuru2=input() #等待用户输入 if shuru2.upper() == 'Y': #用户输入的是y转成大写。 old_dict[i] = new_dict[i] #在old字典中添加对应的服务器名称和值 elif shuru2.upper() == 'N': #用户输入的是n转成大写。 pass #什么都不做 else: #用户输入的其他的。 return '请正确输入!' #提示用户正确输入 dic2(old,new) #函数本身重新调用本身函数 dic3(old,new) #执行完毕以上代码后执行dic2函数并将调用dic函数的参数传给dic3 def dic3(old,new): for old_key in old: #循环old字典中现有的key for new_key in new: #循环new字典中现有的key if new_key == old_key : #判断old循环的key和new循环的key是相同的。 for old_key2,old_value in old[old_key].items(): #for循环取出old字典中对应key的value,value是字典所以使用items()方法取出第二层的key和value for new_key2,new_value in new[new_key].items(): #for循环取出new字典中对应key的value,value是字典所以使用items()方法取出第二层的key和value if old_key2 == new_key2: #判断取出的key是相同的,如果不相同就跳过。重新循环new字典中对应的key下的value下的key if old_value == new_value : #判断value是一样的。 break #跳出这次循环 else: #key一样value不一样。 print('old_dic中',new_key,'服务器的',old_key2,'已被换掉','是否更新?Y/N')#自定义输入 shuru3=input() #等待用户输入 if shuru3.lower() == 'y': #用户输入的任何字母转换成小写,是y old[new_key][new_key2] = new_value #是y修改old字典中对应的key的value下的key的值 elif shuru3.lower() == 'n': #用户输入的任何字母转换成小写,是n pass #什么都不做 else: #用户输入的其他的任意东西 print('对不起您的输入有误!') #输出输入的有误 dic3(old,new) #函数本身重新调用本身函数 else: #判断old循环的key和new循环的key是不同的。 continue #跳过这一次循环,进行下一次new字典的循环 a=dic(old_dict,new_dict) #函数执行完毕后将结果返回,我们将结果赋值给变量a print('现有的服务器有:') #自定义输出 for inkey in a: #for循环a,因为是字典取出所有的key print('服务器'+inkey+'\t其参数为:hostname:'+old_dict[inkey]['hostname'],'\tcpu_count:',old_dict[inkey]['cpu_count'],'\tmem_capicity',old_dict[inkey]['mem_capicity']) #自定义输出。 执行结果: C:\Python35\python.exe F:/oldboy-Python/py_code/task/task-3.py 服务器 #2 已经不存在是否删除?Y/N 其配置为: hostname: c1 cpu_count: 2 mem_capicity: 80 y 是否新建 #4 Y/N? 配置为: hostname: c2 cpu_count: 2 new_capicity: 80 y old_dic中 #1 服务器的 mem_capicity 已被换掉 是否更新?Y/N y 现有的服务器有: 服务器#4 其参数为:hostname:c2 cpu_count: 2 mem_capicity 80 服务器#3 其参数为:hostname:c1 cpu_count: 2 mem_capicity 80 服务器#1 其参数为:hostname:c1 cpu_count: 2 mem_capicity 800 Process finished with exit code 0