• ~~做过的好玩的题~~


    lis = [1, 2]
    for i in lis:
        lis.append(i)
    print(lis)
    # 这是一个死循环,每一次循环,都是再往列表里添加一个元素
    # 当下次循环列表的时候,长度就变了
    # 这样就会一直循环,不会停止
    

    不通过clear()来清空列表

    lst = [1, 2, 3, 4]
    for i in lst:
        lst.pop()
    print(lst)
    # [1, 2]
    

    for 循环是不能够往回走的,比如我第一次for i in lst 那我的 i 拿到的就是0

    无论我列表怎么变,我第二次for i in lst 那我拿到的 i 就是1

    所以 上述循环,先删掉标号3,再删掉标号2,然后就循环完了,就跳出了

    lst = [1, 2, 3, 4]
    for i in lst:
        lst.pop(0)
    print(lst)
    # [3, 4]
    

    原因同上,本质上就是循环两次!

    lst = [1, 2, 3, 4]
    for i in lst:
        lst.remove(i)
    print(lst)
    # [2, 4]
    

    一样的原因~

    lst = [1, 2, 3, 4]
    for i in lst:
        del lst[i]
    print(lst)
    # IndexError: list assignment index out of range
    

    很明显 一步一步循环来看

    第一次循环,没什么问题

    第二次就出问题了,此时若是执行 del lst[i] 删掉的就是列表角标为 3 的元素

    而整个列表的最大角标也才是 2 ,所以就报错了!

    那我们可不可以这么想,我循环一遍列表的长度,然后删最后一个数,不就行了吗?

    那我们就可以这样来操作:

    lst = [1, 2, 3, 4]
    for i in range(len(lst)-1,-1,-1):
        del lst[i]
    print(lst)
    # []
    

    当然我们也可以直接”写死“这一段程序

    lst = [1, 2, 3, 4]
    for i in range(len(lst)):
        del lst[-1]
    print(lst)
    # []
    

    还有一种比较“讨巧”的方式,那就是我人为的复制出一个列表来,然后循环复制出来的列表

    这样既不耽误原来的,也能够达到目的

    lst = [1, 2, 3, 4]
    lst1 = lst.copy()
    for i in lst1:
        lst.remove(i)
    print(lst)
    # []
    

    讲道理熬!如果你对深浅拷贝不是很了解,建议这里直接用深拷贝!

    import copy
    
    lst = [1, 2, 3, 4]
    lst1 = copy.deepcopy(lst)
    for i in lst1:
        lst.remove(i)
    print(lst)
    # []
    

    不通过clear()来清空字典

    dic = dict.fromkeys("12345", 1)
    for i in dic:
        dic.pop()
    print(dic)
    # RuntimeError: dictionary changed size during iteration
    

    报错了?就算没有达成目的,也不能报错啊?(毕竟隔壁的列表都没有报错)

    这是因为,字典的迭代的时候,改变了原来的大小,就会报错

    (虽然列表也变了,但还是不报错,你气不气?)

    那就用取巧的方法呗!

    dic = dict.fromkeys("12345", 1)
    dic1 = dic.copy()
    for i in dic1:
        dic.pop(i)
    print(dic)
    # {}
    

    一招鲜!吃遍天!


    深浅copy


    import copy
    
    a = [1, 2, 3, 4, ['a', 'b']]
    b = a                 # 引用,除非直接给a重新赋值,否则a变则b变,b变则a变
    c = copy.copy(a)      # 浅复制,只会拷贝父对象, 不会拷贝父对象中的子对象,所以若a的子对象变则c 变,但是父对象变c不会变
    d = copy.deepcopy(a)  # 深拷贝,完全拷贝,完全独立于原对象,a变也不变
    a.append(5)           # 改变父对象
    a[4].append('c')      # 改变父对象中的 ['a', 'b']子对象
    
    '''
    a=[1, 2, 3, 4, ['a', 'b','c'],5] 
    b=[1, 2, 3, 4, ['a', 'b','c'],5] 
    c=[1, 2, 3, 4, ['a', 'b','c']] 
    d=[1, 2, 3, 4, ['a', 'b']] 
    '''
    
    

    '''
    
    1.写函数,计算传入数字参数的和。(动态传参)
    
    2.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作
    
    3.写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
    
    4.写函数,检查传入字典的每-个value的长度 如果大于2,那么仅保留前两个长度的内容(对value的值进行截断) ,并将新内容返回给调用者,注意传入的数据可以是字符、list. dict
    
    5.解释闭包的概念
    
    6.写函数,返回一个扑克牌列表,里面有52项,每-项是一个元组
                1.例如: [(红心’,2).(‘草花’,2), .黑桃A']
                
    7.写函数,传入n个数,返回字典'max :最大值, min' :最小值}
               例如:min_ max(2,5,7,8,4)返回:{ 'max' :8, 'min' :2}
               
    8.写函数,专门计算圆形的面积
    。其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积。调用函数area(“圆形 ,圆半径)返回圆的面积
    。调用函数area("正方形,边长)返回正方形的面积。调用函数area(”长方形”,长,宽)返回长方形的面积
        #代码模板
        def area():
        def计算长方形面积():
        pass
    
        def计算正方形面积():
        pass
    
        def计算圆形面积():
        pass
    
    9.写函数,传入-个参数n,返回n的阶乘
    例如:cal(7)
    计算7*6*5*4*3*2*1
    
    10.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功-次,后续的函数都无需再输入用
    户名和密码
    
    11.生成器和迭代器的区别?
    
    12.生成器有几种方式获取value?
    
    13.通过生成器写一个日志调用方法, 支持以下功能
    
    。根据指令向屏幕输出日志。根据指令向文件输出日志
    。根据指令同时向文件&屏 幕输出8志
    
    。以上日志格式如下
    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]是指自日志方法第几次调用,每调用-次输出一条日志
      o代码结构如下
    
          def logger(filename , channel-'file'):
          """
          日志方法
    
          :param filename: log filename
          :param channel: 輸出的目的地,屏幕(terminal), 文件(file), 屏幕+文件(both):
          return:
    
          """
          . .your code...
    
          #调用
    
          log_obj = logger(filename="web.log" , channel= 'both' )
          log_obj._ .next_ _ O
          log_obj.send('user alex login success ')
    
    14.用map来处理字符串列表把列表中所有人都变成sb,比方alex sb
    name=[ ' alex','wupeiqi ','yuanhao', ' nezha' ]
    
    15.用filter函数处理数字列表,将列表中所有的偶数筛选出来
    num=[1,3,5,6,7,8]
    
    16.如下,每个小字典的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的股票有哪些
    
    17.有列表li = ['alex, 'egon', 'smith', pizza', 'alen'],请将以字母“a'开头的元素的首字母改为大写字母;18.有列表Ii = ['alex, 'egon', 'smith', pizza', 'alen'],请以列表中每个元素的第二个字母倒序排序;
    
    19.有名为poetry. txE的文件,其内容如下,请删除第三行;
    昔人已乘黄鹤去,此地空余黄鹤楼。
    黄鹤-去不复返,白云千载空悠悠。
    晴川历历汉阳树,芳草蔞蔞鸚鹉洲。
    日暮乡关何处是?烟波江上使人愁。
    20.有名为username . txt的文件,其内容格式如下,写一个程序,判断该文件中是否存在"alex",如果没有,则将字符
    串"alex"添加到该文件末尾,否则提示用户该用户已存在;
    '''
    
    # 1
    def sum(num, *args):
        for i in args: num = num + i
        print(num)
    
    
    sum(1, 2, 3, 4, 5, 6, 7, 8, 9)
    
    # 2 
    import os
    
    
    def func(filename, old_str, new_str):
        f1 = open(filename, "r+")
        f2 = open(filename + ".new", "w+")
        for i in f1.readlines():
            if old_str in i:
                i = i.replace(old_str, new_str)
            f2.write(i)
        f1.close()
        f2.close()
        os.remove(filename)
        os.rename(filename + ".new", filename)
    
    
    func("123.txt", "肉", "*")
    
    # 3
    def func(a):
        for i in enumerate(a):
            if i[1].isspace():
                print("存在空值")
                break
        else:
            print("没有空值")
    
    
    a = ["", "da", "  "]
    func(a)
    
    # 4
    def func(a):
        if type(a) is dict:
            for i in a.keys():
                if len(a[i]) > 2:
                    a[i] = a[i][0:2]
            return a
        elif type(a) is list:
            count = 0
            for i in a:
                if len(i) > 2:
                    a[count] = i[:2]
                count += 1
            return a
        elif len(a) > 2:
            return a[:2]
    
    
    print(func(a))
    
    # 6
    li = []
    
    card_color = ["黑桃", "红心", "梅花", "方块"]
    card_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A"]
    
    for i in card_color:
        for j in card_num:
            li.append((i, j))
    print(li)
    
    # 7
    def max_min(*args):
        li = []
        for i in args:
            li.append(i)
        li.sort()
        print('{"max":%s,"min":%s}' % (li[len(li) - 1], li[0]))
    
    
    max_min(1, 8, 9, 6, 3, 7, 4, 5, 69, 8, 1, 5, 5, 1, 11, 3312, 64, 84, 0, 0, 6, 26, -1, -8, -9)
    
    # 8
    def area(x, *args):
        def 长方形(x, y):
            print(x * y)
    
        pass
    
        def 正方形(x):
            print(x ** 2)
    
        pass
    
        def 圆形(r):
            print(3.14 * (r ** 2))
    
        pass
    
        eval(x + "(*args)")
    
    
    area("正方形", 3)
    
    # 9
    def func(n):
        num = 1
        for i in range(1, n + 1):
            num *= i
        print(num)
    
    
    func(4)
    
    # 10
    db = {
        "user": "123",
        "pwd": "456",
        "is": True
    }
    
    
    def login(func):
        def inner(*args, **kwargs):
            while db["is"]:
                user = input("姓名:")
                pwd = input("密码:")
                if user == db["user"] and pwd == db["pwd"]:
                    print("登陆成功!")
                    db["is"] = False
                else:
                    print("登录失败!")
    
            func(*args, **kwargs)
    
        return inner
    
    
    @login
    def 长方形(x, y):
        print(x * y)
        pass
    
    
    @login
    def 正方形(x):
        print(x ** 2)
        pass
    
    
    def 圆形(r):
        print(3.14 * (r ** 2))
        pass
    
    
    正方形(3)
    
    长方形(2, 3)
    
    圆形(2)
    
    # 14
    name=[ ' alex','wupeiqi','yuanhao', ' nezha' ]
    
    print(list(map(lambda x:x+" sb",name)))
    
    # 15
    num = [1, 3, 5, 6, 7, 8]
    print(list(filter(lambda x: x % 2 == 0, num)))
    
    # 16
    
    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}]
    
    print(list(filter(lambda i: i["price"] > 100, portfolio)))
    
    # 17
    li = ['alex', 'egon', 'smith', 'pizza', 'alen']
    for index, i in enumerate(li):
        if i.startswith("a"):
            li[index] = i.capitalize()
            print("修改完成!")
    print(li)
    
    # 18
    li = ['alex', 'egon', 'smith', 'pizza', 'alen']
    li2 = []
    for i in li:
        li2.append((i[1], i))
        li2.sort()
        li = []
    for i in li2[::-1]:
        li.append(i[1])
    print(li)
    
    # 19
    import os
    
    f = open("123.txt", "r+")
    f1 = open("123.txt.new", "w+")
    count = 0
    
    for i in f.readlines():
        if count == 2:
            count += 1
    
            continue
    
        count += 1
        f1.write(i)
    f.close()
    f1.close()
    
    os.remove("123.txt")
    os.rename("123.txt.new", "123.txt")
    
    # 20
    f = open("123.txt", "r+")
    if "alex" not in f.read():
        f.write("alex")
        print("已添加")
    else:
        print("有")
    f.close()
    

    小姐姐的一道问题

    v1 = {'alex', '武sir', '黑哥'}
    v2 = []
    while True:
        a = input("请输入:")
        if a.upper() != "N":
            if set(a) < v1:
                v2.append(a)
            else:
                v1.add(a)
        else:
            break
        print(v1, v2)
    
    



  • 相关阅读:
    Linux 之 Memcached
    Linux 之 MySQL主从同步
    Linux 之 rsync实现服务器的文件同步
    A.01.03-模块的输入—模拟量输入
    A.01.02—模块的输入—高端输入
    A.01.01—模块的输入—低端输入
    复位电路
    边沿触发和电平触发的区别
    深入理解傅里叶变换
    电压跟随器
  • 原文地址:https://www.cnblogs.com/jevious/p/11143258.html
Copyright © 2020-2023  润新知