Python开发Day03(练习解答)

练习一、

'''普通参数分为形参、实参,有多少形参,就必须要给函数多少个实参。
指定参数为,假如有name和age两个形参,在给函数参数的时候指定name='****',age='**'
默认参数为必须放在参数的尾部,列如一个name形参,一个age形参,我们可以将name形参放在前面,这样用户必须给函数一个名字,age放在后面默认等于18。(name,age=18)
动态参数:在形参前面加一个*号,可以传入多个参数,在函数内类型会变为元组。
    在形为参数前面加两个*号,传入的值为字典类型,相当于可以传入多个参数,并且改为字典格式。def he(**kwargs):
    给动态参数传元组、列表、字典,给他们传入时加*或者**
'''
练习一

练习二、

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)
练习二

练习三、

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}))         #输出执行函数后的结果
执行结果:
您输入的长度过长!
练习三

练习四、

def lianxisi(b):            #创建一个新的函数,函数名为lianxisi,可以使用一个参数,参数名为b
    for i in b:                     #for循环参数b
        if i.isspace():         #判断参数有没有空格,如果有空格就不在执行了,给调用函数者返回:对不起您输入了空格!
            return '对不起您输入了空格!'
    return '输入成功!'      #如果循环完毕没有空格给调用函数者返回:'输入成功!'
print(lianxisi('adsfsdafasd '))         #输出执行函数后的结果
执行结果:
对不起您输入了空格!
练习四

练习五、

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]
练习五

练习六、

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]
练习六

练习七、

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]}
练习七

练习八、

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
练习八

练习九、

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
练习九

 

posted @ 2016-05-08 18:10  WuYongQi。  阅读(223)  评论(0编辑  收藏  举报