【问题标题】:Making a draft of tic-tac-toe制作井字游戏草稿
【发布时间】:2020-06-01 13:59:55
【问题描述】:
import numpy as np
player1 = True


def create_board():
    board = np.zeros((3,3), dtype=int)
    return board


def place(board , player1 , position ):
    if player1 == True:
        player1 = False
        if board[position] == 0:
            board = position
        elif board[position] != 0:
            print("False , place taken 1")
    else:
        if player1 == False:
            if board[position] == 0:
                board = position
            elif board[position] != [0, 0]:
                print("False , place taken 2 ")
    return board

函数调用:

place(board=create_board() , player1=1 , position=(0,0))

这是我的代码,在此代码中发生了很多事情,但是有一部分我无法正确处理。在粗体部分,我正在尝试替换

([0,0,0],
 [0,0,0], 
 [0,0,0])

([1,0,0],
 [0,0,0],
 [0,0,0])

请问我该怎么做...谢谢!

【问题讨论】:

  • 你好 cobralim,你会用粗体格式以外的东西来表示这个部分吗?这似乎在代码中丢失了。

标签: python python-3.x numpy


【解决方案1】:

您错误地将 if 语句中的 board 变量更改为 position

if board[position] == 0:
    board = position

你应该在索引position处更改board内的值

board[position] = 1   # for player 1
board[position] = 2   # for player 2

我还稍微清理了代码

def place(board , player1 , position ):

    x = 1 if player1 else 2

    if board[position] != 0:
        print(f'False , place taken {x}')

    else:
        board[position] = x

    return board

【讨论】:

  • 我想问一下,为什么会出现 {TypeError: 'NoneType' object is not subscriptable } 这个错误?
  • 您能否告诉您在代码中的哪个位置收到此错误,我假设您在board[position] 语句中收到此错误。如果是这样,那么您可能将 None 作为函数的 board 参数传递
  • 很抱歉,您将 None 作为 Board 参数传递是什么意思?以及如何解决这个问题?
  • 我的意思是您可能将None 对象作为函数的board 传递,而您应该传递np.array 对象,此链接可能会有所帮助net-informations.com/python/err/nonetype.htm ,我只是假设您因此而收到此错误,直到您告诉我它发生在哪里,我才能确定,
  • 是的,我得到的错误来自"if board[position] != 0"
【解决方案2】:

您正在使用board = position 将您的董事会分配给您的职位信息,我认为您的意思是board[position] == 1

def place(board , player, position ):
    if board[position] == 0: #if the position is unclaimed
        board[position] = player #claim it for the player
    else:
        print(f"place was already taken by player {board[position]}")
    return board

#call using the player number
place(board=create_board() , player=1 , position=(0,0))

这个功能会给你你正在寻找的东西。

【讨论】:

    【解决方案3】:

    当您尝试在board = position 中更新您的图板时,您实际上是在使用您的坐标对更新整个图板。

    您真正想要的是精确定位二维数组中的确切位置,您必须更新该位置以存储占用的单元格。你可以用

    来改变那条线
    board[position] = 1 # occupied cell
    

    但是,正如哈马德在另一个答案中所说,改变你的

    0 for unoccupied
    1 for occupied
    

    并且必须依靠知道当前轮到谁来

    0 for unoccupied
    1 for occupied by player one
    2 for occupied by player two
    

    所以你总是知道谁占据了那个牢房。

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 2015-01-08
      • 2019-11-24
      相关资源
      最近更新 更多