Я пытаюсь вернуть True, если для l oop добавить в список кодов список [0,0,7], но я получаю True, даже если у меня нет этих чисел в моем списке - PullRequest
0 голосов
/ 22 марта 2020
def spy_game(nums):
    code = []
    for num in nums:
        if num == 7 and code == [0,0]:
            code.append(7)
        elif num == 0:
            code.append(0)
    return code == [0,0,7]

# Check
spy_game([0,0,0,7]

Он должен получить True, потому что в нем 0,0,7

Ответы [ 3 ]

1 голос
/ 22 марта 2020

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

1 голос
/ 22 марта 2020

Вам необходимо продолжать сбрасывать code на [], когда обстоятельства не верны, и сразу же после проверки выполнить возврат для [0,0,7]:

def spy_game(nums):
    code = []
    for num in nums:
        if num == 7 and code == [0,0]:
            return True
        elif num == 0:
            if len(code) < 2:
                code.append(0)
        else:
            code = []
    return False

print(spy_game([1,2,4,0,0,7,5]))
print(spy_game([7,0,2,4,0,5,7]))
print(spy_game([7,0,7,7,5,0,7]))
print(spy_game([0,0,0,7]))

Выход:

True
False
False
True
0 голосов
/ 22 марта 2020

Код здесь потерпит неудачу, если присутствует регистр [0, 0, 0, 7], который, я считаю, должен быть верным.

Теперь по причине, почему он возвращает true для случая spy_game([7,0,7,7,5,0,7]), это то, что вы не проверяете, являются ли добавленные нули последовательными. Поэтому, когда вы выполняете итерацию по списку, сначала добавляется ноль, а затем добавляется следующий ноль, в результате чего код становится [0, 0]. Затем он проверяет семерку на последнем указателе. Поскольку код в точке [0, 0], он добавляет семь и вуаля! Значение кода [0, 0, 7] перед возвратом.

Лучший способ - начать итерацию со второй позиции и проверить два предыдущих значения.

def spy_game(nums):
    for index in range(2, len(nums)):
        if nums[index-2] == 0 and nums[index-1] == 0 and nums[index] == 7:
            return true
    return false

Что происходит в этом случае является то, что он проверяет, является ли текущее значение семь и предыдущие два нули. Если ДА, тогда он возвращает истину. Если он не находит таких условий, то в конце возвращает false.

Надеюсь, это поможет!

...