我必须为学校项目创建python暴力破解。 我有一个影子文件,我必须强行使用密码。
在列表中,我没有几个不需要的密码,因此我想从阵列中删除它们。
所以我有一个包含所有密码的数组。我写了一个if条件来检查密码是否不同于“ *”或“!”。
for mdp in passwd:
if mdp != '*' or mdp != '!':
str(mdp)
list.append(mdp)
print(list)
但是当我用“!”打印阵列密码时和“ *”仍在里面...我不知道为什么。
答案 0 :(得分:1)
您需要进行遏制检查,而不是!=
检查。进行列表理解:
password = ['ahdjd', 'xj*', '!jr']
new_password_list = [x for x in password if '*' not in x and '!' not in x]
print(new_password_list)
# ['ahdjd']
答案 1 :(得分:0)
代码的主要问题是if语句中的or
。
考虑以下内容,假设您的密码是“!”不是,如果您进入,则检查密码是否不是'',然后确认是否正确并进入内部,这很不好。如果您的密码是'',同样的问题也会起作用,它将检查其密码'*'是否正确,然后将使用or
并检查其密码'!'。看到它不是并进入if内,这仍然是错误的。
您要在此处执行的操作是and
,因此您的密码必须均为 ,而不是“ *”和“!”。
此外,您可以使用更复杂的编码样式,例如理解力和成员测试
另外,请勿将单词list
用作变量,因为它会遮盖类型列表
在一起你会得到:
filtered = [item for item in passwd if item not in ['*', '!']]
假设您要过滤的密码为单个字符长