Как я могу использовать только один оператор if и включить все эти условия в OR (python) - PullRequest
0 голосов
/ 20 июня 2020

Как я могу использовать только один оператор if и включать все эти условия вместе с i ++ для каждого условия? (используя & или et c) ??

def validator_fn(value):
i=0
if re.search(r'experience',value.casefold()):
    i+=1
if re.search(r'programmer',value.casefold()):
    i+=1
if re.search(r'computer',value.casefold()):
    i+=1
if re.search(r'work',value.casefold()): #skill
    i+=1
if re.search(r'skill',value.casefold()):
    i+=1
if re.search(r'work',value.casefold()):
    i+=1
return i

Ответы [ 4 ]

3 голосов
/ 20 июня 2020

Создать al oop:

def validator_fn(value):
    i = 0
    for s in [r'experience', r'programmer', r'computer', ...]:
        if re.search(s, value.casefold()):
            i += 1
    return i
2 голосов
/ 20 июня 2020

Применить все сразу; i - это просто количество из них, которые возвращают True.

def validator_fn(value):
    v = value.casefold()
    search_terms = ['experience', 'programmer', 'computer', 'work', 'skill', 'work']
    return sum(re.search(x, v) is not None for x in search_terms)

Сумма работает, потому что True == 1 и False == 0, bool является подклассом int.

0 голосов
/ 21 июня 2020

Вы просто суммируете 1 для каждого совпадения, поэтому можете сделать что-то вроде:

def validator_fn(value):
    v = value.casefold()
    return sum([1 if re.search(pat, v) else 0
               for pat in ['experience', 'programmer', 'computer',
                           'work', 'skill', 'work']])
0 голосов
/ 20 июня 2020

Вы можете просто набрать

if re.search('experience|programmer|computer|work|skill',value.casefold()):
    i+=1

Вы можете использовать | ("или") для разделения шаблонов, которые хотите искать.

...