首页 文章

如何在Python中检查二维数组中元素的类型

提问于
浏览
0

我一直在尝试制作一个井字游戏,到目前为止,我只创建了一个应该打印出来的功能:

board = [[1,2,3],[4,5,6],[7,8,9]]

    def drawboard(board):
        for row in board:
            for item in row:
                if type(board[row][item]) == "int":
                    print(str(board[row][item]))
                    print("|")
                else:
                    print(board[row][item])
                    print("|")
            print("\n")
            print("------")
            print("\n")

    drawboard(board)

正如您所看到的,我的函数的一部分是检查列表中列表内部元素的类型,但它给了我一个错误:

Traceback(最近一次调用最后一次):文件“/ Users / Tony / Desktop / coding things / tic tac toe.py”,第22行,在drawboard(board)\ File“/ Users / Tony / Desktop / coding things / tic tac toe.py“,第12行,在drawboard中如果type(board [row] [item])==”list“:TypeError:list indices必须是整数或切片,而不是list

2 回答

  • 1

    在你的for循环中, rowitem 不是索引,你只需要检查 item 的类型,为此你需要更改这一行:

    if type(board[row][item]) == "int":
    

    if isinstance(item, int):
    

    修复后:

    def drawboard(board):
        for row in board:
            for item in row:
                if isinstance(item, int):
                    print(str(item))
                    print("|")
                else:
                    print(item)
                    print("|")
            print("\n")
            print("------")
            print("\n")
    
  • 1

    这里有一些问题:

    • 如果迭代列表,则迭代列表的元素,而不是索引;和

    • 如果查询 type(..) ,则不会将字符串作为返回元素,而是对类的引用 . 所以你可以解决这个问题:

    board = [[1,2,3],[4,5,6],[7,8,9]]
    
        def drawboard(board):
            for row in board:
                for item in row:
                    if type(item) == int:
                        print(str(item))
                        print("|")
                    else:
                        print(item)
                        print("|")
                print("\n")
                print("------")
                print("\n")
    
        drawboard(board)
    

    由于非 str 项目通常是 str(..) -ed,当您对它们调用print时,我们甚至可以将 ifelse 分支合并为:

    def drawboard(board):
        for row in board:
            for item in row:
                print(item)
                print("|")
            print("\n")
            print("------")
            print("\n")
    
    drawboard(board)
    

    如果你继续这个类型检查,通常检查类型相等也不是一个好主意 . 因为如果元素是子类,则类型不再是 int . 然后你最好使用 isinstance(..) .

相关问题