我应该用以下标准编写脚本: 编写一个名为validatePassword的函数,该函数将密码字符串作为参数并返回true或false。该函数应仅在以下情况下返回true:
到目前为止,我有这个:
def validatePassword(pswd):
if len(pswd)> 8:
return True
else:
return False
for char in pswd:
if char in '01234567890':
return True
else:
return False
for char in pswd:
if char in '!@#$%^&*()_+=':
return True
else:
return False
for char in pswd:
if char.isupper and char .islower:
return True
else:
return False
return True
while False:
print("There was an error with your password")
print (validatePassword(Herseuclds))
我知道print (validatePassword(Herseuclds))
有语法错误,因为我错过了变量,但我不知道怎么做。
答案 0 :(得分:3)
def validatePassword(pswd):
if len(pswd) < 8:
return False
number_in_password = False
for char in pswd:
if char in '012356789':
number_in_password = True
if not number_in_password:
return False
symbol_in_password = False
for char in pswd:
if char in '!@#$%^&*()_+=':
symbol_in_password = True
if not symbol_in_password:
return False
uppercase_in_password = False
for char in pswd:
if char.isupper():
uppercase_in_password = True
if not uppercase_in_password:
return False
#this only happens if nothing above has disqualified the password
return True
print (validatePassword("herseuc"))
print (validatePassword("herseuclds"))
print (validatePassword("herseuclds!"))
print (validatePassword("herseuclds!123"))
print (validatePassword("herseuclds!123A"))
答案 1 :(得分:1)
您的代码的主要问题是在最后一行。
print (validatePassword(Herseuclds))
现在,解释器认为Herseuclds
是变量,而不是字符串。如果Herseuclds
是密码,而不是描述密码的变量,那么您需要在它周围引用它以使其成为字符串文字。
print (validatePassword("Herseuclds"))
你显然没有在你的程序中的任何地方定义一个名为Herseuclds
的变量,但程序认为Herseuclds
是一个变量而不是一个字符串,所以它会抛出错误。
祝你好运,编码愉快!
答案 2 :(得分:0)
第一个问题是您将未声明的变量传递给您的函数。有关详细信息,请参阅silentphoenix的答案。
其次,您的程序只检查是否满足至少一个条件,而不是全部。
如果密码长度为8个字符,即使密码不符合其他要求,也会返回true 。
我不打算为你编写代码,但我可以伪问题:
def validatePassword(pswd):
if len(pswd) < 8:
return False
# if there isn't a number:
return False
# if there isn't a symbol:
return False
# if there isn't an upper and lowercase:
return False
return True
while True:
print("There was an error with your password")
print (validatePassword("Herseuclds"))
旁注:注意你的缩进:)
答案 3 :(得分:0)
由于您可以使用is.upper()
,因此您还可以使用is.digit()
来检查数字,而不必记下实际数字。
另一件要加快速度的事情,因为它们必须同时完成,你可以检查密码是否在any()
def validatePassword(pswd):
l = []
if len(pswd)> 8:
for char in pswd:
l.append(char)
if any(l for x in l if x.isdigit()) and any(l for x in l if x.isupper()) and any(l for x in l if x in '!@#$%^&*()_+='):
print('Success')
else:
print('Try again')
while True:
a = input('What is your password?')
validatePassword(a)
在开始时,最小化检查以确定lengeth是否大于8.如果是,则该单词被分解为列表。这允许使用any()
并根据剩余要求进行检查。
答案 4 :(得分:0)
def valid_password(password):
return (
# The password is at least 8 characters
len(password) >= 8 and
# The password contains at least one number
any(c in "0123456789" for c in password) and
# The password contains at least one upper case letter
any(c.isupper() for c in password) and
# The password contains a symbol one of the symbols !@#$%^&*()+=
any(c in "!@#$%^&*()+=" for c in password))
示例:
from getpass import getpass
while not valid_password(getpass('Enter password: ')):
print('invalid password. Try again')