首页 > 解决方案 > 带日志记录的密码生成器

问题描述

import random, logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s:%(levelname)s:%(message)s')

file_handler = logging.FileHandler('student.log')
file_handler.setFormatter(formatter)

logger.addHandler(file_handler)

mylist = ['Aa', 'Bb', 'Cc', 'Dd', 'Ee', 'Ff', 'Gg', 'Hh', 'Ii', 'Jj', 'Kk', 'Ll', 'Mm', 'Nn', 
'Oo', 'Pp', 'Qq', 'Rr', 'Ss', 'Tt', 'Uu', 'Vv', 'Ww', 'Xx', 'Yy', 'Zz', '1', '2', '3', '4', '5', '6', '7', '8', 
'9', '0', '!', '@', '#', '$', '%', '^', '&', '*', '~']

def generatePassword(num):

    password = ''
    for x in range(mylist):
        return password
logging.debug(generatePassword,16)

当我执行代码时,编译器说 x 是一个未使用的变量。有没有办法来解决这个问题?另外,我如何编写日志记录函数有什么错误吗?

标签: python-3.x

解决方案


您当前未x在循环内使用,因此未使用变量警告。

无论如何,如果您想允许密码可能包含两次相同的字符,或者如果您不这样做,请考虑使用:random.choicesrandom.sample

import random

def generate_password(length, unique_chars_ignore_case=False):
    my_list = [
        'Aa', 'Bb', 'Cc', 'Dd', 'Ee', 'Ff', 'Gg', 'Hh', 'Ii', 'Jj', 'Kk', 'Ll',
        'Mm', 'Nn', 'Oo', 'Pp', 'Qq', 'Rr', 'Ss', 'Tt', 'Uu', 'Vv', 'Ww', 'Xx',
        'Yy', 'Zz', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '!', '@',
        '#', '$', '%', '^', '&', '*', '~'
    ]
    random_func = random.choices if not unique_chars_ignore_case else random.sample
    return ''.join([
        x if len(x) == 1 else x[random.randint(0, 1)]
        for x in random_func(my_list, k=length)
    ])

示例用法允许重复:

>>> generate_password(6)
C9#cs2

示例用法仅唯一字符忽略大小写:

>>> generate_password(6, unique_chars_ignore_case=True))
k*065@

推荐阅读