制作有效的密码检查程序。无法让我的程序通过if条件打印有效密码

时间:2017-07-08 17:13:36

标签: python python-3.x

我被分配了以下练习作为家庭作业:

  
      
  1. 某些网站对密码规定了某些规则。编写一个函数来检查字符串是否是有效密码。假设密码规则如下:      
        
    • 密码必须至少包含八个字符。
    •   
    • 密码必须只包含字母和数字。
    •   
    • 密码必须至少包含两位数字。   编写一个程序,提示用户输入密码,如果遵循规则则显示有效密码,否则显示无效密码。
    •   
  2.   

我知道这是一种更有效率的方法,但我刚刚开始,所以我现在不一定需要做那些。只想完成这个问题。

计数器/累加器工作正常,但我没有收到任何错误,但我无法正确处理if条件,因此该程序会打印出有效密码"

password = str(input("Enter in a password to be checked: "))

def valid_password_checker(password):

    from string import ascii_lowercase as alphabet

    digits = '0123456789'  # creates a string of digits
    digit = 0  # acc for digits
    length = 0 # acc for length

    for char in password:  # calls on each character in string
        if char in alphabet:
            length += 1
        if char in digits:
            digit += 1
            if digit >= 2:
                flag = True
                if length >= 8 and digit is True:
                    print("valid password")
                else:
                    print("Password does not contain enough characters or digits.")
            else:
                print("Password does not contain enough digits.")

valid_password_checker(password)

2 个答案:

答案 0 :(得分:1)

现有代码存在的问题是,变量digit是一个数字,因此您在digit is True语句中执行if始终返回False 。如果您删除digit is True,则现有解决方案将有效。看看我的版本:

def valid(password):
    digits = 0
    characters = 0

    for char in password:
        if char.isalpha():
            characters += 1
        elif char.isdigit():
            digits += 1
            characters += 1

    if characters >= 8:
        if digits >= 2:
            print("Password is valid")
        else:
            print("Password doesn't contain enough digits")
    else:
        print("Password doesn't contain enough characters")

我从原作中做了以下修改:

  • 使用内置函数str.isdigit()检查字符是否为数字。
  • 使用内置函数str.isalpha()检查字符是否为字母表中的字母
  • 移动除for循环之外的计数操作以外的所有内容,以便该函数不会打印多个内容

如果您愿意,可以撤消前两项更改,如果您担心您的老师知道您要求帮助。但是,我不会提供打印的解决方案"密码不包含足够的数字"输入密码中有多个字符。

答案 1 :(得分:0)

你可以这样写:

password = str(input("What is the password that you want to validate: "))

def get_digits(password):
    return [i for i in password if i.isdigit()]


numbers = ''.join(get_digits(password))

if (len(password) < 8) or (len(numbers) < 2):
    print(password, "is an invalid password")
else:
    print(password, "is a valid password")

美好而简单。