【问题标题】:Python - Checking an input for numbers, uppercase, lowercase letters and special charactersPython - 检查数字、大写、小写字母和特殊字符的输入
【发布时间】:2013-12-07 13:49:20
【问题描述】:

我正在尝试创建一个用户在控制台中输入密码的小程序。然后程序会根据用户输入的内容检查密码是弱密码、中等密码还是强密码。

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

我已经完成了大部分程序,但是由于我很久没有真正使用过 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: ");

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

【问题讨论】:

  • 您自己还没有做太多尝试,是吗?你看过str type methods了吗?
  • @MartijnPieters 他们设置了一些变量 :) 我只是想知道“womabt”是什么 :)
  • 虽然,我已经回答了你的问题,并且有更多的人可以回答这些问题,我建议你看一下 python 的文档(或你正在学习的任何语言) , 在问关于 SO 的问题之前。即使是最优秀的程序员也会不断地参考该语言的文档。另外python提供的文档也很不错。

标签: python numbers uppercase lowercase string-length


【解决方案1】:

您可以使用以下功能:-

    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: 

虽然,第一种方式更“pythonic”

【讨论】:

  • 这似乎是一个合适的解决方案...谢谢!我现在就试试这个,然后回复你它是如何工作的!
  • 不要测试== False。请改用if not password.isalnum():
  • 感谢@MartijnPieters 的建议。我已在最终答案中添加了您的建议。
【解决方案2】:

这包含一些更高级的概念,但应该很容易理解:

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()

【讨论】:

  • 您的解决方案似乎效果最好。我已经测试过了,这就是我所追求的,我可以相对较好地理解它!谢谢。
【解决方案3】:

编写 MATLAB 代码来检查输入密码的强度,根据密码的长度,代码应输出:'weak'、'medium'、'strong'和very strong',同时使用大写和小写字母、数字和特殊字符的使用。

【讨论】:

  • 欢迎来到 SO!这并不能真正回答 OP 如何 检查密码的问题。
猜你喜欢
  • 2016-03-02
  • 2012-02-06
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
相关资源
最近更新 更多