如何设置if语句以使用条件数组作为python

时间:2019-09-28 03:16:50

标签: python python-3.x if-statement

首先,我按照正常的IF语句检查给定条件。如果它是True,则需要扫描所有文件中的单个关键字。如果不是True,则需要在所有文件中扫描一组关键字,这些关键字将被提供。

对于我的简单工作示例,我只搜索字符串中的关键字,而不是扫描目录中的文件名。

test1 = "NotKeyWord"
password = "password"
password1 = "password1"
password2 = "password2"
password3 = "password3"

if test1.lower() == "keyword":
    condition = password
else:
    condition = [password1, password2, password3]

f = "password1_password2_password3_jibberish_E=mc2"
if condition in f:
    print("Problem solved")

如果关键字=“关键字”(即单数),则此代码有效。精细。但是,我想这样做,以便在另一种情况下,这需要知道几个关键字来获取正确的文件,而我不必求助于显式地写出所有单词。

我可以写

if password1 in f and password2 in f and password3 in f:
    print("problem solved")

但是我追求的是pythonic方法,希望该方法足够通用,能够处理长度未知的关键字数组,因此无法进行硬编码。

4 个答案:

答案 0 :(得分:4)

这应该有效,

if all ( c in f for c in condition ):
    print("problem solved")

答案 1 :(得分:3)

使condition始终是列表,即使它只有一项:

if test1.lower() == "keyword":
    condition = [password]
else:
    condition = [password1, password2, password3]

然后使用all()函数检查condition中的所有元素是否存在于f中:

if all(c in f for c in condition):
    print("problem solved")

无论condition有一个元素,十个元素还是一百个元素,这都将起作用。

答案 2 :(得分:1)

一种方法是:

if [x for x in condition if x in f]:
   ...

答案 3 :(得分:1)

为使自己更轻松,在这两种情况下,我都会列出一个密码列表。如果test1是关键字,那么它只是一个列表。

if test1.lower() == "keyword":
    passwords = [password]
else:
    passwords = [password1, password2, password3]

然后,您可以将Python内置的all functiongenerator expression结合使用来构成第二个条件。

f = "password1_password2_password3_jibberish_E=mc2"
if all(pw in f for pw in passwords):
    print("Problem solved")