Mastermind游戏python pegs计数

时间:2017-01-13 14:22:31

标签: python

我试着数不了。完全匹配和部分匹配。但是,这似乎没有用。如果我输入代码中的颜色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

2 个答案:

答案 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不再匹配。