我正在尝试用python制作Mastermind游戏。其背后的想法是计算机会在1到6之间生成一个4位数代码。然后您将有很多猜测要弄清楚。如果在正确的位置获得正确的数字,您将得到x;在错误的位置获得正确的数字,您将得到o;如果没有正确的信息,您将不会获得任何收益。我现在拥有的代码大部分都可以使用,但是有一个问题。假设代码为[4,4,4,3],而猜测为[4,3,3,2],则输出将为[x,o,o,,](应为[x,o,, ,],它会读取3次两次)
import random
length_of_password = (range(4))
number_of_guesses = (range(8))
code = []
# Generates random code
for random_letter in length_of_password:
code += str((random.randint(1, 6)))
print(code) # Here just for testing
# Takes guesses and compares them to the code
for guesses in number_of_guesses:
indicator = ""
guess = list(input("Guess: "))
if guess == code:
print("Congratulations, you won!")
break
for letter in length_of_password:
if guess[letter] == code[letter]:
print("x")
elif guess[letter] in code:
print("o")
else:
pass
print(indicator)
此外,我尝试返回排序的指标,以便所有x都排在第一位,o排在第二位(这样他们就不知道哪个数字在正确的位置)奖励积分。
谢谢!
答案 0 :(得分:0)
code=['4','4','4','3']
for guess in range(8):
result=[]
guess=list(input("Enter guess\n"))
if guess==code:
print('success')
break
code_copy=code.copy()
for i in range(4):
if guess[i]==code[i]:
result.append('X')
elif guess[i] in code_copy:
result.append('O')
for j in range(4):
if code_copy[j]==guess[i]:
code_copy[j]='7'
break
else:
result.append('')
print(result)
不是最巧妙的解决方案,但我尝试制作的是原始“代码”的副本,然后在管理“ 数字错误点”条件的If
子句中,更改首先在副本中找到该数字到7。我选择7是因为您提到代码的数字在1-6范围内。
请注意,在第一个if条件中,我们必须对照原始代码而不是副本进行检查。