编写一个Python程序,帮助网站对用户名和密码的复杂性施加一定的规则

编写一个Python程序,帮助网站对用户名和密码的复杂性施加一定的规则,python,Python,要求: 1.要求用户输入用户名,直到用户名以大写字母开头,并且后面的所有字母都是小写字母 2.要求用户输入密码 3.定义以下3条规则 规则1:包含一个大写字母和一个小写字母 规则2:至少包含2位数字 规则3:包含一个非字母或数字的特殊字符 4.密码只有在满足至少两个规则时才有效。检查密码是否符合规则。如果密码满足1个或更少的规则,则显示“无效密码”,并要求用户输入另一个密码,直到用户输入有效密码。如果密码符合2条规则,则显示“有效但弱密码”。否则,显示“强密码” import re u=inpu

要求:

1.要求用户输入用户名,直到用户名以大写字母开头,并且后面的所有字母都是小写字母

2.要求用户输入密码

3.定义以下3条规则

规则1:包含一个大写字母和一个小写字母

规则2:至少包含2位数字

规则3:包含一个非字母或数字的特殊字符

4.密码只有在满足至少两个规则时才有效。检查密码是否符合规则。如果密码满足1个或更少的规则,则显示“无效密码”,并要求用户输入另一个密码,直到用户输入有效密码。如果密码符合2条规则,则显示“有效但弱密码”。否则,显示“强密码”

import re
u=input("Please input your username: ")

pattern = '[A-Z]+[a-z]+$'
if re.search(pattern, u):
    p=input("Please input your password:")
else:
    print ("Invalid username")


if (re.search(("[a-z]" and "[A-Z]"),p) and re.search(r'\d.*?\d', p) and re.search("[$#@]",p)) :
    print ("Strong password")
elif ((re.search(("[a-z]" and "[A-Z]"),p) and re.search(r'\d.*?\d', p)) or (re.search(("[a-z]" and "[A-Z]"),p) and re.search("[$#@]",p)) or (re.search(r'\d.*?\d', p) and re.search("[$#@]",p))):
    print("Valid but weak password")
else:
    print("Invalid password")

我写了这个程序,但是如果像“yLuu”这样的用户名不是以大写字母开头的。 此外,我不知道是否有效的用户名,然后它如何跟随输入密码,因为它的结果是p无法定义

如果用户名像“yLuu”

你的模式是错误的。与
re.search()
(尝试在字符串中的任何点进行匹配)一起使用,它将匹配“任何后跟一个或多个大写字母,后跟一个或多个小写字母,后跟字符串末尾的内容”

正确的模式应该是“
r”^[A-Z][A-Z+]$”
-“行的开头,后跟一个大写字母,后跟一个或多个小写字母,后跟行的结尾”

“另外,我不知道用户名是否有效,以及输入密码的方式,因为p无法定义”

您想使用while循环。伪代码示例:

while True:
    username = get the username
    if username is valid:
        break out of the loop
    else:
        print an error
我把它留给您来将其转换为有效的python代码。注意,第二部分需要类似的内容(参见您的要求:“并要求用户输入另一个密码,直到用户输入有效密码”)

此外,这:

re.search(("[a-z]" and "[A-Z]")
不会做你认为它会做的事。打开pythonshell并键入“[a-z]”和“[a-z]”,查看结果,然后阅读关于“and”运算符的文档

而且在你的密码测试代码中有大量的重复。复制是不好的-嗯,这种复制至少是这样的,当你想更改其中一条规则时,你必须记住在复制的任何地方都要更改它,这样你就会忘记一条或弄错一条(打字错误等)


您有3条规则,密码必须至少填写其中任意两条。改为使用“分数”系统-单独测试每个规则,如果密码通过测试,则增加分数。然后,您只需读取分数就可以知道它是否是无效密码的强弱。

您的代码不起作用,因为您搜索的字符串以大写字母开头,然后以小写字母开头。“yLuu”中有字符串“Luu”,它满足条件

下面是一种方法,可以执行此操作并在用户名有效之前请求用户名:

username_good = False
while not(username_good):
    u=input("Please input your username: ")
    if u[0].isupper() and not(any([x.isupper() for x in u[1:]])):
        print('Valid username')
        username_good = True
    else:
        print('Wrong username')

请不要破坏你的帖子,为别人做更多的工作。通过在Stack Exchange(SE)网络上发布,您已经在a下授予SE分发内容的不可撤销权利(即,无论您未来的选择如何)。根据SE政策,分发非故意破坏版本。因此,任何故意破坏行为都将恢复原状。请参阅:。如果允许删除,则在帖子下方左侧有一个“删除”按钮,但它仅在浏览器中,而不是移动应用程序中。