我需要写一个智囊解算器,有4个字母代码,字母a到F。 然而,我的猜测消除器正在留下应该被消除的猜测。 以下是我的猜测消除器代码:
def getFeedback(self, feedbackStr):
if guesscount == 1:
import itertools #i know this shouldnt be here but homework comes with limitations
global guesslist
guesslist=list("".join(k) for k in itertools.product('ABCDEF', repeat=4))
guess_score=feedbackStr
for i in guesslist:
i_score=computeFeedback(guess, i)#compares possible code to current guess
if i_score != guess_score: #remove all non matching guesses
guesslist.remove(i)
return guesslist
这是电脑反馈代码:
^{pr2}$但是,例如,当code=BBAA且第一个猜测是AABB时, 猜测列表是['BBAA'、'CCAE'、'DDBC'、'EECA'、'FFCE'] 我的程序应该删除除BBAA之外的所有内容,但事实并非如此。 它消除了1290/1295个错误的猜测,但有些错误的猜测似乎总是漏洞百出。在
胭脂错误的猜测总是一样的,这取决于输入的代码。在
我一行一行地看了一遍,例如
computeFeedback('BBAA','AABB') <----- this is my guess vs the code
'4w0b'
computeFeedback('AABB','DDBC') <----- this is my guess vs a
possible code.
'0w1b'
computeFeedback('AABB','CCAE')
'1w0b'
computeFeedback('AABB','EECA')
'1w0b'
computeFeedback('AABB','FFCE')
'0w0b'
没有一个反馈字符串匹配,因此它们应该被消除。 如果这是一个太具体的问题,我很抱歉,但我不明白为什么会这样。在
您的问题在于
getFeedback
函数。在我怀疑,因为您同时迭代并同时修改一个列表,所以您的代码有问题。如果我将其更改为更具功能性的样式(这样它就不再修改列表,而是不断地返回一个新的列表),它就可以按预期工作了。在
(注意:我从
getFeedback
中删除了一些代码,因为这使测试有点困难。您说您有不寻常的约束,因此您可能需要更改它,以便将猜测列表生成代码添加回。让它成为一个单独的函数会更干净,但我想这是切题的。)我用
AABB
作为猜测,以ABCD
作为正确答案来测试这一点。您的代码指出,使用1w1b
作为反馈,还有208个猜测,这与我自己的智囊解算器所说的完全相同。在相关问题 更多 >
编程相关推荐