我写了一个脚本,检查未来用户提供的密码是否正确(一个大写和一个小写字母,一个数字,所有字符都是字母数字:
def check(password):
word = list(password)
war = 0
if len(password) > 8 and len(password) < 24:
war += 1
if password.isalnum():
war += 1
for x in range ( 0, len(word)):
if word[x] == word[x].upper() and word[x].isalpha():
war += 1
break
for x in range ( 0, len(word)):
if word[x] == word[x].lower() and word[x].isalpha():
war += 1
break
for x in range ( 0, len(word)):
if word[x].isdigit():
war += 1
break
return war == 5
我想知道如何让它更短更简单,哪些python工具,关键字可以帮助? 在此先感谢,我是python的先生,并没有阅读文档
答案 0 :(得分:1)
word = list(password)
后跟for x in range(0, len(word)):
之类的内容实际上并不是必需的。您可以轻松地执行for character in password:
,跳过转换为列表,跳过创建索引等。然后比较变为if character.isalpha() and character == character.upper():
之类的内容。使用零作为range()
的第一个参数也是多余的。绝对值得花时间浏览python教程,因为所有这些都非常接近开头。
答案 1 :(得分:1)
您使用变量“war”来检查密码的强度,然后如果它等于5则返回True也是多余的。
如果任何条件不为True,您可以使用if语句,其中包含任何会取消密码资格的条件,并返回False。然后你可以在函数结束时返回True,因为只有在没有运行其他return语句时才会执行,即所有条件都为True。
例如:
if not password.isalnum():
return False
if len(password) not in range(8, 25):
return False
...
return True
答案 2 :(得分:0)
首先,不必像将密码转换为列表然后在列表的索引上进行迭代一样,您可以像这样遍历密码的每个字符-
for char in password:
下一步,因为即使单个条件为假,密码也会被取消资格,因此如果第一个条件为假,则无需检查所有其他条件。
因此,除了更新war
变量之外,您还可以将if条件更改为会使密码无效的内容,并在其下方更改return False
,以便在密码不合格之前跳过所有其他条件。 。最后return True
,因为只有在没有其他return语句运行且密码合格的情况下,此命令才会运行。
此代码-
if not password.isalnum():
return False
if len(password) not in range(8, 25):
return False
return True