我正在创建一个包括密码强度测试的登录系统。密码必须包含字母和数字,大写和小写字母,并且长度在6到12个字符之间。有人告诉我语法有错误,但没有错误。我只是将密码强度测试添加到了一个更大的程序中,并且我知道该程序的其余部分都可以正常运行,因此这是问题所在。
def Password():
global UName
global FName
global SName
global Email
print('A secure password should be between 6 and 12 letters in')
print('length, have upper and lowercase letters and have numbers.')
PWord = input('Please enter a secure password:')
if PWord.isalpha() or if PWord.isdigit():
if len(PWord) < 6 or if len(Pword) > 12:
if PWord.isupper() or if PWord.islower():
print('You need upper and lowercase letters. Try again')
Password()
else:
print('Password is strong')
g = open('Database1.txt', 'a')
g.write('\n' + UName +',')#Writes user details to database file
g.write(FName +',')
g.write(SName +',')
g.write(Email +',')
g.write(PWord +',')
g.close()#Closes file
h = open('Database2.txt', 'a')
Daily = input('Enter your daily energy use target:')
Monthly = input('Enter your monthly energy use target:')
Yearly = input('Enter your yearly energy use target:')
h.write('\n' + UName +',')#Writes user details to the second database file
h.write(Daily +',')
h.write(Monthly +',')
h.write(Yearly +',')
h.write('0' +',')#Other values
h.write('0' +',')#Other values
h.write('0' +',')#Other values
h.write('0' +',')#Other values
h.close()#Closes file
main()#takes user back to menu so they can login
else:
print('Password is not the correct length, try again')
Password()
else:
print('You need letters and numbers, try again')
Password()
UName,FName,SName和Email均取自上一个函数,因此为何将它们声明为全局变量。
通过注释各个部分,我确定该行
if PWord.isalpha() or if PWord.isdigit():
抛出语法错误,但我不知道为什么。我之前已经创建了这样的系统,但无法确定问题所在。如果有人可以帮助我,我将非常感激。
答案 0 :(得分:1)
尝试
if PWord.isalpha() or PWord.isdigit():
但是您最好为此使用正则表达式,如其他答案所述
祝你好运
答案 1 :(得分:1)
这就是为什么语法错误在这里
您可以通过使用project/plugins.sbt
and
运算符将多个条件置于if条件中,而无需多次使用or
。
您还可以在此处使用正则表达式验证密码-
if
这是正则表达式的解释
[A-Za-z0-9 @#$%^&+ =] {6,12}“ gm匹配出现在 以下列表[A-Za-z0-9 @#$%^&+ =] {8,} {8,}量词-匹配8 和无限次,尽可能多次,根据需要回馈 (贪婪)A-Z在A(索引65)和 Z(索引90)(区分大小写)a-z范围内的单个字符 在(索引97)和z(索引122)(区分大小写)0-9之间 字符,范围在0(索引48)和9(索引57)之间(大小写) 敏感)@#$%^&+ =匹配列表中的单个字符@#$%^&+ = (区分大小写)全局模式标志g修饰符:全局。所有比赛 (第一个匹配项后不返回)m修饰符:多行。导致^和 $以匹配每行的开始/结束(不仅是字符串的开始/结束)