#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
- Допустим, случайный код [‘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:
РЕДАКТИРОВАТЬ: этот ответ был задуман как руководство, а не как решение того, что выглядит как вопрос домашнего задания. Я прокомментировал вопрос пользователей, чтобы попросить их включить больше информации, поскольку информация в вопросе не является полной для адекватного решения их проблемы.
Поскольку вы учитесь, я бы предпочел не решать проблемы за вас, а дать вам несколько инструментов, чтобы упростить задачу.
- Попробуйте использовать цикл while, который проверяет количество попыток текущих пользователей на соответствие пределу попыток.
MAX_ATTEMPTS = 4 attempt = 0 while attempt > MAX_ATTEMPTS: attempt = 1 # process user guess here
- Ваш код и предположение являются списками. Посмотрите на встроенный метод zip https://docs.python.org/3.3/library/functions.html#zip чтобы соединить два списка и сравнить их.
zip(userGuess, compCode)
выведет что-то вроде:
[('G', 'G'), ('B', 'G'), ('B', 'B'), ('G', 'B')]
Затем вы можете быстро сравнить пары.
Надеюсь, эти предложения помогут вам.
Комментарии:
1. Это вообще не решает вопрос OP, поскольку его проблема явно связана с тем, как он имеет дело со сравнением предполагаемых значений с ответами, у него нет алгоритма для этого, а не синтаксиса. Имея список кортежей позиции, он по-прежнему не дает четкого указания о том, как найти количество правильного цвета и количество правильного цвета с соответствующей позицией. Я предлагаю вам обновить свой ответ этим.