策划者/公牛和奶牛游戏在Python中的checkguess

2024-04-25 17:51:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我在检查我的猜测的函数中发现了两个问题。在

1)假设代码是[2,3,4,5]和[0,0,0,2],我认为正确的响应应该是0b1c,但我得到的是0b3c。在

2)当我输入[0,0,0,0]作为猜测时,我得到一个索引错误,“list Index out of range”。=[不知道为什么。在

我的代码如下:

def checkGuess1(code, guess):
    i = 0
    countB = 0
    countC = 0
    while i < len(code):
        if code[i] == guess[i]:
            countB = countB + 1
        else:
            for j in code:
                if code[i] == guess[j] and i != j :
                    countC = countC + 1
        i = i + 1

    print "A: " + str(countB)
    print "B: " + str(countC)
    return countB, countC

#------------- TEST CASE -----------------------
code = [2,3,4,5]
guess = [0,2,2,2]
guess1 = [0,0,0,0]
checkGuess1(code, guess)
checkGuess1(code, guess1)

谢谢你的时间和帮助!当心!在


Tags: 函数代码indexif错误codeoutlist
1条回答
网友
1楼 · 发布于 2024-04-25 17:51:18

你的问题就在这里

for j in code:

这将迭代代码中的元素。。。不是指数。。。但后来你说

^{pr2}$

但是,您可以更好地实现这一切,如下所示

def checkGuess(code,guess):
    bulls = sum(c1==c2 for c1,c2 in zip(code,guess))
    cows =  sum(c1 != c2 and c2 in code for c1,c2 in zip(code,guess))
    return bulls,cows

这是更好的代码

下面是一个实现,它可以更清楚地说明发生了什么

def  checkGuess(code,guess):
     bulls = cows = 0 # no bulls or cows yet
     for code_char,guess_char in zip(code,guess): #pairs up the letters
         if code_char == guess_char: #match , bull
            bulls = bulls + 1
         elif guess_char in code:# no match but the item is in the code, cow
            cows = cows + 1
     return bulls,cows

print checkGuess("1234","5464")
#or
print checkGuess([1,2,3,4],[4,4,4,4])

相关问题 更多 >