zoukankan      html  css  js  c++  java
  • 基础知识练习

    1、logger配置

     1 """
     2 logging配置
     3 """
     4 
     5 import logging.config
     6 import logging
     7 
     8 # 定义三种日志输出格式 开始
     9 
    10 standard_format = '[task_id:%(name)s][%(asctime)s][%(threadName)s:%(thread)d][%(filename)s:%(lineno)d]' 
    11                   '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
    12 
    13 simple_format = '[task_id:%(name)s][%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    14 
    15 id_simple_format = '[task_id:%(name)s][%(levelname)s][%(asctime)s] %(message)s'
    16 
    17 
    18 #定义日志文件的路径
    19 LOG_PATH=r'a3.log'
    20 BOSS_LOG_PATH=r'boss.log'
    21 # log配置字典(字典的key不能改)
    22 LOGGING_DIC = {
    23     'version': 1, #定义的版本
    24     'disable_existing_loggers': False,#无用
    25 
    26     #1、定义日志的格式
    27     'formatters': {#字典的key可以随便取
    28         'standard': {#key是固定格式
    29             'format': standard_format#定义的日志格式
    30         },
    31         'simple': {
    32             'format': simple_format
    33         },
    34         'id_simple':{
    35             'format':id_simple_format
    36         },
    37     },
    38     'filters': {},   #过滤,不用
    39 
    40     #2、定义日志输入的目标:文件或者终端
    41     'handlers': {#控制文件写入
    42         #打印到终端的日志
    43         'stream': {
    44             'level': 'DEBUG',
    45             'class': 'logging.StreamHandler',  # 打印到屏幕
    46             'formatter': 'simple'#绑定格式
    47         },
    48         #打印到文件的日志,收集info及以上的日志
    49         'access': {
    50             'level': 'DEBUG',
    51             'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件(日志轮转)
    52             'formatter': 'standard',#绑定日志格式
    53             'filename': LOG_PATH,  # 日志文件
    54             'maxBytes': 1024*1024*5,  # 日志大小 5M#一份日志文件的大小
    55             'backupCount': 5,#最多保存五份日志,写完五份时轮转
    56             'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
    57         },
    58         #打印到文件的日志,收集info及以上的日志,为bosss设置的日志
    59         'boss': {
    60             'level': 'ERROR',
    61             'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件(日志轮转)
    62             'formatter': 'id_simple',#绑定日志格式
    63             'filename': BOSS_LOG_PATH,  # 日志文件
    64             'maxBytes': 1024*1024*5,  # 日志大小 5M#一份日志文件的大小
    65             'backupCount': 5,#最多保存五份日志,写完五份时轮转
    66             'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
    67         },
    68     },
    69 
    70     'loggers': {
    71         #logging.getLogger(__name__)拿到的logger配置
    72         '': {#定义日志的名字
    73             'handlers': ['access', 'stream','boss'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
    74             'level': 'DEBUG',
    75             'propagate': False,  # 向上(更高level的logger)传递
    76         },
    77     },
    78 }
    79 
    80 
    81 
    82 
    83 logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
    84 l1=logging.getLogger('egon')
    85 l1.error('测试')
    logging

    2、while循环购物车

      1 #购物车
      2 goods    =    [
      3 {"name":"电脑","price":1999},
      4 {"name":"鼠标","price":10},
      5 {"name":"游艇","price":20},
      6 {"name":"美女","price":98},
      7 ]
      8 def print_log(msg,log_type='info'):
      9     if log_type=='info':
     10         print('33[32;1m%s33[0m'%msg)
     11     elif log_type=='error':
     12         print('33[31;1m%s33[0m'%msg)
     13 shopping_cart=[]
     14 money=int(input('余额充值:'))
     15 while True:
     16     print('余额:',money)
     17     a='%s--%s---%s'%('商品号','name','price')
     18     print('------商品列表-------'+'
    ',a)
     19     for index,i in enumerate(goods):
     20         print('  %s-------%s----%s'%(index,i['name'],i['price']))
     21     choice=input('请输入购买商品号:')
     22     if choice.isdigit():
     23         choice=int(choice)
     24         if choice>=0 and choice<len(goods):
     25             if money>=goods[choice]['price']:
     26                 money=money-goods[choice]['price']
     27                 shopping_cart.append(goods[choice])
     28                 print('商品%s成功加入购物车'%goods[choice],'info')
     29             else:
     30                 print_log('余额不足请充值!','error')
     31         else:
     32             print_log('没有此商品请重新输入!','error')
     33     if choice=='q':
     34         print('已购买的商品:','info')
     35         a = '%s--%s---%s' % ('商品号', 'name', 'price')
     36         print( '------商品列表-------' + '
    ', a, )
     37         for index, i in enumerate ( shopping_cart ) :
     38             print( '  %s-------%s----%s' % (index, i ['name'], i ['price']) ,'info')
     39         print( '余额:', money )
     40         break
     41     else:
     42         print_log('退出请输入q','info')
     43 
     44 
     45 
     46 #模拟数据库信息的读取与写入
     47 goods_cart = [
     48     {'name': '鼠标', 'price': 10, 'count': 5},
     49     {'name': '游艇', 'price': 20, 'count': 15},
     50     {'name': '美女', 'price': 100, 'count': 25}
     51 ]
     52 goods_cart_list = {}
     53 goods_cart_dict={
     54     'alex':{
     55         'password':'alex123',
     56         'lock_status':'1',
     57         'balance':'4598',
     58         'shopping_cart':goods_cart_list,
     59         }
     60 }
     61 
     62 
     63 for line in goods_cart:
     64     goods_cart_list[line['name']]={
     65         'count':line['count'],
     66         'price':line['price']
     67     }
     68 
     69 for username in goods_cart_dict:
     70     user_info_list = [username]
     71     user_temp_list = []
     72     for item in goods_cart_dict[username]:
     73         if item == 'shopping_cart' and goods_cart_dict[username].get('shopping_cart'):
     74             for name in goods_cart_dict[username][item]:
     75                 user_temp_list.append(name)
     76                 for i in [list(i) for i in goods_cart_dict[username][item][name].items()]:
     77                     print(1,i)
     78                     user_temp_list.extend(i)
     79             user_info_list.extend(user_temp_list)
     80         else:
     81             goods = goods_cart_dict[username][item]
     82             if goods:
     83                 user_info_list.append(goods)
     84     print(user_info_list)
     85 #
     86 
     87 # a=['鼠标','count','5','price','10','游艇','count','5','price','10']
     88 
     89 # def chunks(msg,n):
     90 #     b=[msg[i:i+n] for i in range(0,len(msg),5)]
     91 #     return b
     92 #
     93 # list_cat=chunks(a,5)
     94 # print(list_cat)
     95 # dic={}
     96 # for i in range(0,len(a),5):
     97 #     dic[a[i]]={}
     98 #     for j in range(i+1,i+5,2):
     99 #         dic[a[i]][a[j]]=a[j+1]
    100 # print(dic)
    101 
    102 
    103 
    104 # shopping_cart = {
    105 #     '鼠标':{
    106 #         'count':5,
    107 #         'price':10
    108 #     },
    109 #     '游艇':{
    110 #         'count':5,
    111 #         'price':20
    112 #     }
    113 # }
    购物车

    3、三级菜单作业

     1 menu = {
     2     '北京' : {
     3         '海淀' : {
     4             '五道口' : {
     5                 'soho' : { },
     6                 '网易' : { },
     7                 'google' : { },
     8                 },
     9             '中关村' : {
    10                 '爱奇艺' : { },
    11                 '汽车之家' : { },
    12                 'youku' : { },
    13                 },
    14             '上地' : {
    15                 '百度' : { },
    16                 },
    17             },
    18         '昌平' : {
    19             '沙河' : {
    20                 '老男孩' : { },
    21                 '北航' : { },
    22                 },
    23             '天通苑' : { },
    24             '回龙观' : { },
    25             },
    26         '朝阳' : { },
    27         '东城' : { },
    28         },
    29     '上海' : {
    30         '闵行' : {
    31             '人民广场' : {
    32                 '炸鸡店' : { },
    33                 },
    34             },
    35         '闸北' : {
    36             '火车站' : {
    37                 '携程' : { },
    38                 },
    39             },
    40         '浦东' : { },
    41         },
    42     '山东' : { },
    43     }
    44 
    45 # 方法二
    46 # 逻辑分析:
    47 # layers=[menu,]
    48 # while True:
    49 #     if len(layers) == 0:break
    50 # #1 拿到当前层的菜单字典
    51 #     current_layer = layers[-1]
    52 # #2 循环打印字典的key
    53 #     for key in current_layer.keys():
    54 #         print(key)
    55 #
    56 # #3 接收用户输入
    57 #     choice = input('>>:  ').strip()
    58 #     if choice == 'q':break
    59 #     if choice == 'b':
    60 #         layers.pop()
    61 #         continue
    62 #     if choice not in current_layer:continue
    63 # #4 进入下一层
    64 #     layers.append(current_layer[choice])
    65 
    66 #1,拿到当前层字典
    67 #2,循环打印字典的key
    68 #3,接收用户输入
    69 #4,进入下一层
    70 layers=[menu,]
    71 while True:
    72     if len(layers)==0:break
    73     current_layer=layers[-1]
    74     for key in current_layer:
    75         print(key)
    76     choice=input('>>:').strip()
    77     if choice=='q':
    78         break
    79     if choice=='b':
    80         layers.pop()
    81         continue
    82     if choice not in current_layer:continue
    83     layers.append(current_layer[choice])
    三级菜单

    4、账户登录

     1 dic={
     2     'alex':{'password':'abc','count':0},
     3     'egon':{'password':'abc','count':0},
     4     'jack':{'password':'abc','count':0},
     5     }
     6 
     7 
     8 dic_info={
     9     'username':{'alex':0},
    10 }
    11 
    12 while True:
    13     name=input('username>>:')
    14     if not name in dic:
    15         print('33[35;1m账户不存在33[0m')
    16         continue
    17     with open('db','r') as f:
    18         lock_users= [i.strip() for i in f.read().split('|')]
    19         if name in lock_users:
    20             print('账户%s已被锁定!!!'%name)
    21             break
    22         
    23             
    24     if dic[name]['count']>2:
    25         print('33[31;1m尝试次数过多,被锁定!33[0m')
    26         with open('db','a',encoding = 'utf=8') as f :
    27             f.write('%s |'%name)
    28         break
    29     
    30     password=input('pwd>>:')
    31     if dic[name]['password']==password:
    32         print('33[32;1m welcome  %s  successful33[0m'%name)
    33         # tag=True
    34         # while tag:
    35         #     choose=['quit','exit','q','e']
    36         #     cmd_th=input('cmd>>:')
    37         #     print ( '%s  命令正在执行......' % cmd_th )
    38         #     for i in choose:
    39         #         if cmd_th==i:
    40         #             print('正在退出控制台...')
    41         #             tag=False
    42         # break
    43     else:
    44         print('33[31;1m账户密码错误33[0m')
    45         dic[name]['count'] +=1
    账户登录

    5、字典操作

     1 # -*- coding:UTF-8 -*-
     2 user_info_dict={}
     3 user_info_to_write=list()
     4 with open('shopping_cart','r+',encoding = 'utf-8') as f:
     5     for line in f:
     6         line=line.strip().split(',')
     7         shopping_history=True if len(line) > 4 else False
     8         goods_list = line[4::]
     9         shopping_cart=dict(zip(goods_list[0::2],goods_list[1::2]) if shopping_history else dict())
    10 
    11         user_info_dict[line[0]]={
    12             'password':line[1],
    13             'lock_status':line[2],
    14             'balance':line[3],
    15             'shopping_cart_info':shopping_cart
    16             }
    17     print(user_info_dict)
    18 
    19     for username in user_info_dict.keys():
    20         user_info_list=[username]
    21         user_temp_list=[]
    22         for item in user_info_dict[username].keys():
    23             if item == 'shopping_cart_info' and user_info_dict[username].get('shopping_cart_info'):
    24                 for item in [list(item) for item in user_info_dict[username][item].items()]:
    25                     user_temp_list.extend(item)
    26                 user_info_list.extend(user_temp_list)
    27             else:
    28                 goods = user_info_dict[username][item]
    29                 if goods:
    30                     user_info_list.append(goods)
    31         user_info_to_write.append(user_info_list)
    32 goods_to_write='
    '.join(','.join(item) for item in user_info_to_write)
    33 with open('db','a',encoding = 'utf-8') as f1:
    34     f1.write(goods_to_write+'
    ')
    35 
    36 
    37 
    38 user_info_l={
    39     'alex':{
    40         'password':'alex123',
    41         'lock_status':'1',
    42         'balance':'4598',
    43         'shopping_cart':{
    44             '游艇':'1',
    45             '苹果':'20',
    46             },
    47         },
    48     'egon':{
    49         'password':'egon123',
    50         'lock_status':'1',
    51         'balance':'1000',
    52         'shopping_cart':{
    53             '电脑':'5',
    54             '手机':'10',
    55             },
    56         },
    57     
    58     }
    字典操作

    6、购物车作业

      1 # # -*- coding:utf-8 -*-
      2 # user_info = 'shopping_cart'
      3 # user_info_dict={}#读取数据库信息,并存成字典
      4 # uname_info = [] #存入用户登录信息,用于购物
      5 # while True:
      6 #     with open(user_info,'r',encoding='utf-8') as f:#先读取数据库信息
      7 #         for line in f:
      8 #             shopping_cart = {}
      9 #             line = line.strip().split(',')
     10 #             if len(line) > 3:
     11 #                 goods_list_temp = line[3::]
     12 #                 for i in range(0,len(goods_list_temp),5):
     13 #                     shopping_cart[goods_list_temp[i]]={}
     14 #                     for j in range(i+1,i+5,2):
     15 #                         shopping_cart[goods_list_temp[i]][goods_list_temp[j]] = goods_list_temp[j+1]
     16 #             user_info_dict[line[0]] = {
     17 #                 'password':line[1],
     18 #                 'lock_status':0,
     19 #                 'balance':line[2],
     20 #                 'shopping_car':shopping_cart,
     21 #             }
     22 #
     23 #     msg = '''
     24 #     1 登录
     25 #     2 注册
     26 #     3 购物
     27 #     '''
     28 #     print(msg)
     29 #     choice = input('33[32;1m输入服务编号>>:33[0m').strip()
     30 #
     31 #     #第一步注册
     32 #     if choice == '2':
     33 #         print('------正在注册------')
     34 #         user_list_record = []  #临时存放注册用户信息
     35 #         while True:
     36 #             choice_name = input('33[33;1m请输入用户名>>:33[0m').strip()
     37 #             if choice_name in user_info_dict:#判断用户是否已存在
     38 #                 print('33[31;1m用户已存在,请重新输入...>>:33[0m')
     39 #                 continue
     40 #             choice_pwd_f = input('33[33;1m请输入密码>>:33[0m').strip()
     41 #             choice_passwd_s = input('33[33;1m请再次输入密码>>:33[0m').strip()
     42 #             if choice_pwd_f != choice_passwd_s: #判断密码是否一致
     43 #                 print('33[31;1m密码不一致!请重新输入....33[0m')
     44 #                 continue
     45 #             else:
     46 #                 choice_labary = input('33[33;1m注册成功!
    请输入额度>>:33[0m')
     47 #                 user_list_record=[choice_name,choice_pwd_f,choice_labary]
     48 #                 break
     49 #         user_list_record_write = ','.join(user_list_record)#把注册信息写入到文本
     50 #         with open(user_info,'a',encoding='utf-8') as f:
     51 #             f.write(user_list_record_write+'
    ')
     52 #
     53 #     #第二步登录
     54 #     elif choice == '1':
     55 #         if len(user_info_dict) == 0:
     56 #             print('无用户信息,请注册!')
     57 #             continue
     58 #         print('------欢迎登录------')
     59 #         while True:
     60 #             name_inp = input('33[35;1m用户名>>:33[0m')
     61 #             if name_inp not in user_info_dict:
     62 #                 print('33[31;1m用户不存在!33[0m')
     63 #                 continue
     64 #
     65 #             with open('db','r',encoding='utf-8') as f:#读取锁定账户信息
     66 #                 line = f.read().strip()
     67 #                 if name_inp in line:
     68 #                     print('%s账户已被锁定'%name_inp)
     69 #                     break
     70 #
     71 #             if user_info_dict[name_inp]['lock_status'] > 2:
     72 #                 print('33[31;1m尝试次数过多,账户已被锁定!:33[0m')
     73 #                 with open('db','a',encoding='utf-8') as f:
     74 #                     f.write('%s |'%name_inp)
     75 #                 break
     76 #
     77 #
     78 #             pwd_inp = input('33[35;1m密码>>:33[0m')
     79 #             if pwd_inp == user_info_dict[name_inp]['password']:
     80 #                 uname_info=[name_inp,user_info_dict[name_inp]['balance']]
     81 #                 print('33[36;1m登录成功!用户名:%s ;余额: %s 33[0m'%(uname_info[0],uname_info[1]))
     82 #                 break
     83 #             else:
     84 #                 print('33[31;1m密码错误!重新输入!:33[0m')
     85 #                 user_info_dict[name_inp]['lock_status'] += 1
     86 #
     87 #     #第三步购物
     88 #     elif choice == '3':
     89 #         if len(uname_info) == 0:
     90 #             print('请先登录')
     91 #             continue
     92 #         print('欢迎进入购物商城,祝您购物愉快!')
     93 #         print('33[36;1m用户信息>>>   用户名:%s ;余额: %s 33[0m'%(uname_info[0],user_info_dict[uname_info[0]]['balance']))
     94 #         goods_cart = []  #存放购物信息
     95 #         while True:
     96 #             price_sum = 0 #定义购买商品总价格
     97 #             balance_m = int(user_info_dict[uname_info[0]]['balance'])#把字典内商品价格转换为整型,进行价格运算
     98 #             goods = [
     99 #                 {"name":"电脑","price":'2000'},
    100 #                 {"name":"鼠标","price":'10'},
    101 #                 {"name":"游艇","price":'20'},
    102 #                 {"name":"美女","price":'100'},
    103 #             ]
    104 #             print('-------商品列表-------'+'
    ','编号   名称   价格')
    105 #             for index,line in enumerate(goods):
    106 #                 print(' %s     %s     %s'%(index,line['name'],line['price']))
    107 #             choice_g = input('请输入购买物品编号>>:').strip()
    108 #             if choice_g.isdigit():
    109 #                 choice_g = int(choice_g)
    110 #                 if choice_g >=0 or choice_g < len(goods):
    111 #                     buy_num = int(input('请输入购买件数>>:').strip()) #购买商品的个数
    112 #                     goods[choice_g]['count'] = 0
    113 #                     goods[choice_g]['count'] += buy_num
    114 #                     goods[choice_g]['count'] =str(goods[choice_g]['count'])
    115 #
    116 #                     goods_cart.append(goods[choice_g]) #购买的商品添加到购物车
    117 #                     print('商品%s成功加入购物车,退出结算请输入q'%goods[choice_g])
    118 #                 else:
    119 #                     print('没有此商品!')
    120 #             if choice_g == 'q':
    121 #                 goods_list = '''
    122 #                 ---------------------已购买商品列表-------------------
    123 #                     商品编号       商品名称      商品价格     商品个数
    124 #                 '''
    125 #                 print(goods_list)
    126 #                 for index,line in enumerate(goods_cart):
    127 #                     print('                         %s              %s          %s         %s'%(index,line['name'],line['price'],line['count']))
    128 #                     price_sum += int(line['price'])*int(line['count'])
    129 #                 print('账户余额:%s'%user_info_dict[uname_info[0]]['balance'],''.center(60),'价格总计: %s'%price_sum)
    130 #                 choice_goods_math = input('               商品结算或退出请输入yes/no:').strip()
    131 #                 if choice_goods_math == 'no':break
    132 #                 if choice_goods_math == 'yes':
    133 #                     if balance_m >= price_sum:
    134 #                         user_info_to_write = []
    135 #                         price_inp = balance_m - price_sum
    136 #                         price_inp = str(price_inp)
    137 #                         user_info_dict[uname_info[0]]['balance']=price_inp #把结算后的价格存入字典内
    138 #                         for line in goods_cart:#把购物信息存入购物字典内
    139 #                             user_info_dict[uname_info[0]]['shopping_car'][line['name']] = {
    140 #                                 'count':line['count'],
    141 #                                 'price':line['price']
    142 #                             }
    143 #                         for username in user_info_dict.keys():#读取内存中的用户信息,并写入到数据库中
    144 #                             user_info_list = [username]
    145 #                             user_temp_list = []
    146 #                             for item in user_info_dict[username].keys():
    147 #                                 if item == 'shopping_car' and user_info_dict[username].get('shopping_car'):
    148 #                                     for name in user_info_dict[username][item].keys():
    149 #                                         user_temp_list.append(name)
    150 #                                         for i in [list(i)for i in user_info_dict[username][item][name].items()]:
    151 #                                             user_temp_list.extend(i)
    152 #                                     user_info_list.extend(user_temp_list)
    153 #                                 else:
    154 #                                     good_s = user_info_dict[username][item]
    155 #                                     if good_s:
    156 #                                         user_info_list.append(good_s)
    157 #                             user_info_to_write = user_info_list
    158 #                         goods_to_write = ','.join(user_info_to_write)
    159 #                         with open(user_info,'w',encoding='utf-8') as f:#把购物信息写入数据库中(文本文件)
    160 #                             f.write(goods_to_write+'
    ')
    161 #                         print('购物总消费: %s   余额: %s'%(price_sum,price_inp))
    162 #                         break
    163 #                     else:
    164 #                         print('余额不足请充值! 余额:%s'%user_info_dict[uname_info[0]]['balance'])
    165 #                         inp_money = int(input('请输入充值金额:').strip())
    166 #                         money = inp_money + int(user_info_dict[uname_info[0]]['balance'])
    167 #                         user_info_dict[uname_info[0]]['balance'] =str(money)
    168 #     elif choice == 'q':
    169 #         print('已退出购物商城')
    170 #         break
    171 #     else:
    172 #         print('输入字符非法!')
    173 
    174 import os
    175 
    176 product_list = [['Iphone7',5800],
    177                 ['Coffee',30],
    178                 ['疙瘩汤',10],
    179                 ['Python Book',99],
    180                 ['Bike',199],
    181                 ['ViVo X9',2499],
    182 
    183                 ]
    184 
    185 shopping_cart={}
    186 current_userinfo=[]#用户名和余额
    187 
    188 db_file=r'db.json'
    189 
    190 while True:
    191     print('''
    192     1 登陆
    193     2 注册
    194     3 购物
    195     ''')
    196 
    197     choice=input('>>: ').strip()
    198 
    199     if choice == '1':
    200         #1、登陆
    201         tag=True
    202         count=0
    203         while tag:
    204             if count == 3:
    205                 print('33[45m尝试次数过多,退出。。。33[0m')
    206                 break
    207             uname = input('用户名:').strip()
    208             pwd = input('密码:').strip()
    209 
    210             with open(db_file,'r',encoding='utf-8') as f:
    211                 for line in f:
    212                     line=line.strip('
    ')
    213                     user_info=line.split(',')
    214 
    215                     uname_of_db=user_info[0]
    216                     pwd_of_db=user_info[1]
    217                     balance_of_db=int(user_info[2])
    218 
    219                     if uname == uname_of_db and pwd == pwd_of_db:
    220                         print('33[48m登陆成功33[0m')
    221 
    222                         # 登陆成功则将用户名和余额添加到列表
    223                         current_userinfo=[uname_of_db,balance_of_db]
    224                         print('用户信息为:',current_userinfo)
    225                         tag=False
    226                         break
    227                 else:
    228                     print('33[47m用户名或密码错误33[0m')
    229                     count+=1
    230 
    231     elif choice == '2':
    232         uname=input('请输入用户名:').strip()
    233         while True:
    234             pwd1=input('请输入密码:').strip()
    235             pwd2=input('再次确认密码:').strip()
    236             if pwd2 == pwd1:
    237                 break
    238             else:
    239                 print('33[39m两次输入密码不一致,请重新输入!!!33[0m')
    240 
    241         balance=input('请输入充值金额:').strip()
    242 
    243         with open(db_file,'a',encoding='utf-8') as f:
    244             f.write('%s,%s,%s
    ' %(uname,pwd1,balance))
    245 
    246     elif choice == '3':
    247         if len(current_userinfo) == 0:
    248             print('33[49m请先登陆...33[0m')
    249         else:
    250             #登陆成功后,开始购物
    251             uname_of_db=current_userinfo[0]
    252             balance_of_db=current_userinfo[1]
    253 
    254             print('尊敬的用户[%s] 您的余额为[%s],祝您购物愉快' %(
    255                 uname_of_db,
    256                 balance_of_db
    257             ))
    258 
    259             tag=True
    260             while tag:
    261                 for index,product in enumerate(product_list):
    262                     print(index,product)#打印购物商品列表
    263                 choice=input('输入商品编号购物,输入q退出>>: ').strip()
    264                 if choice.isdigit():
    265                     choice=int(choice)
    266                     if choice < 0 or choice >= len(product_list):continue
    267 
    268                     pname=product_list[choice][0]#商品名
    269                     pprice=product_list[choice][1]#价格
    270 
    271                     if balance_of_db > pprice:
    272                         if pname in shopping_cart: # 原来已经购买过
    273                             shopping_cart[pname]['count']+=1
    274                         else:
    275                             shopping_cart[pname]={'pprice':pprice,'count':1}
    276 
    277                         balance_of_db-=pprice # 扣钱
    278                         current_userinfo[1]=balance_of_db # 更新用户余额
    279                         print("Added product " + pname + " into shopping cart,33[42;1myour current33[0m balance " + str(balance_of_db))
    280 
    281                     else:
    282                         print("买不起,穷逼! 产品价格是{price},你还差{lack_price}".format(
    283                             price=pprice,
    284                             lack_price=(pprice - balance_of_db)
    285                         ))
    286                     print(shopping_cart)
    287                 elif choice == 'q':
    288                     print("""
    289                     ---------------------------------已购买商品列表---------------------------------
    290                     id          商品                   数量             单价               总价
    291                     """)
    292 
    293                     total_cost=0
    294                     for i,key in enumerate(shopping_cart):
    295                         print('%22s%18s%18s%18s%18s' %(
    296                             i,
    297                             key,
    298                             shopping_cart[key]['count'],
    299                             shopping_cart[key]['pprice'],
    300                             shopping_cart[key]['pprice'] * shopping_cart[key]['count']
    301                         ))
    302                         total_cost+=shopping_cart[key]['pprice'] * shopping_cart[key]['count']
    303 
    304                     print("""
    305                     您的总花费为: %s
    306                     您的余额为: %s
    307                     ---------------------------------end---------------------------------
    308                     """ %(total_cost,balance_of_db))
    309 
    310                     while tag:
    311                         inp=input('确认购买(yes/no?)>>: ').strip()
    312                         if inp not in ['Y','N','y','n','yes','no']:continue
    313                         if inp in ['Y','y','yes']:
    314                             # 将余额写入文件
    315 
    316                             src_file=db_file
    317                             dst_file=r'%s.swap' %db_file
    318                             with open(src_file,'r',encoding='utf-8') as read_f,
    319                                 open(dst_file,'w',encoding='utf-8') as write_f:
    320                                 for line in read_f:
    321                                     if line.startswith(uname_of_db):
    322                                         l=line.strip('
    ').split(',')
    323                                         l[-1]=str(balance_of_db)
    324                                         line=','.join(l)+'
    '
    325 
    326                                     write_f.write(line)
    327                             os.remove(src_file)
    328                             os.rename(dst_file,src_file)
    329 
    330                             print('购买成功,请耐心等待发货')
    331 
    332                         shopping_cart={}
    333                         current_userinfo=[]
    334                         tag=False
    335 
    336 
    337                 else:
    338                     print('输入非法')
    339 
    340 
    341     else:
    342         print('33[33m非法操作33[0m')
    购物车作业

    7、logging模块原理

     1 import logging
     2 
     3 #basicConfig功能
     4 logging.basicConfig(
     5     filename='access.log',#指定文件的路径,默认在屏幕上打印
     6     # filemode=''#打印方式w模式或a模式,默认为a追加模式,因此不需要指定
     7 
     8     format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',#定制日志格式
     9     #        日志时间           日志名称        日志级别           模块名      日志具体信息
    10 
    11     datefmt='%Y-%m-%d  %H:%M:%S  %p',#定制时间格式
    12     level=30,#设置日志的级别
    13 )
    14 
    15 #打印示例
    16 '''
    17 2018-08-08  15:09:34  PM - root - DEBUG - 02 logging模块: debug.......
    18 2018-08-08  15:09:34  PM - root - INFO - 02 logging模块: info.......
    19 2018-08-08  15:09:34  PM - root - WARNING - 02 logging模块: 可能要着火
    20 2018-08-08  15:09:34  PM - root - ERROR - 02 logging模块: 着火了,快跑
    21 2018-08-08  15:09:34  PM - root - CRITICAL - 02 logging模块: 火越烧越大
    22 '''
    23 
    24 
    25 
    26 
    27 
    28 
    29 logging.debug('debug.......')#调试信息  10
    30 logging.info('info.......')#程序正常运行的一些信息  20
    31 logging.warning('可能要着火')#程序警告信息(不是致命信息,有可能会出问题) 30
    32 logging.error('着火了,快跑')#程序出现严重错误  40
    33 logging.critical('火越烧越大')#程序已经崩溃  50
    34 
    35 #日志特点:如果日志级别设置为10,那么20,30,40,50日志级别都可以打印,
    36          # 如果日志级别设置为30,只能打印30,40,50级别的日志,
    37          #可以控制打印日志级别,日志打印只能打印设置级别更高的级别的日志,
    38 
    39 
    40 
    41 
    42 
    43 #log: 负责产生日志
    44 logger1=logging.getLogger('xxx')
    45 
    46 #ilter: 过滤日志(不常用)
    47 
    48 
    49 #handler: 控制日志打印到文件or终端
    50 fh1=logging.FileHandler(filename='a1.log',encoding='utf-8')
    51 #往文件打印
    52 fh2=logging.FileHandler(filename='a2.log',encoding='utf-8')
    53 #往终端打印
    54 sh=logging.StreamHandler()
    55 
    56 
    57 #formatter: 控制日志的格式
    58 formatter1=logging.Formatter(
    59     fmt='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
    60     datefmt='%Y-%m-%d %H:%M:%S %p'
    61 )
    62 formatter2=logging.Formatter(fmt='%(asctime)s - %(message)s',)
    63 
    64 
    65 
    66 
    67 #为logger对象绑定handler
    68 logger1.addHandler(fh1)
    69 logger1.addHandler(fh2)
    70 logger1.addHandler(sh)
    71 
    72 #为handler对象绑定日志格式
    73 fh1.setFormatter(formatter1)
    74 fh2.setFormatter(formatter1)
    75 
    76 sh.setFormatter(formatter2)
    77 
    78 
    79 
    80 #日志级别:两层关卡必须都通过,日志才能正常记录
    81 logger1.setLevel(10)
    82 fh1.setLevel(10)
    83 fh2.setLevel(10)
    84 sh.setLevel(10)
    85 
    86 logger1.debug('调试信息')
    logging原理

    8、转账功能

     1 # db_path='db.json'
     2 #
     3 # #1、源账户减钱
     4 # def cal_mon(src_user,money):
     5 #     pass
     6 #
     7 # #2、目标账户加钱
     8 # def add_mon(dst_user,money):
     9 #     pass
    10 #
    11 #
    12 # def transfer(src_user,dst_user,money):
    13 #     cal_mon(src_user,money)
    14 #     add_mon(dst_user,money)
    15 #
    16 #
    17 # transfer('egon','alex',300)
    18 
    19 #原账户减钱
    20 def cal_mon(src_mon,monery):
    21     pass
    22 #新账户加钱
    23 def add_mon(dst_mon,monery):
    24     pass
    25 
    26 def transfer(src_mon,dst_mon,monery):
    27     cal_mon(src_mon,monery)
    28     add_mon(dst_mon,monery)
    29 
    30 transfer('alex','egon',300)
    函数格式

    9、函数递归调用

     1 # -*- coding:utf-8 -*-
     2 #三元运算
     3 def max2(x,y):
     4     return x if x>y else y
     5 
     6 
     7 res=max2(max2(10,11),12)
     8 print(res)
     9 
    10 res=10 if 10 > 11 else 11
    11 print(res)
    12 
    13 #内置函数
    14 #lambda匿名函数的应用
    15 #max,min,sorted
    16 salaries={
    17     'egon':3000,
    18     'alex':100000000,
    19     'wupeiqi':10000,
    20     'yuanhao':2000,
    21 }
    22 
    23 #求工资最高的人是谁
    24 def get(k):
    25     return salaries[k]
    26 
    27 print(max(salaries,key=lambda x:salaries[x]))
    28 
    29 #求工资最低的人是谁
    30 print(min(salaries,key=lambda x:salaries[x]))
    31 
    32 #把字典按照薪资高低排序
    33 print(sorted(salaries,key=lambda x:salaries[x],reverse=True))#降序
    34 
    35 
    36 
    37 
    38 #lambda与map,reduce,filter
    39 nums=[1,2,3,4,5]
    40 
    41 res=map(lambda x:x**2,nums)
    42 print(list(res))
    43 
    44 names=['alex','wupeiqi','yuanhao']
    45 res=map(lambda x:x+'_SB',names)
    46 print(list(res))
    47 
    48 names=['alex','wupeiqi','yuanhao','egon']
    49 res=map(lambda x:x+'_NB' if x=='egon' else x+'_SB',names)
    50 print(list(res))
    51 
    52 
    53 # reduce
    54 #1加到100等于几
    55 from functools import reduce
    56 
    57 res=reduce(lambda x,y:x+y,range(1,101))
    58 print(res)
    59 
    60 l=['my','name','is','alex','alex','is','sb']
    61 res=reduce(lambda x,y:x+' '+y+' ',l)
    62 print(res)
    63 
    64 
    65 #filter
    66 names=['alex_sb','wxx_sb','yxx_sb','egon']
    67 res=filter(lambda x:x.endswith('sb'),names)
    68 
    69 ages=[18,19,10,23,99,30]
    70 res=filter(lambda n:n>=30,ages)
    71 print(list(res))
    72 
    73 salaries={
    74     'egon':3000,
    75     'alex':100000000,
    76     'wupeiqi':10000,
    77     'yuanhao':2000,
    78 }
    79 res=filter(lambda k:salaries[k]>=10000,salaries)
    80 print(list(res))
    函数递归调用

    10、函数装饰器

    叠加多个饰器
     1 # -*- coding:utf-8 -*-
     2 import time
     3 current_user={
     4     'username':None,
     5 }
     6 db_path='db'
     7 
     8 def auth(engine):
     9     # engine='file'
    10     def auth2(func):
    11         def wrapper(*args,**kwargs):
    12             if engine =='file':
    13                 while True:
    14                     if current_user['username']:
    15                         print('用户已登录')
    16                         res = func(*args,**kwargs)
    17                         return res
    18 
    19                     uname=input('用户名>>:').strip()
    20                     pwd=input('密码>>:').strip()
    21                     with open(r'%s'%db_path,'r',encoding='utf-8')as f:
    22                         for line in f:
    23                             line=line.strip('
    ').split(',')
    24                             if uname==line[0] and pwd==line[1]:
    25                                 current_user['username']=uname
    26                                 res=func(*args,**kwargs)
    27                                 return res
    28                         else:
    29                             print('用户名或密码错误')
    30             elif engine=='mysql':
    31                 print('基于MySql的认证')
    32             elif engine=='ldap':
    33                 print('基于Ldap的认证')
    34 
    35         return wrapper
    36     return auth2
    37 auth_src=auth('ldap')
    38 
    39 @auth('mysql')
    40 def index():
    41     time.sleep(2)
    42     print('welcome to index page')
    43     return 122
    44 index()
    有参装饰器
  • 相关阅读:
    ASCII码表
    arm linux 下移植busybox 的tftp
    Makefile中的路径
    Wireshark图解教程(简介、抓包、过滤器)【转载】
    在装有windows跟ubuntu的机器上重新安装windows后修复ubuntu的grub
    在linux里建立一个快捷方式,连接到另一个目录
    ubuntu 迁移部分 / 目录下的存储空间到 /home目录
    /etc/ntp.conf
    ntp 配置 autokey 功能【摘录】
    mips-openwrt-linux-gcc test_usbsw.c -o usbsw 编译问题
  • 原文地址:https://www.cnblogs.com/happyfei/p/9639886.html
Copyright © 2011-2022 走看看