zoukankan      html  css  js  c++  java
  • 路飞学城Python-Day12(practise)

    # 函数基础
    # 1.写函数,计算传入数字参数的和(动态传参)
    # def sum_num(x,y):
    # return x+y
    # print(sum_num(1,2))
    # 2.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
    # def file(filename,parts):
    # f = open(filename,'w+',encoding='utf-8')
    # f.write(parts)
    # f.close()
    # file('staff',"abc")
    # 3.写函数,检查用户传入的对象(字符串、列表、元祖)的每一个元素是否含有空内容
    # def check(obj):
    # for i in obj:
    # if len(i.split(' ')) >= 2:
    # print('%s内部元素%s有空内容'%(obj,i))
    # check(['1 ','2'])
    #4.写函数,检查传入字典的每一个value的长度,如果大于2,那么保留前两个长度的内容,并将新内容返回给调用者
    # dic = {'k1':'v1v1','k2':[11,22,33,44]}
    # # PS:字典中的value只能是字符串或列表
    # for k,v in dic.items():
    # if len(v)>2:
    # dic[k] = v[0:2]
    # print(dic)
    # 5.解释闭包的概念
    # 闭包:关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量
    # 参数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。
    # 而当这个内部函数执行时,它仍然必须访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值
    # 但是也会受外部函数的影响
    # -------------------------------------------------------------------------------------------------------------------------------
    #写函数,检查传入字典的每一个value的长度,如果大于2,那么保留前两个长度的内容,并将新内容返回给调用者
    # dic = {'k1':'v1v1','k2':[11,22,33,44]}
    # # PS:字典中的value只能是字符串或列表
    # for k,v in dic.items():
    # if len(v)>2:
    # dic[k] = v[0:2]
    # print(dic)
    # 5.解释闭包的概念
    # 闭包:关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量
    # 参数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。
    # 而当这个内部函数执行时,它仍然必须访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值
    # 但是也会受外部函数的影响
    # -------------------------------------------------------------------------------------------------------------------------------
    # 函数进阶
    # 1.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元祖i,例如:[('红心',2),('草花',2),...('黑桃A')]
    # def poke ():
    # poke_1 = ['红心','草花','黑桃','方片']
    # poke_num = [2,3,4,5,6,7,8,9,10]
    # poke_dig = ['A','K','J','Q']
    # poke_special = ['JOKER1','JOKER2']
    # poke_l1 = []
    # for i in poke_1:
    # for l in poke_num:
    # poke_tuple =(i,l)
    # poke_l1.append(poke_tuple)
    # for j in poke_1:
    # for k in poke_dig:
    # poke_tuple_2 = tuple((j+k).strip().split(','))
    # poke_l1.append(poke_tuple_2)
    # for m in poke_special:
    # poke_l1.append(tuple(m.strip().split(',')))
    # print(poke_l1)
    # poke()
    # -------------Low版-------------------------
    # def cards():
    # num = []
    # for i in range(2,11):
    # num.append(i)
    # num.extend(['J','Q','K','A'])
    # type = ['红心','草花','方块','黑桃']
    # result = []
    # for i in num:
    # for j in type:
    # result.append((j,i))
    # return result
    # print(cards())
    # -------------高级版-但是有bug('黑桃', 'A')!=('黑桃A')-----------
    # 2.写函数,传入n个数,返回字典{'max':最大值,'min':最小值}
    # def foo(*args):
    # dic = {'max':None,'min': None}
    # dic['max'] = max(args)
    # dic['min'] = min(args)
    # return dic
    # print(foo(1,2,3,5,7,3,2,10))
    # 3.写函数,专门计算图形的面积
    # 其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
    # 调用函数area(‘圆形’,圆半径) 返回圆的面积
    # 调用函数area(‘正方形’,边长) 返回正方形的面积
    # 调用函数area(‘长方形’,长,宽) 返回长方形的面积
    # def area():
    # import math
    # def round_area():
    # rad = int(input('请输入半径>>'))
    # area_round = math.pi*rad*rad
    # print('圆形面积是'+str(area_round))
    # def square_area():
    # side = int(input('请输入边长>>'))
    # area_square = side*side
    # print('正方形的面积是'+str(area_square))
    # def rectangle_area():
    # length = int(input('请输入长'))
    # width = int(input('请输入宽'))
    # area_rectangle = length*width
    # print('长方形的面积是'+str(area_rectangle))
    # area_choice = input('请选择需要计算的图形 1.圆形 2.正方形 3.长方形')
    # if area_choice == '1':
    # round_area()
    # elif area_choice =='2':
    # square_area()
    # elif area_choice =='3':
    # rectangle_area()
    # else:
    # print('错误的命令!')
    # area()
    # 4.写函数,传入一个参数n,返回n的阶乘
    # def cal(x):
    # sum = 1
    # for i in range(1,x+1):
    # sum = sum*i
    # print(sum)
    # cal(10)
    # 5.编写装饰器,为多个函数加上认证功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
    # def wapper(func):
    # def inner(*args,**kwargs):
    # import json
    # status = False
    # if status ==True:
    # res = func(*args, **kwargs)
    # return res
    # else:
    # i = 0
    # while i<3:
    # with open('user_info', 'r', encoding='utf-8') as f:
    # info = json.load(f)
    # user = [i for i in info]
    # username = input('请输入用户名>>>').strip()
    # password = input('请输入密码>>>').strip()
    # if username in user and info[username] ==password:
    # print('登陆成功')
    # status = True
    # res = func(*args, **kwargs)
    # return res
    # else:
    # print('登录失败,请重试')
    # i += 1
    # return inner
    # @wapper
    # def login():
    # print('欢迎登陆!')
    # @wapper
    # def logout():
    # print('登出!')
    #
    # login()
    # logout()
    # ---------------------------------------
    # 生成器和迭代器
    # 1.生成器和迭代器的区别?
    # 生成器都是迭代器,都是列表、字典、字符串虽然都是迭代对象,但是都不是迭代器,因为不能使用next()方法,但是可以使用iter()函数将它们变成迭代器
    # 迭代器就是一个数据流,生成迭代器的时候不需要规定终止点,没有终止也不需要终止条件,这样的就表示为数据流。
    # 这是因为Python的Iterator对象表示的是一个数据流,iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出错误,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个序列,所以Iterator的计算是惰性的,只有在需要返回下一个数据时才回去计算。
    # 总结:
    # 凡是可以作用for循环的对象都是Iterator类型;
    # 生成器一定是迭代器,迭代器不一定是生成器(可以自己写对象)
    # 2.生成器有几种方式获取value?
    # 1.for循环
    # 2.next()
    # 3.__next__()
    # 3.通过生成器写一个日志调用方法,支持以下功能
    # 根据指令向屏幕输出日志
    # 根据指令向文件输出日志
    # 根据指令同时向文件&屏幕输出日志
    # 以上日志格式如下
    # 2017-10-19 22:07:38 [1] test log db backup 3
    # 2017-10-19 22:07:40 [2] user alex login success
    # #注意:其中[1],[2]是指自日志方法第几次调用,每调用一次输出一条日志
    # 代码结构如下:
    # def logger(filename, channel='file'):
    # """
    # 日志方法
    # :param filename: log filename
    # :param channel: 输出的目的地,屏幕(terminal),文件(file),屏幕+文件(both)
    # :return:
    # """
    # pass
    #
    # # # 调用
    # #
    # #
    # # log_obj = logger(filename="web.log", channel='both')
    # # log_obj.__next__()
    # # log_obj.send('user alex login success')


    import datetime
    count = 0


    def logger(filename, channel):
    global count
    while True:
    count += 1 # 日志方法第几次调用
    mes = yield # 接收消息
    info = '%s [%s] %s'% (datetime.datetime.now(), count, mes)

    def file(): # 输出到文件
    with open(filename, "a", encoding="utf-8") as f:
    f.write(" %s" % info)

    def terminal(): # 输出到终端
    print(info)

    if channel == "file": # 输出到文件
    file()
    elif channel == "terminal": # 输出到终端
    terminal()
    elif channel == "both": # 都输出
    file()
    terminal()
    log_obj = logger(filename="test_file", channel='both')
    log_obj.__next__()
    log_obj.send('user alex login success') # 发送消息
    log_obj.send('test log db backup 3')







    # 内置函数
    # 1,用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb
    # name=['alex','wupeiqi','yuanhao','nezha']
    # def change(x):
    # return x+'_sb'
    # res = map(change,name)
    # print(list(res))

    # 2,用filter函数处理数字列表,将列表中所有的偶数筛选出来
    # num = [1,3,5,6,7,8]
    # def func(x):
    # if x % 2 == 0:
    # return x
    # print(list(filter(func,num)))
    # 3,如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
    # portfolio = [
    # {'name': 'IBM', 'shares': 100, 'price': 91.1},
    # {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    # {'name': 'FB', 'shares': 200, 'price': 21.09},
    # {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    # {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    # {'name': 'ACME', 'shares': 75, 'price': 115.65}
    # ]
    # 计算购买每支股票的总价
    #   用filter过滤出,单价大于100的股票有哪些
    # def sum():
    # for i in portfolio:
    # print(i['name'],i['shares']*i['price'])
    # f = filter(lambda d:d['price']>=100,portfolio)
    # print(list(f))
    Win a contest, win a challenge
  • 相关阅读:
    调整JVM占用内存空间方法
    java基础1.5版后新特性 自动装箱拆箱 Date SimpleDateFormat Calendar.getInstance()获得一个日历对象 抽象不要生成对象 get set add System.arrayCopy()用于集合等的扩容
    java异常处理 throw RuntimeException时不需要同时方法中声明抛出throws 异常等待调用者catch进行捕获 子父类异常问题
    java自定义泛型 面试题:接收任意数组进行反转 泛型通配符
    javabeans 内省 introspector BeanUtils
    面试题:私有构造方法类外部能访问吗,用什么方法?反射
    java基础 java中枚举的应用 抽象方法问题
    【进阶修炼】——改善C#程序质量(7)
    【进阶修炼】——改善C#程序质量(6)
    【进阶修炼】——改善C#程序质量(5)
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/9286953.html
Copyright © 2011-2022 走看看