Python MasterMind Не удается заставить программу вернуть количество правильных цифр в неправильном месте - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь создать игру вдохновителя на основе числового списка. Вот так выглядит моя программа на данный момент.

У меня есть функция, так что, если числа в двух списках равны по одному и тому же индексу (действительно правильно), функция возвращает количество чисел в правильном месте. .

Моя проблема в том, что я не могу определить функцию, которая возвращает количество чисел, которые находятся в неправильном индексе, но существуют в обоих списках. Это учитывает то же число, полученное в предположении пользователя.

zПример 1: Если мой сгенерированный список = [3,1,3,3] и пользователь угадывает [3,3,3,3] выводдолжно быть. 3 в нужном месте 0 в неправильном месте Но я получаю. 3 в правильном месте 1 в неправильном месте.

Пример 2: Если мой сгенерированный список = [8,1,1,1] и пользователь угадает [8,8,8,8], вывод долженбыть. 1 в правильном месте 0 в неправильном месте Но я получаю. 1 в правильном месте 3 в неправильном месте.

Надеюсь, вы понимаете, о чем я. PS Я новичок в питоне.

1 Ответ

0 голосов
/ 23 октября 2019

Проблема в вашей функции right_inwrongplace. Вы должны убедиться, что вы игнорируете все правильные догадки, прежде чем считать догадки, которые верны, но не в том месте. Вы можете сделать это, сначала удалив правильные догадки из списка:

def right_inwrongplace(userGuess, number):
    # Create a list of Boolean values representing correct guesses.
    # for exemple: if numbers = [1,2,3,4] and guess = [1,2,9,9], correct_places will be [True,True,False,False]
    correct_places = [True if v == number[i] else False for i, v in enumerate(userGuess)]
    # create a list with only the incorrect guesses.
    g = [v for  i, v in enumerate(userGuess) if not correct_places[i]]
    # create a list with the numbers which weren't guessed correctly.
    n = [v for  i, v in enumerate(number) if not correct_places[i]]
    #return the amount of guesses that are correct but in the wrong place. (the numbers that are in both lists) 
    return len([i for i in g if i in n])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...