zoukankan      html  css  js  c++  java
  • Python基础-练习题

    一、通过读取列表数据,写一个登录程序:

    users=[    
          ['Amy', '123456'],
          ['Ann', '456789'],
          ['Sarah', '123456abc']   
    ]

    1、登录,输入账号和密码,最多输入3次,3次还没有登录成功,提示次数超数

    2、登录成功,提示:欢迎XXX登录,今日的日期是XXX,程序结束

    3、账号和密码不能为空,要提示不能为空 ---字符串方法

    4、账号和密码输入错误,提示错误,继续登录

    5、输入的账号不存在,提示用户,算输错1次

    编写程序题目分析:

     代码如下:

    import datetime
    users=[
          ['Amy', '123456'],
          ['Ann', '456789'],
          ['Sarah', '123456abc']
    ]
    usernames = []
    passwords = []
    for user in users:
        username,password = user
        usernames.append(username)
        passwords.append(password)
    # print(usernames)
    # print(passwords)
    for i in range(3):
        username = input('请输入用户名:')
        password = input('请输入登录密码:')
        if len(username) == 0 or password.strip() == '':
        #  len() 长度为0 和 空字符串,效果是一样的
            print('用户名或密码不能为空!')
        elif username not in usernames:
            print('用户名不存在')
        else:
            # index = usernames.index(username)
            # pwd = passwords[index]
            # if pwd == password:
            if [username,password] in users:
                print('欢迎%s登录,今天是%s! '%(username,datetime.datetime.today()))
                break
            else:
                print('用户名或密码错误!')
    else:
        print('错误次数过多!')

    二、通过读取文件,进行注册用户以及用户登录

    1、程序用户注册,账号和密码存在文件里面:

    (1)最多输入3次

    (2)输入账号和密码,确认密码,密码长度在6-12位之间(注:密码包含大小写字母,数字)

    (3)输入为空要提示

    (4)用户已经存在不能注册

    (5)两次密码要输入一致

    编写程序题目分析:

    代码如下:

    f = open('users.txt','a+',encoding='utf-8')
    f.seek(0)
    usernames = []
    for line in f.readlines():
        line = line.strip()    # 防止文件里有空行
        if line:
            username = line.split(',')[0]
            usernames.append(username)
    
    for i in range(3):
        username = input('username:').strip()
        password = input('password:').strip()
        cpassword = input('cpassword:').strip()
        if not username or not password or not cpassword:
            print('账号/密码不能为空!')
        elif len(password) <6 or len(password) >12:
            print('密码长度在6-12之间!')
        elif password != cpassword:
            print('两次输入的密码不一致!')
        else:
            l,u,d = False,False,False
            for p in password:
                if p.islower():
                    l = True
                elif p.isupper():
                    u = True
                elif p.isdigit():
                    d = True
            if not l or not u or not d :
                print('密码必包含大小写字母,和数字!')
            elif username in usernames:
                print('用户已存在!')
            else:
                f.write('%s,%s
    '%(username,password))
                print('注册成功!')
                break
    else:
        print('错误次数过多!')
    f.close()

    2、用户登录程序,账号和密码从文件里面取

    (1)最多输入3次

    (2)账号和密码的为空校验

    (3)不存在要提示

    (4)登录成功结束

    编写程序题目分析:

    代码如下:

    f = open('users.txt',encoding='utf-8')
    users = {}
    for line in f.readlines():
        line = line.strip()
        if line:
            username = line.split(',')[0]
            password = line.split(',')[1]
            users[username] = password
    for i in range(3):
        username = input('username:').strip()
        password = input('password:').strip()
        if not username or not password :
            print('账号/密码不能为空!')
        elif len(password) < 6 or len(password) > 12:
            print('密码长度在6-12之间!')
        elif username not in users:
            print('用户不存在!')
        elif password != users.get(username):
            print('密码错误!')
        else:
            print('欢迎登录!')
            break
    else:
        print('错误次数超限!')
    f.close()

    三、写一个管理商品的程序,商品文件格式在(product.json)里面(1、查看商品 2、新增商品 3、修改商品信息 4、删除商品)

    商品文件信息(product.json):

    {
      "mac book":{
        "count": 50,
        "price": 8999
      },
      "矿泉水":{
        "count": 100,
        "price": 1.1
      }
    }

    提供商品的增删改查功能:

    (1)choice = input('请输入你的选择:1、查看商品 2、新增商品 3、修改商品 4、删除商品')

    (2)查看商品,输入商品名称,print单个商品的信息,价格,数量,输入all,查看所有商品

    (3)新增商品,输入商品名称、数量、价格,数量是大于0的整数,价格必须是大于0的数值,如果商品存在,无法添加

    (4)修改商品,输入商品名称、数量、价格,商品存在才可以修改,数量是大于0的整数,价格必须是大于0的数值

    (5)输入商品名称,如果存在,删除

    编写程序题目分析:

    代码如下:

    import json
    
    file_name = 'product.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.dump(data,fw,ensure_ascii=False,indent=4)
    
    # 定义数量函数
    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:    #1.3
                left,right = s.split('.')
                if left.isdigit() and right.isdigit(): # 正整数 0.0
                    if float(s) > 0:
                        return True
    # 定义查看商品函数
    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 add_product():
            product_name = input('请输入商品名称:').strip()
            price = input('请输入商品价格').strip()
            count = 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()
        price = input('请输入商品价格').strip()
        count = 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[product_name] = {"count": count, "price": price}
                    write_products(products)
                    print('商品修改成功!')
                else:
                    print('商品不存在')
            else:
                print('价格/数量不合法!')
        else:
            print('不能为空!')
    
    # 定义删除商品函数
    def del_product():
        product_name = input('请输入商品名称:').strip()
        if product_name:
            products = read_products()
            if 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':del_product()}
    if choice in func_map:
        func_map[choice]
    else:
        print('请输入正确的选项!')

    四、写一个删除日志的脚本,把三天前的日志并且为空的日志删除

    1、首先需要执行造日志的脚本文件:造日志的脚本.py

    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()

    2、编写程序题目分析:

    3、代码如下:

    import os
    import time
    
    day = 60*60*24*3
    
    def str_to_timestamp(str_time,format='%Y-%m-%d'):
        time_tuple = time.strptime(str_time,format)
        return int(time.mktime(time_tuple))
    
    def clean_log(path):
        if os.path.isdir(path):
            for cur_path,dirs,files in os.walk(path):
                for file in files:
                    if file.endswith('.log'):  # android_2020-09-04.log
                        file_time = file.split('.')[0].split('_')[-1]
                        file_time_stamp = str_to_timestamp(file_time)
                        ago_time_stamp = time.time() - day
                        file_abs_path = os.path.join(cur_path,file)
                        if file_time_stamp < ago_time_stamp or os.path.getsize(file_abs_path)==0:
                            if time.strftime('%Y-%m-%d') in file:
                                continue
                            os.remove(file_abs_path)
        else:
            print('路径错误!')
    
    clean_log('logs')

    五、写一个产生双色球号码的程序,输入几就产生多少条:

    1、产生的里面不能有重复的

    2、产生的号码要1 2 3 4 5 6

    3、红色球号码从1--33中选择

    4、蓝色球号码从1--16中选择

    例如:01 02 03 04 05 06 07

    编写程序题目分析:

    代码如下:

    # 第一种方法
    import random
    number = input('number:').strip()
    if number.isdigit() and int(number) >0:
         l = []
         while True:
             red = random.sample(range(1,34),6)
             red.sort()
             blue = random.sample(range(1,17),1)
             result = red + blue
             result = [str(ball).zfill(2) for ball in result]
             seq = ' '.join(result)
             if seq not in l:
                 l.append(seq)
                 print('生成的双色球号码是:红球:%s 蓝球:%s' %(' '.join(result[:6]),result[-1]))
             if int(number) == len(l):
                 break
    # 第二种方法
    import random
    reds = [str(ball).zfill(2) for ball in range(1,34)]
    blues = [str(ball).zfill(2) for ball in range(1,17)]
    
    number = input('number:').strip()
    if number.isdigit() and int(number) >0:
        l = set()
        while int(number) !=len(l):
            red = random.sample(reds,6)
            red.sort()
            blue = random.sample(blues,1)
            result = red + blue
            result = [str(ball).zfill(2) for ball in result]
            seq = ' '.join(result) + '
    '
            l.add(seq)
            print('生成的双色球号码是:红球:%s 蓝球:%s' %(' '.join(result[:6]),result[-1]))
    
    with open('seq.txt','w',encoding='utf-8') as fw:
        fw.writelines(l)

    六、写一个函数,传入一个表名,把整个表里面的数据导出到excel

    1、编写程序题目分析

    2、方法一:export_table_to_excel.py

    import pymysql,xlwt
    table_name = input('请输入你要导出的表名:').strip()
    conn=pymysql.connect(host='118.24.3.40',user = 'jxz',
                            password = '123456',db = 'jxz',
                            charset='utf8',autocommit=True)   #若不插入charset,有可能出现乱码
    
    cur = conn.cursor(pymysql.cursors.DictCursor)
    
    #MySQL判断表是否存在:SELECT table_name FROM information_schema.TABLES WHERE table_name ='yourname';
    table_exist_sql = "SELECT table_name FROM information_schema.TABLES WHERE table_name ='%s';"% table_name
    cur.execute(table_exist_sql)
    if cur.fetchall(): query_sql = 'select * from %s;' % table_name cur.execute(query_sql) data = cur.fetchall() if data: book = xlwt.Workbook() #todo,没有处理表头 sheet = book.add_sheet('sheet1') for index,key in enumerate(data[0]): #写表头 sheet.write(0,index,key) for row,item in enumerate(data,1): #写数据 for col,value in enumerate(item.values()): sheet.write(row,col,value) book.save(table_name+'.xls') print('导出完成!') else: print('表中无数据,无法导出!') else: print('表不存在!') cur.close() conn.close()

    3、方法二:export_table_to_excel.py

    (1)定义tools函数模块:

    import pymysql,xlwt
    import traceback
    
    MYSQL_INFO ={
        'host' :'118.24.3.40',
        'user' :'jxz',
        'password' : '123456',
        'db' : 'jxz',
        'charset':'utf8',
        'port' : '3306',
        'autocommit':True
    }
    
    def execute_sql(sql):
        conn =pymysql.connect(**MYSQL_INFO) # XX=XXX,XX=XX
        cur =conn.cursor(pymysql.cursors.DictCursor)
        try:
            cur.execute(sql)
        except:
            print('sql不正确')
            traceback.print_exc()
        else:
            return  cur.fetchall() # None []
        finally:
            conn.close()
            cur.close()
    
    def write_excel(name,data):
        book = xlwt.Workbook()
        sheet = book.add_sheet('sheet1')
        for index, key in enumerate(data[0]):  # 写表头
            sheet.write(0, index, key)
        for row, item in enumerate(data, 1):  # 写数据
            for col, value in enumerate(item.values()):
                sheet.write(row, col, value)
        book.save(name + '.xls')

    (2)引用tools函数模块:

    import tools
    def main():
        table_name = input('请输入你要导出的表名:').strip()
        table_exist_sql = "SELECT table_name FROM information_schema.TABLES WHERE table_name ='%s';" % table_name
        if tools.execute_sql(table_exist_sql):
            query_sql = 'select * from %s;' % table_name
            data = tools.execute_sql(query_sql)
            if data:
                tools.write_excel(table_name,data)
                print('导出完成!')
            else:
                print('表中无数据,无法导出!')
        else:
            print('表不存在!')
    
    if __name__ == '__main__':
        main()

    七、改写商品管理的程序,改为从数据库里面取数据

    1、方法一:商品管理:product_simple.py

    import json
    import tools
    # 定义读取商品函数
    def read_products():
        sql = 'select * from tmz_product_xzh;'
        data = tools.execute_sql(sql)   # [{'id':1,'product_name':'XXX','count':XX,'price':XX}]
        d = {}
        for item in data:
            name = item.get('product_name')
            count = item.get('count')
            price = float(item.get('price'))
            d[name]={'count':count,'price':price}
        return d
    
    # 定义写入商品函数
    def write_products(data):
        truncate_sql ='truncate table tmz_product_xzh'
        tools.execute_sql(truncate_sql)
        for k,value in data.items():
            count = value.get('count')
            price = value.get('price')
            insert_sql = 'insert into tmz_product_xzh(product_name,count,price) VALUES ("%s",%s,%s);'%(k,count,price)
            tools.execute_sql(insert_sql)
    
    # 定义数量函数
    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:    #1.3
                left,right = s.split('.')
                if left.isdigit() and right.isdigit(): # 正整数 0.0
                    if float(s) > 0:
                        return True
    # 定义查看商品函数
    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 add_product():
            product_name = input('请输入商品名称:').strip()
            price = input('请输入商品价格').strip()
            count = 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()
        price = input('请输入商品价格').strip()
        count = 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[product_name] = {"count": count, "price": price}
                    write_products(products)
                    print('商品修改成功!')
                else:
                    print('商品不存在')
            else:
                print('价格/数量不合法!')
        else:
            print('不能为空!')
    
    # 定义删除商品函数
    def del_product():
        product_name = input('请输入商品名称:').strip()
        if product_name:
            products = read_products()
            if 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':del_product()}
    if choice in func_map:
        func_map[choice]
    else:
        print('请输入正确的选项!')

    2、方法二:product_gooduse.py

    import tools
    
    #获取单个商品信息的函数
    def get_single_product(name):
        sql = 'select * from tmz_product_xzh where product_name = "%s";' % name
        return tools.execute_sql(sql)
    
    # 定义数量函数
    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:    #1.3
                left,right = s.split('.')
                if left.isdigit() and right.isdigit(): # 正整数 0.0
                    if float(s) > 0:
                        return True
    # 定义查看商品函数
    def show_product():
        product_name = input('请输入商品名称:').strip()
        if product_name:
            if product_name == 'all':
                sql = 'select* from tmz_product_xzh;'
                print(tools.execute_sql(sql))
            else:
                product = get_single_product(product_name)
                if product:
                    print('商品信息:',product)
                else:
                    print('您输入的商品不存在!')
        else:
            print('不能为空!')
    
    # 定义新增商品函数
    def add_product():
            product_name = input('请输入商品名称:').strip()
            price = input('请输入商品价格:').strip()
            count = input('请输入商品数量:').strip()
            if product_name and price and count:
                if is_price(price) and is_digit(count):
                    if get_single_product(product_name):
                        print('商品已经存在!')
                    else:
                        insert_sql = 'insert into tmz_product_xzh(product_name,count,price)'
                                    'VALUES ("%s",%s,%s);' % (product_name,count,price)
                        tools.execute_sql(insert_sql)
                        print('商品新增成功!')
                else:
                    print('价格/数量不合法!')
            else:
                print('不能为空!')
    
    # 定义修改商品函数
    def modify_product():
        product_name = input('请输入商品名称:').strip()
        price = input('请输入商品价格:').strip()
        count = input('请输入商品数量:').strip()
        if product_name and price and count:
            if is_price(price) and is_digit(count):
                if get_single_product(product_name):
                    sql = 'update tmz_product_xzh set price=%s,count=%s where product_name="%s";' %(
                        price,count,product_name
                    )
                    tools.execute_sql(sql)
                    print('商品修改成功!')
                else:
                    print('商品不存在!')
    
            else:
                print('价格/数量不合法!')
        else:
            print('不能为空!')
    
    # 定义删除商品函数
    def del_product():
        product_name = input('请输入商品名称:').strip()
        if product_name:
            if get_single_product(product_name):
                sql= 'delete from tmz_product_xzh where product_name = "%s";' %product_name
                tools.execute_sql(sql)
                print('商品已删除!')
            else:
                print('商品不存在!')
        else:
            print('不能为空!')
    # 商品管理
    choice = input('1、查看商品 2、新增商品 3、修改商品 4、删除商品')
    func_map = {'1': show_product, '2': add_product,'3': modify_product,'4':del_product}
    if choice in func_map:
        func_map[choice]()
    else:
        print('请输入正确的选项!')

    八、写一个下载QQ群成员的QQ头像程序,传入一个群号,把这个群里所有人的qq头像下载到本地,如果这个人有群备注,那么图片的名称就是刘海洋.jpg如果没有就取昵称:

    1、编写程序分析:

    2、代码如下:download_imag_to_local.py

    # 写一个程序,传入一个群号,把这个群里所有的人的QQ头像下载到本地
    # 获取群成员信息接口:https://qun.qq.com/cgi-bin/qun_mgr/search_group_members
    # 调用接口:search_group_members(Nick昵称,card群备注)
    # 如果A同学有群备注,那么图片的名称就是:Bob.jpg
    # 如果A同学没有群备注,那么图片名称就是:28.jpg
    # Form Data
    # gc: 1078641913
    # st: 0
    # end: 20
    # sort: 0
    # bkn: 73612145
    # cookie: pgv_pvi=328774656; RK=Bqzk3YEWb+; ptcz=4c3263932d8d5a48b929cd2283f1bde3146c1ee5c4f104796f0c8d95df45c3c8; tvfe_boss_uuid=7d887b37fe60ad85; pgv_pvid=3957380448; pgv_info=ssid=s6095095448; _qpsvr_localtk=0.3003351169111208; p_uin=o1270894070; traceid=830f93d7d9; pgv_si=s2666891264; enc_uin=LqUhmq_so7tn_55OuYQ1UA; uin=o1270894070; skey=@zAKP7lF3z; pt4_token=mxrCcJXWkoh7OkmQxzKPcGAN1wqDHNqMK0hrIJnXZhw_; p_skey=amB*w3nrfpXGRncsrH-elBWWaLZ4w4rFlYsjF0rwo2I_
    # 头像下载地址:https://q4.qlogo.cn/g?b=qq&nk=XXXXXXXXX=140
    import requests,os
    
    # 判断该文件夹是否存在,不存在自动创建
    if not os.path.exists('qq_pics'):
        os.mkdir('qq_pics')
    
    # 进入创建的文件夹里面:
    os.chdir('qq_pics')
    
    max_count = 1000
    gc = 1078641913
    bkn = 73612145
    # 获取群信息
    group_member_url = 'https://qun.qq.com/cgi-bin/qun_mgr/search_group_members'
    size = 40
    cookie = 'pgv_pvi=328774656; RK=Bqzk3YEWb+; ptcz=4c3263932d8d5a48b929cd2283f1bde3146c1ee5c4f104796f0c8d95df45c3c8; tvfe_boss_uuid=7d887b37fe60ad85; pgv_pvid=3957380448; pgv_info=ssid=s6095095448; _qpsvr_localtk=0.3003351169111208; p_uin=o1270894070; traceid=830f93d7d9; pgv_si=s2666891264; enc_uin=LqUhmq_so7tn_55OuYQ1UA; uin=o1270894070; skey=@zAKP7lF3z; pt4_token=mxrCcJXWkoh7OkmQxzKPcGAN1wqDHNqMK0hrIJnXZhw_; p_skey=amB*w3nrfpXGRncsrH-elBWWaLZ4w4rFlYsjF0rwo2I_'
    count = 0
    for j in range(0,max_count+1,size): # 0,20,3
        # 0,20 21,41 42,62 63,83 84,104
        # 0,20 20,40 40,60 60,80 80,100
        data = {'gc':gc,'st':j+count,'end':j+size+count,'bkn':bkn}
        headers = {'cookie':cookie}
        r = requests.post(group_member_url,data,headers=headers)
        members = r.json()
        count +=1
        if 'mems' in members:
            # QQ图片下载的url地址
            pic_url= 'https://q4.qlogo.cn/g?b=qq&nk=%s&s=140'
            # 获取成员信息(列表格式)
            mems = members.get('mems')
            for m in mems:
                qq = m.get('uin')
                # 使用三元表达式:若取到了card就用card名称,取不到就取nick名称
                name = m.get('card') if m.get('card') else m.get('nick')
                r = requests.get(pic_url % qq)
                with open(name + '.jpg','wb') as fw:
                    fw.write(r.content)
                # 下载qq头像
                print('下载完成 %s'%name)
        else:
             print('没有获取到群成员信息!')
             break

    九、写两个接口(登录接口和支付接口)

    1、编写程序分析:

    2、代码如下:

    (1)tools.py

    import hashlib
    
    import pymysql,xlwt
    import traceback
    
    import redis
    
    MYSQL_INFO ={
        'host' :'118.24.3.40',
        'user' :'jxz',
        'password' : '123456',
        'db' : 'jxz',
        'charset':'utf8',
        'port' : 3306,
        'autocommit':True
    }
    
    REDIS_INFO = {
        'host':'118.24.3.40',
        'password':'HK139bc&*',
        'db':0,
        'port':6379,
        'decode_responses':True
    }
    
    def execute_sql(sql,more=False):
        conn =pymysql.connect(**MYSQL_INFO) # XX=XXX,XX=XX
        cur =conn.cursor(pymysql.cursors.DictCursor)
        try:
            cur.execute(sql)
        except:
            print('sql不正确')
            traceback.print_exc()
        else:
            if more:
                return  cur.fetchall() # None [{}]
            return cur.fetchone()      # {‘XX’:'XX'}
        finally:
            conn.close()
            cur.close()
    
    def write_excel(name,data):
        book = xlwt.Workbook()
        sheet = book.add_sheet('sheet1')
        for index, key in enumerate(data[0]):  # 写表头
            sheet.write(0, index, key)
        for row, item in enumerate(data, 1):  # 写数据
            for col, value in enumerate(item.values()):
                sheet.write(row, col, value)
        book.save(name + '.xls')
    
    def my_md5(s):
        s = str(s)
        s = s.encode()
        m = hashlib.md5(s)
        result = m.hexdigest()
        return result
    
    def redis_str(key,value=False,expire_time=None):
        r = redis.Redis(**REDIS_INFO)
        if value:
            r.set(key,value,expire_time)
        else:
            return r.get(key)
    
    def redis_hash():
        pass
    
    def check_session(session_id):
        result = redis_str(session_id)
        if result:
            return result
        return False

    (2)login_and_pay.py

    import flask
    import tools
    import json
    import time
    import uuid
    server = flask.Flask(__name__)
    
    # 登录接口
    @server.route('/api/login',methods=['post','get'])
    def login():
        username = flask.request.values.get('username','')
        password = flask.request.values.get('password','')
        if username.strip() and password.strip():
            p = tools.my_md5(password)
            query_sql = 'select * from app_myuser where username="%s" and password ="%s";'%(username,p)
            user_result = tools.execute_sql(query_sql)
            if user_result:
                session_str = '%s%s%s'%(username,time.time(),uuid.uuid4())
                session_id = tools.my_md5(session_str)
                user_id = user_result.get('id')
                user_result.get('username')
                tools.redis_str(session_id,'{"userid":%s,"username":"%s"}' % (user_id,username) ,600)
                return json.dumps({'code':'0','msg':'登录成功!','sessionid':session_id},ensure_ascii=False)
            else:
                return json.dumps({'code':'-1','msg':'输入的用户名/密码错误!'})
        else:
            return json.dumps({'code':'-1','msg':'不能为空!'})
    
    # 支付接口
    @server.route('/pay',methods=['post','get'])
    def pay():
        sessionid = flask.request.values.get('sessionid','')
        money = float(flask.request.values.get('money'))
        session = tools.check_session(sessionid)
        if session:
            user = json.loads(session)
            user_id = user.get('user_id')
            sql = 'select balance from app_myuser where id = %s;' % user_id
            balance = tools.execute_sql(sql).get('balance')
            if balance >= money:
                update_money = 'update app_myuser set balance = balance - %s where id = %s;' %(money,user_id)
                tools.execute_sql(update_money)
                return json.dumps({'code':0, 'msg':'支付成功!'},ensure_ascii=False)
            else:
                return json.dumps({'code':-1, 'msg':'余额不足!'},ensure_ascii=False)
        else:
            return json.dumps({'code': -1, 'msg': '请重新登录!'},ensure_ascii=False)
    
    if __name__=='__main__':
        server.run(host='0.0.0.0',port=8888,debug=True)
    温故而知新
  • 相关阅读:
    音频波谱通用类|超酷的说
    跟随鼠标的星星实例
    AS3放大镜工具类
    caurina缓动类
    AS3中 is,as,typeof的区别
    Loader ,URLLoader ,URLStream的区别
    (转)AS3正则:元子符,元序列,标志,数量表达符
    动态绘制扇形实例
    AS3.0绘图API
    as3效率优化
  • 原文地址:https://www.cnblogs.com/krystal-xiao/p/13520230.html
Copyright © 2011-2022 走看看