Как сделать функцию, которая возвращает количество одинаковых индексов - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь сделать игру Mastermind на основе чисел. Попытка выяснить функцию, которая принимает два списка в качестве параметров, и если индексы в списках совпадают, она должна вернуть количество одинаковых индексов.

PS. надеюсь, ты понимаешь, о чем я; P

generated_number_as_list = [1,1,1,1]
guess_as_list = [1,2,1,2]

correct = right_inrightplace(guess_as_list, generated_number_as_list)

print(correct)

output >> 2

Ответы [ 5 ]

3 голосов
/ 16 октября 2019

Вы можете использовать zip для сравнения значений с соответствующими индексами, а затем суммировать True, который будет приведен к 1

print(sum(x==y for x,y in zip(generated_number_as_list, guess_as_list))) #2
1 голос
/ 16 октября 2019

Вы можете использовать sum и map с operator.eq:

def right_inrightplace(a, b):
    return sum(map(eq, a, b))

или без использования дополнительных библиотек:

def right_inrightplace(a, b):
    return sum(x == y for x, y in zip(a, b))
1 голос
/ 16 октября 2019

Вы можете попробовать это также:

a=[1,1,1,1]
b=[1,2,1,2]
print(min(len([x for x in a if x in b]),len([x for x in b if x in a])))
1 голос
/ 16 октября 2019

Я написал это вне функции. Просто скопируйте цикл for в вашу функцию и верните значение ans в качестве вывода.

generated_number_as_list = [1,1,1,1]
guess_as_list = [1,2,1,2]

ans = 0

for i in range(len(generated_number_as_list)):
    if guess_as_list[i] == generated_number_as_list[i]:
        ans = ans + 1

print(ans)
0 голосов
/ 16 октября 2019

Просто для развлечения вот решение с использованием рекурсии:

def right_inrightplace(a, b):
    if len(a) == 0 or len(b) == 0:
        return 0

    current = 0
    if a[0] == b[0]:
        current = 1
    return current+right_inrightplace(a[1:],b[1:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...