Как рекурсивно разрезать список и сравнить соседние значения - PullRequest
0 голосов
/ 04 апреля 2020

enter code here Не дав решения, кто-нибудь может помочь мне понять, как представить этот шаблон. Я думаю, вам нужно проверить, рекурсивно ли nth + 1> nth значение. Поскольку это не список, я думаю, что мне нужно использовать деление по модулю и полу, чтобы пройтись по списку. Однако, имея только два оператора return, я не знаю, как можно рекурсивно вызвать функцию, а также вернуть True и False.

Постановка задачи: Номер отверстия - это число, в котором каждый второй ди git опускается ниже цифр, непосредственно примыкающих к нему. Например, число 968 будет считаться номером отверстия, потому что число 6 меньше, чем обе окружающие цифры. Предположим, что мы передаем только те числа, которые имеют нечетное количество цифр. Определите следующую функцию, чтобы она правильно определяла номера отверстий.

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if _________________________________________________________:
        return _________________________________________________________
    return ______________________________________________________________

Мое решение:

def check_hole_number(n):
    if n // 10 == 0:
        return True
    return (n % 10) > (n // 10 % 10) and (n // 10 % 10) < (n // 100 % 10) \
    and check_hole_number(n // 100)

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

шаблон будет выглядеть примерно так:

вы должны проверять первые 3 цифры текущего номера на каждом шаге:

  • check (в операторе if) если первые 3 числа соответствуют условию hole number
  • , если первые 3 цифры соответствуют условию hole number, то проверьте, есть ли на текущем шаге последние 3 цифры:

    • если у вас есть 3 последние цифры, вы должны вернуть True (вы уже проверили все остальные цифры, и теперь вы уверены, что это номер hole number)
    • если у вас нет последних 3 цифр, вы должны снова вызвать вашу функцию для проверки следующих цифр (вы должны пропустить первые 2 цифры)
  • если текущий первые 3 цифры не являются hole number, вы должны вернуть False

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if str(n)[1] < str(n)[0] and str(n)[1] < str(n)[2]:
        return True if len(str(n)) == 3 else check_hole_number(str(n)[2:])

    return False

также вы можете проверить последние 3 цифры с текущего шага:

def check_hole_number(n):
    """
    >>> check_hole_number(123)
    False
    >>> check_hole_number(3241968)
    True
    >>> check_hole_number(3245968)
    False
    """
    if n // 10 % 10 < n % 10 and  n // 10 % 10 <  n % 1000 // 100:
        return True if n < 1000 else check_hole_number(n // 100)

    return False
0 голосов
/ 04 апреля 2020

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

В качестве подсказки:

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

  2. Вы уже на правильном пути определить рекурсивный вызов новой функции, но действительно ли n [1:] служит новым вводом? Подумайте об этом еще раз и поиграйте функцию вручную, используя пример.

  3. Когда нужен еще один вызов функции? Или другими словами: когда вы можете быть уверены, что ввод n не является номером отверстия? Установите это условие и установите вызов функции в зависимости от того, является ли условие истинным или ложным.

  4. Общая подсказка: переменные типа int не являются подписными в Python, поэтому вы всегда нужно преобразовать число в str, т.е. в строковое представление

! Спойлер ;-)! Пример реализации (действителен только в предположении: inputNumber mod 2 != 0). Его можно найти здесь: https://www.codepile.net/raw/NpoRbalV.py

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