编写一个Python程序,帮助网站对用户名和密码的复杂性施加一定的规则
要求: 1.要求用户输入用户名,直到用户名以大写字母开头,并且后面的所有字母都是小写字母 2.要求用户输入密码 3.定义以下3条规则 规则1:包含一个大写字母和一个小写字母 规则2:至少包含2位数字 规则3:包含一个非字母或数字的特殊字符 4.密码只有在满足至少两个规则时才有效。检查密码是否符合规则。如果密码满足1个或更少的规则,则显示“无效密码”,并要求用户输入另一个密码,直到用户输入有效密码。如果密码符合2条规则,则显示“有效但弱密码”。否则,显示“强密码”编写一个Python程序,帮助网站对用户名和密码的复杂性施加一定的规则,python,Python,要求: 1.要求用户输入用户名,直到用户名以大写字母开头,并且后面的所有字母都是小写字母 2.要求用户输入密码 3.定义以下3条规则 规则1:包含一个大写字母和一个小写字母 规则2:至少包含2位数字 规则3:包含一个非字母或数字的特殊字符 4.密码只有在满足至少两个规则时才有效。检查密码是否符合规则。如果密码满足1个或更少的规则,则显示“无效密码”,并要求用户输入另一个密码,直到用户输入有效密码。如果密码符合2条规则,则显示“有效但弱密码”。否则,显示“强密码” import re u=inpu
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政策,分发非故意破坏版本。因此,任何故意破坏行为都将恢复原状。请参阅:。如果允许删除,则在帖子下方左侧有一个“删除”按钮,但它仅在浏览器中,而不是移动应用程序中。