Допустим, случайный код [‘G’, ‘B’, ‘B’, ‘G’] и предположение [‘G’, ‘G’, ‘B’, ‘B’] поэтому подсказка должна быть ‘1100’, но она отображает только ’11’

#python

#python

Вопрос:

     codePosition = ' '
    codeColours = ' '
    for code in range (4):
        if correctPosition == '0':
            correctColour == '1'
        if correctColour == 1 and correctPosition == 0:
            codeColours  = 1
    print(codePosition   codeColours , 'n')        
    return codePosition, codeColours
 
  1. Допустим, случайный код [‘G’, ‘B’, ‘B’, ‘G’] и предположение [‘G’, ‘G’, ‘B’, ‘B’] поэтому подсказка должна быть ‘1100’, но она отображает только ’11’ . Я пробовал различные методы решения проблемы, но это не сработало. 0 указывает правильный цвет, но не находится в позиции, в то время как 1 указывает правильный цвет и положение.

Комментарии:

1. Публикация вашей полной программы будет полезна для тех, кто пытается помочь. Похоже, что это еще не все. Также включение полного контекста вопроса сделает цель более ясной. Я предполагаю, что пользователь пытается угадать 4-значный код с ограниченными попытками. Может быть, включить что-то подобное в описание проблемы.

2. во втором цикле for срабатывает блок elif, но вы не сбросили кодовое значение на ‘ ‘, поэтому часть if никогда не выполняется.

3. первая попытка дает code = 1, userinput = 1, поэтому userGuess[1] равен G, а compCode [1] равен G, и 1 = 1, так что кодирование теперь равно ‘1’ … после этого кодирование больше никогда не устанавливается в ‘ ‘ … codePosition == ‘ ‘ и compCode[code] в userGuess никогда не бывает истинным.

4. 3-й проход первого цикла for и 3-й проход второго цикла for yeild: code = 3, userinput = 3, так что значение userGuess[3] равно B, а compCode[3] равно B, и 3= 3 -> codePosition теперь имеет значение ’11’ -> это- это результат, который вы получаете. сбросить кодовое расположение на ‘ ‘ между циклами for.

5. Я думаю, что цель состоит в том, чтобы сделать предположение о коде, затем получить результат с цветовой кодировкой и отсортировать его на основе точности предположения. Я предполагаю, что это клон вдохновителя. Неясно, какие требования здесь основаны на ожидаемом результате. ОП, не могли бы вы включить полные требования задачи? До тех пор мы можем только размышлять о том, как помочь.

Ответ №1:

Я думаю, вы хотите вывести код, который отмечает, сколько раз позиция и цвет совпадают, не обязательно точно отмечая, где он совпадает — я не уверен в этом, но вы указываете, что подсказка должна быть 1100, а не 1010, учитывая [g, b, b, g] и [g,g, b,b] .

Если я понимаю, что вы пытаетесь сделать:

 if userGuess != compCode:
   if attempts > 0 and attempts < maxAttempts and len(userGuess) == 4:
       codePosition = ' '
       wrongCounter = 0
       for code in range (4):
           for userInput in range (4):
               if code == userInput:
                   if userGuess[userInput] == compCode[code]:
                       codePosition  = '1'
                   else:
                    wrongCounter  = 1
        for wrongColorInPosition in range (wrongCounter):
            codePosition  = '0'
        print (codePosition, '/n')
 

Ответ №2:

РЕДАКТИРОВАТЬ: этот ответ был задуман как руководство, а не как решение того, что выглядит как вопрос домашнего задания. Я прокомментировал вопрос пользователей, чтобы попросить их включить больше информации, поскольку информация в вопросе не является полной для адекватного решения их проблемы.

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

  1. Попробуйте использовать цикл while, который проверяет количество попыток текущих пользователей на соответствие пределу попыток.
     MAX_ATTEMPTS = 4
    attempt = 0
    while attempt > MAX_ATTEMPTS: 
        attempt  = 1
        # process user guess here
     
  2. Ваш код и предположение являются списками. Посмотрите на встроенный метод zip https://docs.python.org/3.3/library/functions.html#zip чтобы соединить два списка и сравнить их.
      zip(userGuess, compCode)
     

выведет что-то вроде:

 [('G', 'G'), ('B', 'G'), ('B', 'B'), ('G', 'B')] 
 

Затем вы можете быстро сравнить пары.

Надеюсь, эти предложения помогут вам.

Комментарии:

1. Это вообще не решает вопрос OP, поскольку его проблема явно связана с тем, как он имеет дело со сравнением предполагаемых значений с ответами, у него нет алгоритма для этого, а не синтаксиса. Имея список кортежей позиции, он по-прежнему не дает четкого указания о том, как найти количество правильного цвета и количество правильного цвета с соответствующей позицией. Я предлагаю вам обновить свой ответ этим.