Python 3.x 有条件的密码和用户名验证

Python 3.x 有条件的密码和用户名验证,python-3.x,Python 3.x,我必须创建代码来验证密码是否: 包含至少1个数字 包含至少1个大写字母 包含至少1个小写字母 包含至少1个特殊符号 再次询问用户名和密码(我们输入的前一个),如果第三次尝试后输入错误,它将打印帐户被阻止!(有人能帮我修改代码吗) 重新导入 def main(): 用户名='qqq' 密码='12q@3A' reg=“^(?=.[a-z])(?=.[a-z])(?=.*\d)(?=.[@$!%*?&])[a-Za-z\d@$!%*?&]” #编译正则表达式 pat=重新编译(reg) #搜索正

我必须创建代码来验证密码是否:

  • 包含至少1个数字
  • 包含至少1个大写字母
  • 包含至少1个小写字母
  • 包含至少1个特殊符号
再次询问用户名和密码(我们输入的前一个),如果第三次尝试后输入错误,它将打印帐户被阻止!(有人能帮我修改代码吗)

重新导入
def main():
用户名='qqq'
密码='12q@3A'
reg=“^(?=.[a-z])(?=.[a-z])(?=.*\d)(?=.[@$!%*?&])[a-Za-z\d@$!%*?&]”
#编译正则表达式
pat=重新编译(reg)
#搜索正则表达式
mat=重新搜索(pat,密码)
#验证条件
如有必要:
打印(“密码有效”)
userInput=input(“您的用户名是什么?\n”)
如果userInput==用户名:
对于范围(3,0,-1)内的i:
用户输入=输入(“密码?\n”)
如果userinput==密码:
打破
其他:
打印(“密码错误,请重试”)
如果i==1:
打印(“账户冻结”)
其他:
打印(“你成功了”)
其他:
打印(“这是错误的用户名。”)
其他:
打印(“密码无效!!”)
#驱动程序代码
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

如评论中所述,该任务已经有了成熟的库。而且,从不将密码存储为明文

此脚本将向用户询问3次正确密码,如果用户未能输入有效密码,请打印
帐户已被阻止

import re

def check(password):
    """ Return True if password

        Contains at least 1 number *AND*
        Contains at least 1 capital letter *AND*
        Contains at least 1 small letter *AND*
        Contains at least 1 special symbol

        False otherwise
    """

    return bool(re.search(r'\d', password) and
                re.search(r'[A-Z]', password) and
                re.search(r'[a-z]', password) and
                re.search(r'[@$!%*#?&]', password))

username = input('Please enter your username: ')

for attempt in range(1, 4):
    password = input('Please enter your password: ')
    if check(password):
        print('Password is OK!')
        break
    print('Invalid password, attempts left {}'.format(3 - attempt))
else:
    print('Account blocked!')
打印(例如):


或:


您当前的代码有什么问题?请具体说明。不要重新发明轮子:密码无论如何都应该被散列。。。在不哈希密码的情况下强制执行这些规则是无用的
Please enter your username: Andrej
Please enter your password: we
Invalid password, attempts left 2
Please enter your password: wew
Invalid password, attempts left 1
Please enter your password: wew
Invalid password, attempts left 0
Account blocked!
Please enter your username: Andrej
Please enter your password: A1@a
Password is OK!