如何检查字符串仅包含字母还是仅包含数字?

时间:2020-01-14 10:30:52

标签: python-3.x

我正在创建一个包括密码强度测试的登录系统。密码必须包含字母和数字,大写和小写字母,并且长度在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():

抛出语法错误,但我不知道为什么。我之前已经创建了这样的系统,但无法确定问题所在。如果有人可以帮助我,我将非常感激。

2 个答案:

答案 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修饰符:多行。导致^和 $以匹配每行的开始/结束(不仅是字符串的开始/结束)