• day05模块


    一、day04作业分析

    #思考
    #1.先取到文件中的字典
    #作业:对字典的增删改查
    # 写一个管理商品的程序,商品文件格式a.json里面
    # 提供商品得增删改查得功能
    # choice = input("请输入你的选择:1.查看商品2、新增商品、3、修改商品4、删除商品")
    #1.查看商品,输入商品名称,print单个商品的信息,价格,数量,输入all,查看所有商品
    #2.新增商品,输入商品名称、数量、价格,数量是大于0 的整数,价格必须是大于0的数值(商品存在无法添加,输入商品名不能为空)
    #3.修改商品,输入商品名称、数量、价格,商品存在才可以修改,数量是大于0的整数,价格必须是大于0的数值
    #4.输入商品名称,如果存在,删除
    #不要重复代码
    #下周讲数据库redis以及模块,网盘中有安装包,安装mysql和redis
    
    import json
    
    FILE_NAME = 'a.json'#常量:基本不会变化,常量一般写成大写字母
    def read_products():
        with open('FILE_NAME',encoding='utf-8') as fr:
            return json.load(fr)
    
    def write_products(data):
        with open('FILE_NAME','W',encoding='utf-8') as fw:
            json.dumps(data,fw,ensure_ascii=False,indent=4)
    
    def show_product():
        #第一种方案
        # products = read_products()
        # product_name = input("请输入商品名称:").strip()
        # if not product_name:
        #     print("请输入商品名称:")
        # elif product_name == 'all':
        #     print(products)
        # elif product_name not in products:
        #     print('商品不存在')
        # else:
        #     product = products.get(product_name)
        #     print('商品信息:',product)
        # 第二种方案
        product_name = input("请输入商品名称:").strip()
        if product_name:
            products = read_products()if product_name == 'all':
                print(products)
            elif product_name not in products:
                print('商品不存在')
            else:
                product = products.get(product_name)
                print('商品信息:', product)
        else:
            print('商品不存在')
    
    def is_digit(number):
        s = str(number)
        if s.isdigit():
            if int(s) > 0:
                return True
    
    def is_price(price):#>0的整数和小数
        s = str(price)
        if is_digit(S):
            return True
        else:
            if s.count('.') == 1:
                left,right = s.split('.')
                if left.isdigit() and right.isdigit():
                    if float(s)>0:
                        return True
    
    def add_product():
        product_name = input("请输入商品名称:").strip()
        count = input("请输入商品数量:").strip()
        price = input("请输入商品价格:").strip()
        if product_name and price and count:
            if is_price(price) and is_digit(count):
                products = read_products()
                if product_name not in products:
                    products[product_name] = {"count":count,"price":price}
                    write_products(products)
                    print('商品新增成功!')
                else:
                    print('商品已经存在')
            else:
                print('价格/数量不合法')
        else:
            print('不能为空')
    
    
    def modify_product():
        product_name = input("请输入商品名称:").strip()
        count = input("请输入商品数量:").strip()
        price = input("请输入商品价格:").strip()
        if product_name and price and count:
            if is_price(price) and is_digit(count):
                products = read_products()
                if product_name in products:
                    # products.pop(product_name)
                    # products[new_product_name] = {"count": count, "price": price}
                    products[product_name] = {"count":count,"price":price}
                    write_products(products)
                    print('商品修改成功!')
                else:
                    print('商品不经存在')
            else:
                print('价格/数量不合法')
        else:
            print('不能为空')
    
    
    def delete_product():
        product_name = input("请输入商品名称:").strip()
        if product_name:
            products = read_products()
            print("请输入商品名称:")
            if product_name == 'all':
                print(products)
            elif product_name not in products:
                print('商品不存在')
            else:
                products.pop(product_name)
                write_products(products)
        else:
            print('商品不能为空')
    
    choice = input('1.查看商品 2.新增 3.修改 4.删除')
    func_map = {'1':show_product(),'2':add_product(),'3':modify_product(),'4':delete_product()}
    if choice in func_map:
        func_map[choice]()
    else:
        print('请输入正确的选项')
    
    #
    # if choice == '1':
    #     show_product()
    # elif choice == '2':
    #     add_product()
    # elif choice == '3':
    #     modify_product()
    # else:
    #     delete_product()

    二、内置函数

    1.必须会的:len type print input open round min max filter may zip exec eval

    a = b = c = False
    # #if a and b and c:   === if all([a,b,c])
    print(all([1,2,3,4]))#判断可迭代的对象里面的值都为真,值为真True
    print(any([1,2,3,4,5]))#只要有一个为真,值为真True
    print(any([0,False,'',[],1]))#True
    print(max(111,12))#返回最大值#111
    print(min([1,2,3,4]))#返回最小值#1
    print(round(11.11988,2))#保留2位小数#11.12
    a = '1'
    print(dir(a))#查看a中可用的方法,.不出来的时候使用#['__add__', '__class__', ...]

    2.exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。exec 返回值永远为 None。

    eval() 函数用来执行一个字符串表达式,并返回表达式的值。

    eval(expression[, globals[, locals]])
    • expression -- 表达式。
    • globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
    • locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
    #在线编程工具
    s = '''
    for i in range(10):
    print(i)
    '''
    exec(s)#用来动态执行python代码的#1~9

    print(eval('[1,2,3]'))#[1,2,3]
    result = eval('1+1')#用来动态执行python代码的
    print(result)#2

    f = open('a.json',encoding='utf-8')
    result = eval(f.read())
    print(result)#{'mac book': {'count': 50, 'price': 8999}, '矿泉水': {'count': 100, 'price': 1.1}}

    3.filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

    map() 会根据提供的函数对指定序列做映射。

    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    #简化代码
    # filter()#过滤,会自动循环你传给它的list,然后list里面的每一个元素传给指定的函数,如果这个函数结果为true,那么就保留这个元素
    def oushu(number):
        if number%2 == 0:
            return True
    l = range(1,11)
    l2 = []
    for i in l:
        if oushu(i):
            l2.append(i)
    result = list(filter(oushu,l))#func_name,list;自动帮你循环list,真保留,假丢掉
    print(l2)
    print(result)
    
    #map()#保存函数的返回值,会自动循环你传给它的list,然后list里面的每一个元素传给指定的函数,把这个函数返回的结果保留下来
    def oushu(number):
        if number%2 == 0:
            return True
    l = range(1,11)
    l2 = []
    for i in l:
        if oushu(i):
            l2.append(i)
    result = list(map(oushu,l))#func_name,list;自动帮你循环list,真保留,假丢掉
    print(l2)
    print(result)
    #str是函数名
    result2 = list(map(str,range(1,11)))#自动循环,把int类型转成了字符串
    print(result2)

    结果:

     4.globals和locals

    globals()#获取当前函数里的全局变量
    locals()#获取当前函数里的局部变量
    def test():
        a = 1
        B = 2
        print(locals())
        print(globals())
    
    test()

    结果:

    5.sorted排序

    '''
    sort 与 sorted 区别:
    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
    list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
    '''
    # sorted()#升序
    a = [5,65,7,43,64,86,13,4,32]#[4, 5, 7, 13, 32, 43, 64, 65, 86]
    print(sorted(a))
    print(sorted(a,reverse=True))#降序
    #练习,排序第一名
    #第一种方法
    d = {
        'fd':100,
        'ds':93,
        'lhy':88,
        'hzy':35
    }
    
    print(d.items())#二维数字dict_items([('fd', 100), ('ds', 93), ('lhy', 88), ('hzy', 35)])
    result = sorted(d.items(),key=lambda x:x[0],reverse=True)
    print(result)
    
    def get_value(x):
        return x[1]
    result1 = sorted(d.items(), key=get_value,reverse=True)
    print(result1)
    
    c = d.items()
    result2 = sorted(c,reverse=True)
    print(result2)

    结果:

     6.zip

    # zip()#压缩
    a = ['fd','hzy','ds']
    b = ['123','456','789']
    c= ['1','2','3']
    for username,password in zip(a,b):
        print(username)
        print(password)
    
    for u in zip(c,a,b):
        print(u)

    结果:

     三、匿名函数

    a = lambda x:x+1
    a1 = lambda  x,y:x+y
    # x入参、x+1返回值
    result = a(1)
    result = a1(1,2)
    print(result)#3
    
    filter(lambda x:str(x),[1,2,3,4,5])
    filter(str,[1,2,3,4,5])

    四、常用模块:import os,random,sys,time,string

    1.random

    #random随机数模块
    print(random.randint(1,10))#包含10,随机的整数
    print(random.uniform(1,10))#随机的小数
    
    print(random.choice(string.ascii_lowercase))#随机选择一个元素,传一个循环就可以
    print(random.sample(string.ascii_uppercase,3))#随机取多个,不能超出循环的最大值,使用:随机验证码
    
    
    l = [random.choice(string.digits) for i in range(4)]#随机取一个,取4次,可能会有重复现象
    l2 =random.sample(string.digits,6)#这个取的元素,它不会重复
    print(''.join(l))
    print(''.join(l2))
    
    print(random.shuffle)#洗牌,打乱顺序
    l = [1,2,3,4,5,6,7,8]
    print('打乱之前的',l)
    random.shuffle(l)
    print('打乱之后的',l)

    结果:

     2.os

    #os模块
    # print(os.listdir('/Users/fangdandan/fangdan/学习python/学习python-天马座/day05'))#获取某个目录下的内容
    # print(os.name)#获取系统名字
    
    #mkdir和makedirs的区别:mkdir如果父目录不存在的话是会报错的,makedirs如果父目录不存在会创建
    # os.mkdir('/Users/fangdandan/Desktop/python')
    # os.mkdir('python/day1')#创建会报错
    # os.makedirs('java')
    # os.makedirs('java/day1')#创建不会报错
    # os.remove('python')#只能删除文件,不能删除文件夹
    # os.rmdir('java)#只能删除空文件夹
    # os.rename('java','python')#可以重命名文件和文件夹
    # os.chdir('/Users/fangdandan/fangdan/学习python/学习python-天马座/day05')#进入到某个目录里面
    # print(os.getcwd())#获取当前所在的目录
    
    # result = os.popen('ifconfig').read()#执行命令,并且可以拿到结果
    # result = os.system('ifconfig')#执行操作系统命令的;reboot重启;ifconfig:ip地址;rm -rf a.json删除文件等
    # #window执行后可能会产生乱码,因为字符集的问题
    # print('!!!!',result)
    #它返回的是命令是否执行成功, 如果返回0,代表执行成功
    
    # print(os.environ)#获取系统环境变量里面配置的内容
    
    # p = 'e:'+os.path.sep+'movies'+os.path.sep+'动漫'
    # print(p)
    # print(os.path.join('e:','movies','动漫','柯南.mp4'))
    
    # print(os.path.abspath('../day05/a.json'))#把相对路径转换成绝对路径
    #/Users/fd/Pycharm/day05/a.json绝对路径
    #../day4/a.json相对路径
    
    
    # print(os.path.split('/Users/fangdandan/fangdan/学习python/学习python-天马座/day05'))#路径和文件名分割开
    # print(os.path.dirname('/Users/fangdandan/fangdan/学习python/学习python-天马座/day05/a.json'))#取父目录
    # print(os.path.sep)#当前系统的路径分割符
    # print(os.path.isfile('a.py'))#判断是不是一个文件
    # print(os.path.isdir('a.py'))#判断是不是一个文件夹
    # print(os.path.exists('a.py'))#文件或文件夹是否存在
    # print(os.path.getsize('a.py'))#获取大小
    # print(os.path.getctime('a.py'))#创建时间#时间戳
    # print(os.path.getmtime('a.py'))#修改时间
    # print(os.path.getatime('a.py'))#最后一次访问时间

    练习:

    #当前目录,当前目录下有哪些文件夹,有哪些文件walk()
    #查找电影
    # for cur_path,dirs,files in os.walk('/Users/fangdandan/fangdan/学习python/学习python-天马座/day05'):
    #     # print(cur_path,dirs,files)
    #     print('在当前%s目录下查找' %cur_path)
    #     for file in files:
    #         if file.endswith('.mp4') or file.endswith('.avi'):
    #             print('发现电影在%s目录下'%cur_path)
    #             break

    3.time

    #时间戳153434353.552323 一串数字,从unix元年到现在的时间
    #格式化好的时间2020-08-29 17:24:38,但是计算起来不方便,所以有了时间戳
    #3234352353+ 60 *60 * 24 * 8
    
    print(time.time())#获取当前的时间戳
    print(int(time.time()))
    print(time.strftime('%Y-%m-%d %H:%M:%S'))#当前格式化时间
    
    seven = int(time.time()) + 60 * 60 * 24 * 7
    print(seven)
    
    str_time = '2020-08-29 17:31:02'
    str_time2 = '2020-08-29'
    time_stamp = 1598693386
    
    #时间元祖
    #时间戳转格式化好的时间
    lt = time.localtime(time_stamp)#当前时区的时间
    bt = time.gmtime(time_stamp)#标准时区的时间
    print(lt)
    print(bt)
    print(time.strftime('%Y-%m-%d %H:%M:%S',lt))
    
    #格式化好的时间转时间戳
    time_tuple = time.strptime(str_time,'%Y-%m-%d %H:%M:%S')
    time_stamp_nwo = time.mktime(time_tuple)
    print(time_stamp_nwo)
    print(time.strptime(str_time2,'%Y-%m-%d'))

    结果:

     4.import的函数不执行的代码方法

    使用__name__ == '__main__'这个判断下面的代码,只有在本文件中会执行,如果import导入到其他的文件中,if下面的测试代码是不会被执行的。

    a = 1
    def func():
        print('abc')
    
    
    def execute_sql(sql):
        print(sql)
    
    # execute_sql('select')
    # execute_sql('delete')
    
    print('__name__',__name__)
    #__name__当前py文件的名字
    if __name__ == '__main__':
        print('abc')
        func()
        execute_sql('select')
        execute_sql('delete')

     5.造日志的代码

    def timestamp_to_str(timestamp=None,format='%Y-%m-%d %H:%M:%S'):
        '''时间戳转格式化好的时间,如果没有传时间戳,就获取当前的格式化时间'''
        if timestamp:
            time_tuple = time.localtime(timestamp) #把时间戳转成时间元组
            result = time.strftime(format,time_tuple) #把时间元组转成格式化好的时间
            return result
        else:
            return time.strftime(format)
    
    
    import time,os,random
    l = ['ios','android','nginx','tomcat','python','blog','apache','mysql','redis']
    
    for i in l:
        p = os.path.join('logs',i)
        os.makedirs(p)
        for j in range(30):
            t = int(time.time())-86400*j
            time_str = timestamp_to_str(t,'%Y-%m-%d')
            log_name = '%s_%s.log'%(i,time_str)
            abs_file_path = os.path.join('logs',i,log_name)
            fw = open(abs_file_path, 'w', encoding='utf-8')
            if random.randint(1,10)%2==0:
                fw.write('胜多负少防守打法双方都')
            fw.close()
  • 相关阅读:
    常用js脚本
    lotus支持的java版本
    解决传递中文参数乱码问题
    Lotus的金额大小写转换
    lotus designer 8.5中创建JAVA代理
    一步一步带你进入Java世界(一)_Java环境配置
    实例 XPages 开发一个通用的 Dojo Tree 风格定制控件
    LOTUS中B/S开发初学者问题收集
    Lotus问题收集
    R6中文参数乱码解决
  • 原文地址:https://www.cnblogs.com/victory-0315/p/13585478.html
Copyright © 2020-2023  润新知