我定义了以下函数来检查密码的有效性,但它不适用于有效密码。要使密码有效,它应该只有数字和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'
答案 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'