【问题标题】:Password check in PythonPython中的密码检查
【发布时间】:2016-03-25 02:31:55
【问题描述】:

我有我的代码,我几乎完成了它只是如果它有一个符号我必须让程序说无效密码。 . . .

password = input("Enter password to test: ")

caps = sum(1 for c in password if c.isupper())
lower = sum(1 for c in password if c.islower())
nums = sum(1 for c in password if c.isnumeric())

r = [caps, lower, nums]

if len(password) < 8: 
    if caps >= 1:
        if lower >= 1:
            if nums >= 1:
                print("Valid Passeord")
            elif nums < 1:
                print("Invalid password")
        elif lower < 1:
            print("Invalid password")
    elif caps < 1:
        print("Invalid password")

如果密码无效,我将如何让它重新运行?

password = input("Enter password to test: ")

caps = sum(1 for c in password if c.isupper())
lower = sum(1 for c in password if c.islower())
nums = sum(1 for c in password if c.isnumeric())

r = [caps, lower, nums]

if not password.isalnum(): # use .isalpha() if you don't want digits in your password
    print("Invalid password")
    if len(password) < 8: 
        if caps >= 1:
            if lower >= 1:
                if nums >= 1:
                    print("Valid password")
                elif nums < 1:
                    print("Invalid password")
            elif lower < 1:
                print("Invalid password")
        elif caps < 1:
            print("Invalid password")

【问题讨论】:

  • 添加代码当前正在执行的操作会很有帮助。它的行为不符合您的预期吗?
  • 理想情况下,您应该对所有密码进行一种加密...比如说使用sha1 并比较它的hexdigest。这将解决您的所有问题!

标签: python string loops


【解决方案1】:

通过符号,我假设您的意思是除了字母和数字之外的任何东西?

# Initialize our valid flag
valid = False

while not valid:
    # Grab password and count everything as your original code
    password = input("Please enter password: ")
    caps = sum(1 for c in password if c.isupper())
    lower = sum(1 for c in password if c.islower())
    nums = sum(1 for c in password if c.isnumeric())

    # If password is not alphanumeric (contains symbols) or shorter than 8 characters, it's not valid
    if not password.isalnum() or len(password) < 8:
        valid = False

    # Otherwise, the password is only valid if everything occurs at least once
    else:
        valid = all(x >= 1 for x in (caps, lower, nums))

    # Check if your password is valid, and if it is, print valid and break out of the loop
    if valid:
        print("Valid Password")
        break
    # Otherwise, print invalid and the loop goes on
    else:
        print("Invalid Password")

【讨论】:

  • 我这样做了,现在如果我只输入“密码”,没有任何提示,这就是我所拥有的
  • 不,只要它的8个字符,只有数字和字母,必须有1位数字,没有符号我很好
  • @MosesSaygbe 所以你想要的只是 8 个字符(只有数字和字母,并且必须有 1 个数字)?大写/小写呢?
  • 哦,谢谢我得到了至少一个上层和一个下层。这一切都对我有用,就在我把你放进去的时候。
  • 试用我编辑的版本(也支持多次尝试)。用我发布的内容替换所有内容 - 早期的建议有错误,不需要额外的缩进,但后来的编辑会处理所有这些。
猜你喜欢
  • 2016-07-22
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2017-11-13
  • 2018-05-19
相关资源
最近更新 更多