zoukankan      html  css  js  c++  java
  • 第四章练习题

    1、logging模块有几个日志级别?

    debug

    info

    warning

    error

    critical

    2、请配置logging模块,使其在屏幕和文件里同时打印以下格式的日志

    2017-10-18 15:56:26,613 - access - ERROR - account [1234] too many login attempts
     1 import logging
     2 
     3 logger = logging.getLogger('access')
     4 logger.setLevel(logging.ERROR)
     5 
     6 
     7 
     8 ch = logging.StreamHandler()
     9 fh = logging.FileHandler('homework-logging')
    10 
    11 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
    12 ch.setFormatter(formatter)
    13 fh.setFormatter(formatter)
    14 
    15 logger.addHandler(ch)
    16 logger.addHandler(fh)
    17 
    18 
    19 logger.error('account [1234] too many login attempts')
    View Code

    3、json、pickle、shelve三个区别是什么?

    json  pickle shelve都是序列号,将内存里的数据类型变成字符串,或者从文件里反序列化,变成他原有的格式。
    
    json是夸平台的, 只支持 str, int list, dict,tuple 这几种数据类型
    pickle和json用法相同,支持全部数据类型,但只能在python里使用
    shelve和pickle一样,支持所有数据类型,只能在python里使用,可以多次dump和local 还可以进行修改

    4、json的作用是什么

    json 用于跨平台之间的数据传输,数据传输时只能用字符串,利用json可以对内容里的数据转换成字符串或者从字符串转换成原来本有的数据类型

    5、subprocess执行命令方法有几种?

    subprocess.run(['df','-h'])

    a = subprocess.call(['df','-h'])

    6、为什么要设计好目录结构?

    使代码可读性高

    使代码可维护性高

    7、打印出命令行的第一个参数。例如:

    python argument.py luffy
    打印出 luffy

    8、代码如下:

    '''
    Linux当前目录/usr/local/nginx/html/
    文件名:index.html
    '''
    import os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(index.html)))
    print(BASE_DIR)

    i、打印的内容是什么:

    /usr/local/nginx/

    ii、os.path.dirname和os.path.abspath含义是什么?

    os.path.dirname是去掉文件获取路径名,os.path.abspath是获取绝对路径

    9、通过configparser模块完成以下功能

    文件名my.cnf

    [DEFAULT]
    
    [client]
    port = 3306
    socket = /data/mysql_3306/mysql.sock
    
    [mysqld]
    explicit_defaults_for_timestamp = true
    port = 3306
    socket = /data/mysql_3306/mysql.sock
    back_log = 80
    basedir = /usr/local/mysql
    tmpdir = /tmp
    datadir = /data/mysql_3306
    default-time-zone = '+8:00'

    i、修改时区 default-time-zone = '+8:00' 为 校准的全球时间 +00:00

    import configparser
    
    conf =configparser.ConfigParser()
    conf.read('conf.ini')
    
    
    conf['mysqld']['default-time-zone'] = '+00:00'
    
    
    conf.write(open('conf.ini','w'))
    View Code

    ii、删除 explicit_defaults_for_timestamp = true

    import configparser
    
    conf =configparser.ConfigParser()
    conf.read('conf.ini')
    
    
    
    conf.remove_option('mysqld','explicit_defaults_for_timestamp')
    
    conf.write(open('conf.ini','w'))
    View Code

    iii、为DEFAULT增加一条 character-set-server = utf8

    import configparser
    
    conf =configparser.ConfigParser()
    conf.read('conf.ini')
    
    conf['DEFAULT']['character-set-server'] = 'utf8'
    
    
    conf.write(open('conf.ini','w'))
    View Code

     10、写一个6位随机验证码程序(使用random模块),要求验证码中至少包含一个数字、一个小写字母、一个大写字母.

    11、利用正则表达式提取到 luffycity.com ,内容如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>luffycity.com</title>
    </head>
    <body>
    </body>
    </html>
    import re
    
    f = open('index.html','r',encoding='utf-8')
    data = f.read()
    
    
    a = re.findall('luffycity.com',data)
    print(a)
    View Code

    12、写一个用户登录验证程序,文件如下

    1234.json

    {"expire_date": "2021-01-01", "id": 1234, "status": 0, "pay_day": 22, "password": "abc"}
    1. 用户名为json文件名,密码为 password。
    2. 判断是否过期,与expire_date进行对比。
    3. 登陆成功后,打印“登陆成功”,三次登陆失败,status值改为1,并且锁定账号。
      import json,time
      f = open('account.json','r')
      data = json.load(f)
      d = time.strftime('%Y-%m-%d')
      
      
      
      
      
      username = '1234.json'
      password = 'password'
      
      count = 0
      
      while count <3:
      
          if data['status'] == 1:
              print('用户被锁定')
              break
          elif d > data['expire_date']:
              print('账号已过期')
              break
          else:
              _usernam = input('username:').strip()
              _password = input('password').strip()
      
              if _usernam == username and _password == password:
                  print('登陆成功%s' %_usernam)
                  break
      
              else:
                  print('wrong password')
              count += 1
      
      
      else:
          data['status'] = 1
          json.dump(data,open('account.json','w'))
      View Code

    13、

    14、最近luffy买了个tesla,通过转账的形式,并且支付了5%的手续费,tesla价格为75万。文件为json,请用程序实现该转账行为。

    需求如下: 

    目录结构为

    .
    ├── account
    │   ├── luffy.json
    │   └── tesla.json
    └── bin
          └── start.py

    15、

    16、

    17、

    的答案一起

     1 import os,sys
     2 import json
     3 import logging
     4 core_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     5 
     6 sys.path.append(core_path)
     7 from core import  withdraw
     8 
     9 
    10 
    11 _username = 'alex'
    12 _password = 'abc123'
    13 flag_logger = False
    14 
    15 msg = """
    16 1. 账户信息
    17 2.转账
    18 3.提现
    19 """
    20 json_path = os.path.join(core_path,'account')
    21 
    22 
    23 logging.basicConfig(filename=os.path.join(core_path,'logs/bank.log'),level='DEBUG',
    24                     format='%(asctime)s-%(message)s',
    25                     )
    26 
    27 
    28 def loggin(func):
    29     def inner():
    30         global flag_logger
    31         if not flag_logger:
    32             username = input('username:').strip()
    33             password = input('password').strip()
    34             if username == _username and password == _password:
    35                 print('登陆成功,欢迎回来%s'%username)
    36                 logging.debug('登陆成功')
    37                 flag_logger = True
    38             else:
    39                 print('密码错误')
    40 
    41         if flag_logger == True:
    42             func()
    43     return inner
    44 
    45 
    46 
    47 @loggin
    48 def print_info():
    49     luffy_data = json.load(open(os.path.join(json_path,'luffy.json'),'r'))
    50     print('account_balance:',luffy_data['account_balance'])
    51     print('credit_account:',luffy_data['credit_account'])
    52     logging.warning('查询账户')
    53 
    54 @loggin
    55 def transfer_account():
    56     luffy_data = json.load(open(os.path.join(json_path,'luffy.json'),'r'))
    57     tesla_data = {'account_balance':750000}
    58     luffy_data['account_balance'] = luffy_data['account_balance']-tesla_data['account_balance']*(1+0.05)
    59     json.dump(luffy_data,open(os.path.join(json_path,'luffy.json'),'w',encoding='utf-8'))
    60     json.dump(tesla_data,open(os.path.join(json_path,'tesla.json'),'w',encoding='utf-8'))
    61     print('转账成功!,账上余额:%s'%luffy_data['account_balance'])
    62     logging.error('转账成功')
    63 
    64 @loggin
    65 def extract_account():
    66     money = input('moneys>>>')
    67     if money.isdigit():
    68         money = int(money)
    69         withdraw.withdraws_func(money, json_path,logging)
    70 
    71 
    72 
    73 
    74 
    75 
    76 def main():
    77     while True:
    78         print('luffy Bank'.center(30,'-'))
    79         print(msg)
    80         choice = input('>>>').strip()
    81         if not choice:
    82             continue
    83 
    84         elif choice == '1':
    85             print_info()
    86         elif choice == '2':
    87             transfer_account()
    88         elif choice == '3':
    89             extract_account()
    90         elif choice == 'q':
    91             exit()
    92         else:
    93             print('输入❌')
    94 
    95 
    96 main()
    strat
     1 import os,json
     2 def withdraws_func(money,json_path,logging):
     3     luffy_data = json.load(open(os.path.join(json_path,'luffy.json'),'r',encoding='utf-8'))
     4     if money <= luffy_data['credit_account']:
     5         luffy_data['credit_account'] = luffy_data['credit_account'] - money*(1+0.05)
     6         json.dump(luffy_data,open(os.path.join(json_path,'luffy.json'),'w',encoding='utf-8'))
     7         print('提现%s元成功'%money)
     8         logging.debug('提现成功')
     9     else:
    10         print('33[0;31m提现金额大于你的信用额度!33[0m')
    withdraw

     

  • 相关阅读:
    贝塞尔曲线介绍及一阶、二阶推导
    Blender Principled BSDF shader 使用教程
    Blender2.8基础(一)快捷键与基础操作
    blender 2.81 设置为 右键拖动的时候。 右键菜单消失。 此时w键 唤出右键菜单。
    渲染属性 景深 最大尺寸 blender
    光圈,焦距,物距 与景深关系
    焦距与景深关系简单明了图解版以及一个疑问
    Cocos2d-x 创建精灵的五种方法
    【开发者指南】第三章:精灵——学习笔记
    C++标准库和标准模板库
  • 原文地址:https://www.cnblogs.com/aaaajayheng1990/p/8976340.html
Copyright © 2011-2022 走看看