我正在创建一个Master Mind程序,用户应该猜测一个4位数字,其中所有数字必须不同。如果用户猜测中的数字在数字中但不在右侧位置,则显示为“F”,如果在正确位置,则显示为“R”。我的代码的问题是,如果用户的猜测包含2个或更多相同的数字,而第一个在错误的地方,但第二个在正确的位置,它显示“F”,但它应显示“R”。你能不能帮我找到解决这个问题的方法。
value = ""
tmp = [False]*4
for i in range(4):
for j in range(4):
if userAnswer[i] == computerNumber[j]:
if i==j and tmp[j]!= True:
tmp[j] = True
value += "R"
elif tmp[j] != True:
tmp[j] = True
value += "F"
break
return value
答案 0 :(得分:1)
你可以试试这个:
def guess(user_answer, true_number):
right_position = [(user_answer[i] == true_number[i]) for i in range(4)]
right_number = [(not right_position[i] and (user_answer[i] in true_number)) for i in range(4)]
return 'R' * right_position.count(True) + 'F' * right_number.count(True)
已编辑:我不太确定您需要什么输出。如果你想在任何完全匹配时只有'R'(没有'F'),你可能会发现这有效:
def guess(user_answer, true_number):
right_position = [(user_answer[i] == true_number[i]) for i in range(4)]
if any(right_position):
return 'R' * right_position.count(True)
right_number = [(user_answer[i] in true_number) for i in range(4)]
if any(right_number):
return 'F' * right_number.count(True)
return '' # or what else you want to indicate that there's no matching
再次编辑:这次我想我会让你知道的。 :)然后这将按预期工作:
def guess(user_answer, true_number):
right_position = [(user_answer[i] == true_number[i]) for i in range(4)]
if any(right_position):
return 'R'
right_number = [(user_answer[i] in true_number) for i in range(4)]
if any(right_number):
return 'F'
return '' # or what else you want to indicate that there's no matching
答案 1 :(得分:0)
最好使用一个好的切片结构来代替那么多嵌套语句。 以下链接和代码显示了一个很好的方法。
选择(玩家4号码输入) 和makeRandomeWhenGameStarts()(这是猜测的随机4个数字)
代码中发生的是它从中获取数字 1234和1423并将它们变成字符串:
playGuess= [['1'],['2'], ['3'],['4']]
ranRoll= [['1'],['3'],['4'],['2']]
#then you want to do 2 things
#see if i in guess is in randomroll and count them for whitepegs
#Then see what is in the same position:
nWhitePegs = len([i for i in playGuess if i in ranRoll])
then see how many are in the same postion
nRedPegs = sum([1 if i==j else 0 for i, j in zip(playGuess,ranRoll)])
AHA!唉,我们给了他们一个白色的所有红色,但不要担心它确定我们只是做一些数学和" - "每个红色减1白色 Tada保持简单,保持美丽。
请参阅以下链接中提供的答案:
如果你在while循环中查看,你应该可以使用这段代码。