krystal-xiao

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

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\n\'%(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) + \'\n\'
        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)

 

分类:

技术点:

相关文章: