2013-11-22 305 views
3

我想创建一个用户在控制台中输入密码的小程序。然后,程序根据用户输入的内容检查密码是弱,中或强。Python - 检查数字,大写,小写字母和特殊字符的输入

我需要检查输入了多少个大写,小写和数字,然后告诉用户密码的强度。

我已经完成了大部分程序,但由于我没有真正使用过Python,所以我不太熟悉任何先进的东西,请记住,年轻人也必须理解这些代码,这些代码不会很好在编码自己。

到目前为止,我有:

#Welcome the user to the application. 
print("Hello, please enter a password to check how secure it is"); 

#Set a variable called MinPass and set a value of 6. 
MinPass = 6; 

#Set a variable called MaxPass and set a value of 12. 
MaxPass = 12; 

#Set variable EnteredPass and wait for user input 
EnteredPass = input("Password: "); 

while len(EnteredPass) < MinPass: 
    print("Your password is too short, please enter a longer password and try again") 
    EnteredPass = input("Password: "); 

while len(EnteredPass) > MaxPass: 
    print("Your password is too long, please shorten it and try again!"); 
    EnteredPass = input("Password: "); 

请注意,这仅仅是为了教育目的。我不打算制作一个旨在窃取随机密码的程序。这是我校学习课程的一部分!

+2

你还没有做出很多尝试,你呢?你有没有看过['str'类型方法](http://docs.python.org/2/library/stdtypes.html#string-methods)? –

+1

@MartijnPieters他们已经设置了一些变量:)我只是想知道什么是“womabt”是:) –

+0

虽然,我已经回答了您的问题,并且有更多的人可以回答这些问题,我会建议您在提问关于SO的问题之前,先看一下python的文档(或者你正在学习的语言)。即使是最好的程序员,也要继续参考语言的文档。另外,python提供的文档非常好。 –

回答

4

这包含了一些更高级的概念,但应该很容易遵循:

import string 

def long_enough(pw): 
    'Password must be at least 6 characters' 
    return len(pw) >= 6 

def short_enough(pw): 
    'Password cannot be more than 12 characters' 
    return len(pw) <= 12 

def has_lowercase(pw): 
    'Password must contain a lowercase letter' 
    return len(set(string.ascii_lowercase).intersection(pw)) > 0 

def has_uppercase(pw): 
    'Password must contain an uppercase letter' 
    return len(set(string.ascii_uppercase).intersection(pw)) > 0 

def has_numeric(pw): 
    'Password must contain a digit' 
    return len(set(string.digits).intersection(pw)) > 0 

def has_special(pw): 
    'Password must contain a special character' 
    return len(set(string.punctuation).intersection(pw)) > 0 

def test_password(pw, tests=[long_enough, short_enough, has_lowercase, has_uppercase, has_numeric, has_special]): 
    for test in tests: 
     if not test(pw): 
      print(test.__doc__) 
      return False 
    return True 

def main(): 
    pw = input('Please enter a test password:') 
    if test_password(pw): 
     print('That is a good password!') 

if __name__=="__main__": 
    main() 
+1

您的解决方案似乎工作得最好。我已经测试过它,这就是我所追求的,我可以相当了解它!谢谢。 –

0

您可以使用以下功能: -

isalnum() # To check for alpha numeric characters 
    isalpha() # To check for the presence of only alphabets 

为如。

password = input("Enter the password: ") 
    if password.isalnum() == False: 
     print "Password should contain atleast one special character or number" 
    if password.isalpha() == False: 
     print "Password should contains atleast some alphabets." 

要检查的资本,或者你可以使用这个小字母的存在: -

temp = passsword.lower() 
    if temp == password: 
     print "Password should contain atleast one capital letters" 

如何运作? 尽管此代码是不言自明的,有关于它没有什么火箭科学,我将解释它,因为,你似乎是一个初学者对我说: -

str.isalnum() returns False if the string contains some non alphabet characters 
    str.isalpha() returns false if the string does not contain a single alphabet 

通过创建

temp 

我正在存储一个小写密码的副本。因此,如果密码变量包含一些大写字母则

temp == password 

将返回FALSE,你可以找出字符串是否包含某些大写字母或没有。 正如指出的@MartijnPieters,您可以使用

if not password.isalnum(): 

代替

if password.isalnum() == False: 

虽然还可以,第一种方式是更“Python的”

+1

这似乎是一个合适的解决方案...谢谢!我现在会试试这个,并且告诉你它是如何工作的! –

+1

不*测试'==假'。使用'if not password.isalnum():'代替。 –

+0

感谢@MartijnPieters的建议。我已在最终答案中添加了您的建议。 –

-1

写MATLAB代码为了检查输入的密码的强度,代码应该输出:'弱','中等','强'和非常强',这取决于密码的长度,使用大写字母和小写字母,使用数字和特殊字符。

+1

欢迎来到SO!这并没有真正回答OP *如何检查密码的问题。 – zett42

相关问题