为了账号安全,请及时绑定邮箱和手机立即绑定

Mastermind 基于文本,无法识别密码中的正确数字

Mastermind 基于文本,无法识别密码中的正确数字

沧海一幻觉 2021-08-05 15:35:30
我的代码没有正确计算正确的数字,示例:(注意,我是故意打印密码的(列表))    I've set my password, enter 5 digits in the range [1-9] (e.g. 9 3 2 4 7):[1, 5, 6, 7, 8]10  guesses remaining.>1 5 6 7 91  of 5 correct digits.4  of 5 correct locations.9  guesses remaining.>5 位数字中有 4 位是正确的,只计算“5 中的 1”。这是我的代码:import randomdef generatePassword():    '''Generates unique 5 digit password'''    randomSetOfValues = set()    while len(randomSetOfValues) < 5:        randomSetOfValues.add(random.randint(1,9))    return list(randomSetOfValues)def getUserGuess():    '''Gets users geuss/input for the password'''    guess_list=[]    print('>',)    a,b,c,d,e=map(int, input().split())    guess_list.append(a)    guess_list.append(b)    guess_list.append(c)    guess_list.append(d)    guess_list.append(e)    return guess_listdef reportResult(password,guess):    '''Reports users results, see if positions/numbers are correct'''    numCorrect=0    posNumCorrect=0    for i in range(0,len(password)):        for j in range(0,len(guess)):            if(guess[j]==password[i]):                numCorrect=numCorrect+1        for i in range(0,len(password)):            if(guess[i]==password[i]):                posNumCorrect=posNumCorrect+1        if(posNumCorrect==5):             return True        else:            print(numCorrect," of 5 correct digits.")            print(posNumCorrect," of 5 correct locations.")            return False我认为问题出在我的 reportResult 函数中;我被困住了。
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

你的问题是不正确的缩进:


for i in range(0,len(password)):

    for j in range(0,len(guess)):

        if(guess[j]==password[i]):

            numCorrect=numCorrect+1

    for i in range(0,len(password)):

        if(guess[i]==password[i]):

            posNumCorrect=posNumCorrect+1

您的外循环的索引为i,然后您可以在第二个内循环中劫持并更改该索引。这将i超过循环限制,在第一次迭代时退出外循环。


您需要将第二个“内部”循环和所有后续代码拉回到其正确位置,向左缩进一个,离开第一个循环。


def reportResult(password,guess):

    '''Reports users results, see if positions/numbers are correct'''

    numCorrect = 0

    posNumCorrect = 0

    for i in range(len(password)):

        for j in range(len(guess)):

            if(guess[j] == password[i]):

                numCorrect = numCorrect+1

    for i in range(len(password)):

        if(guess[i] == password[i]):

            posNumCorrect = posNumCorrect+1

    if(posNumCorrect == 5): 

        return True

    else:

        print(numCorrect," of 5 correct digits.")

        print(posNumCorrect," of 5 correct locations.")

        return False

输出:


I've set my password, enter 5 digits in the range [1-9] (e.g. 9 3 2 4 7):


[8, 2, 4, 5, 6]

10  guesses remaining.

> 8 3 4 5 6

4  of 5 correct digits.

4  of 5 correct locations.

9  guesses remaining.

> 3 8 4 6 5

4  of 5 correct digits.

1  of 5 correct locations.

8  guesses remaining.


查看完整回答
反对 回复 2021-08-05
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信