我试着数不了。完全匹配和部分匹配。但是,这似乎没有用。如果我输入代码中的颜色4次,它将给我1个黑色3白色,这根本没有意义。怎么了?此外,我不想打印精确或部分匹配的位置。 例如,如果计算机选择“红色,绿色,红色,蓝色”,如果我说“红色,蓝色,绿色,黄色”,我想让它给我黑人:1和白人:2
def blacks_whites(code,guessList): #code is the 4 color combination that the computer generates at random and guessList is the guessed color combination
blacks=0
whites=0
for i in range(len(code)):
if guessList[i]==code[i]:
blacks+=1
elif guessList[i] in code and guessList[i]!=code[i]:
whites+=1
答案 0 :(得分:0)
此代码适用于示例,但您可能有其他规则,但不适用于其他示例
我使用used
标记code
中与guessList
中的元素配对的元素,因此无法与其他对一起使用。
def blacks_whites(code, guessList):
blacks = 0
whites = 0
used = [False, False, False, False]
# search only blacks and mark as "used" black elements
for i in range(4):
if guessList[i] == code[i]:
blacks += 1
used[i] = True
# search only whites (but skip "used" elements)
# and mark as "used" every white element in code
# so it can't be used twice
for i in range(4): # guess index
for j in range(4): # code index
if not used[j] and code[j] == guessList[i]:
whites += 1
used[j] = True
return blacks, whites
# --- tests ---
data = [ # code, guess, expected result (blacks,whites)
[ 'RYGY', 'YYYY', (2,0) ],
[ 'RYGY', 'YRYR', (0,3) ],
[ 'RYGY', 'RGYY', (2,2) ],
]
for test in data:
code, guess, expected = test
result = blacks_whites(code, guess)
print(code, guess, expected, result, result == expected)
答案 1 :(得分:0)
我认为你的输出有意义,假设:
code = RGBY
guess = RRRR
第一个R
创建了一个黑钉,对吗?
其他R
确实在您的代码中(因为您的方法并不考虑重复项),因此每个其他R都会创建一个白色挂钩。
我没有时间写源,但我会尝试
code
temp
不是code
和
code
的匹配颜色,只需添加-
或在上面的情况(Code: RGBY, guess: RRRR
)中,第一次迭代后会产生:temp: -GBY, guess: RRRR
而第二次到第四次R
不再匹配。