我正在编写一个应该取一个字符串的程序(用户输入的密码)并测试它以确保它符合以下要求: 必须包含至少一个大写字母和一个小写字母 必须以一封信开头 至少八个字符 没有空白 必须包含至少两位数
这是我到目前为止所做的事情,我遇到了无效的语法错误 running = True
while running:
valid = 0
password = str("Enter Password: ")
if len(p) <8:
print ("The password you entered is too short. Please try again.")
running = False
import re
#check if contains a digit
if re.search(r '\d', password):
password = valid
#check if contains uppercase letter
if re.search(r '[A-Z]', password):
password = valid
#check if contains lowercase letter
if re.search(r '[a-z]', password):
password = valid
#check if contains only letters
if re.search(r "[a-z]", password) and re.search(r "[A-Z]", password):
print ("Password must contain at least 2 digits. Please try again.")
#check if contains all lowercase letters
if password.islower():
print ("Password must contain at least 1 uppercase letter. Please try again.")
#check if contains all uppercase letters
if password.isupper():
print ("Password must contain at least 1 lowercase letter. Please try again.")
if password == valid:
print ("Valid Password")
答案 0 :(得分:2)
除了正则表达式中的间距错误外,所显示的代码还存在多个问题,如DevEight所述。
1)password = str("Enter Password: ")
- 这不会要求用户输入密码,这会将名称password
设置为引用字符串"Enter Password: "
。您需要input
代替(raw_input
代表Python版本2.x)。
2)if len(p) <8:
- p
不是已定义的名称。大概你的意思是password
。
3)running = False
- 这是您设置此变量的唯一位置,但它控制着您的while
循环。你的循环只有在false
时退出,所以这将一直循环直到密码太短,最终它会退出。
4)password = valid
- 这会将password
名称设置为引用变量valid
的内容,您将其初始化为0
。然后对整数0
运行进一步的正则表达式搜索,这当然是错误的。
5)if re.search(r "[a-z]", password) and re.search(r "[A-Z]", password):
- 这是评论说它要求密码中至少有两个数字。它没有。我不知道你为什么会这么想。
6)if password == valid:
- 这种类型的作品,在某种意义上说,您之前可能已将password
设置为与valid
具有相同的值。如上所述,这是错误的,但这意味着有时可能会返回True
。使用工作代码,您需要完全不同的逻辑。
7)最重要的是,你的问题是指来自running = True
的语法错误 - 但代码中的任何地方都没有该分配。
从好的方面来说,好好利用isupper
和islower
。这些方法使您的早期大写和小写正则表达式搜索变得不必要。
答案 1 :(得分:0)
您似乎没有从用户那里获得密码。
password = str("Enter the password")
应该是:
password = raw_input("Enter the password")
然后,您正在检查可能导致逻辑错误的有效条件。所以,不要检查它是否满足所有条件,检查它是否不满足任何条件(即)你现在正在做的反转..
Eg)的
flag = 1
invalid = 0
if(len(password)<8):
flag = 0
if password.islower():
flag = 0
#all conditions
#at last, check for the flag value.
if flag:
print "Password valid"
else:
print "Password not valid"