Как настроить оператор if для использования массива условных выражений в качестве входных данных в Python - PullRequest
1 голос
/ 28 сентября 2019

Сначала я проверяю заданное условие в соответствии с нормальным оператором 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")

Но мне нужен питонский метод, который, будем надеяться, будет достаточно универсальным, чтобы иметь возможность обрабатывать массив ключевых слов, который имеет неизвестную длину и, следовательно, не может быть сложнымзакодированы.

Ответы [ 4 ]

4 голосов
/ 28 сентября 2019

Это должно работать,

if all ( c in f for c in condition ):
    print("problem solved")
3 голосов
/ 28 сентября 2019

Сделать 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 один элемент, или десять, или сотню.

1 голос
/ 28 сентября 2019

Один из способов:

if [x for x in condition if x in f]:
   ...
0 голосов
/ 28 сентября 2019

Чтобы вам было проще, я бы составил список паролей в обоих случаях.Если ключевое слово test1 является ключевым словом, то оно просто становится списком из одного.

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

Тогда вы можете использовать встроенную в Python функцию all с генератором выражения длявторое условие.

f = "password1_password2_password3_jibberish_E=mc2"
if all(pw in f for pw in passwords):
    print("Problem solved")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...