Python фильтр (предикат, текущий, порог) - PullRequest
0 голосов
/ 17 июня 2020

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

Это упражнение:
FILTER принимает в качестве входных данных функцию (предикат) и два числа (текущее и пороговое). Он рекурсивно создает строку, в которой числа (от текущего до порогового) сохраняются, только если результат применения предиката к таким числам истинен.
predicate1 проверяет, делится ли ввод на 2
predicate2 проверяет, является ли ввод делится на 3
Test1: использует predicate1
Test2: использует predicate2

Это код: подчеркивания - это место, где я могу поместить код:

def filter(predicate, current, threshold):
  if ________ > _________
    return ''
  else:
    _______________________
    _______________________

threshold = 20
predicate1 = lambda x: x % 2 == 0
predicate2 = lambda x: x % 3 == 0
res = filter(predicate1, 1, threshold)
print()

Я придумал это ниже, но он не работает:

def filter(predicate, current, threshold):
  if current > threshold:
    return ''
  else:
    new_result = filter(predicate, predicate(current), threshold)
    result =  str(predicate(current)) + ' ' + new_result
    return result

threshold = 20
predicate1 = lambda x: x % 2 == 0
predicate2 = lambda x: x % 3 == 0
res = filter(predicate1, 1, threshold)
print()

какие-нибудь советы?

1 Ответ

1 голос
/ 17 июня 2020
def filter(predicate, current, threshold):
    if current > threshold:
        return ''
    else:
        return (str(current) + " " if predicate(current) else '') + filter(predicate, current + 1, threshold)

threshold = 20
predicate1 = lambda x: x % 2 == 0
predicate2 = lambda x: x % 3 == 0
res = filter(predicate1, 1, threshold)
print(res)

Когда у вас есть лямбда или функция, которая возвращает «x == y» или любой другой оператор, она - вернет логическое значение.

Также каждый раз, когда вы вызываете функцию, вы должны добавлять 1 в вашу текущую переменную, иначе вы получите бесконечную функцию l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...