比较Python中的主列表

时间:2019-07-07 03:42:58

标签: python python-3.x

我正在尝试用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排在第二位(这样他们就不知道哪个数字在正确的位置)奖励积分。

谢谢!

1 个答案:

答案 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条件中,我们必须对照原始代码而不是副本进行检查。