python密码检查失败

时间:2015-01-28 23:23:46

标签: python

我定义了以下函数来检查密码的有效性,但它不适用于有效密码。要使密码有效,它应该只有数字和ascii字母,并且必须长于10个字符。我做错了什么?

def checker(password):
    letters = map(chr, range(97, 123))+ map(chr, range(65, 91))
    numbers = [range(0, 10)]
    if len(password) < 10:
            return 'Too short'
    for i in password:
        if (i not in letters or i not in numbers):
            return 'Password has invalid chars'
        return 'Password is valid'

4 个答案:

答案 0 :(得分:1)

拳头你的数字是一个嵌套列表range(0, 10)是一个单独的列表,你不需要在列表中包装!而且你需要将你的数字作为字符串,所以更有效的方法就是使用string模块来创建你的检查集你还需要将return移到for之外循环:

>>> s=string.ascii_letters+string.digits
>>> s
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

所以你的功能可能如下:

def checker(password):
    s=string.ascii_letters+string.digits
    if len(password) < 10:
            return 'Too short'
    for i in password:
        if i not in s:
            return 'Password has invalid chars'
    return 'Password is valid'

演示:

>>> checker('thisis4thtest')
'Password is valid'
>>> checker('thisis4thtest#')
'Password has invalid chars'
>>> checker('thisis4#')
'Too short'

答案 1 :(得分:0)

第一个问题:条件错误:not in chars or not in numbers始终为真。

第二个问题:你的数字是数字(整数)并包含在另一个列表中,而不仅仅是字符。使用numbers = [str(x) for x in range(10)]

答案 2 :(得分:0)

def checker(password):
    letters = map(chr, range(97, 123))+ map(chr, range(65, 91))
    numbers = [str(x) for x in range(10)]
    if len(password) < 10:
            return 'Too short'
    for i in password:
        if not (i in letters or i in numbers):
            return 'Password has invalid chars'
        return 'Password is valid'

你的逻辑是否有点错误。

答案 3 :(得分:0)

您可以使用正则表达式查找密码是否仅包含ascii字母和数字

import re
check = re.compile('^[\w]{10,}$')
if check.match(password):
    return 'Password is valid'
else:
    return 'Password has invalid chars'