电路板打印不正确

时间:2016-04-23 22:30:59

标签: python

我应该制作一个连接四控制台,出于某种原因我的电路板显示的是0而不是“。”。我不确定我做错了什么。有3个模块,但我只会展示这个模块,因为我认为这是潜在问题所在。

import connectfour

def _print_board_num():
    for i in range(len(connectfour.new_game().board)):
        print(str(i+1), end = ' ')
    print()

def print_board(game: 'connectfour.GameState')->[(str)]:
    _print_board_num()
    for row in range(connectfour.BOARD_ROWS):
        for column in range(connectfour.BOARD_COLUMNS):
            if game.board[column][row] == ' ':
                print('.', end = ' ')
            else:
                print(game.board[column][row], end = ' ')

        print()

def move()->str:
    input('Drop or Pop? ')

def column1()->int:
    int(input('What number of column? '))

我的主板打印如下:

1 2 3 4 5 6 7 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 

但它应该打印如下:

1 2 3 4 5 6 7 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 

这是connectfour模块的游戏板功能

def _new_game_board() -> [[int]]:
    '''
    Creates a new game board.  Initially, a game board has the size
    BOARD_COLUMNS x BOARD_ROWS and is comprised only of integers with the
    value NONE
    '''
    board = []

    for col in range(BOARD_COLUMNS):
        board.append([])
        for row in range(BOARD_ROWS):
            board[-1].append(NONE)

    return board



def _copy_game_board(board: [[int]]) -> [[int]]:
    '''Copies the given game board'''
    board_copy = []

    for col in range(BOARD_COLUMNS):
        board_copy.append([])
        for row in range(BOARD_ROWS):
            board_copy[-1].append(board[col][row])

我认为它是这两者中的任何一个。主要是drop函数,因为我注释了播放器错误,但它显示了drop函数。

def player(game: 'connectfour.GameState') -> None:
    while True:
        player = input('Would you like to drop(d) or pop(p)?')
        if player == 'd':
            drop(game)
            return
        elif player == 'p':
            pop(game)
            return
        else:
            connectfour.InvalidMoveError(Exception)
            #print('Invalid Move')

def drop(game: 'connectfour.GameState') -> bool:
    try:
        col = connectfouroverlap.column1()
        board = connectfour.drop(game,col-1)
        connectfouroverlap.print_board(board)
        if gameover(board) != connectfour.NONE:
            return
        else:
            player(board)
    except:
        connectfour.InvalidMoveError(Exception)
        print('Invalid Move')

这是我运行时输出的样子。

1 2 3 4 5 6 7 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
Would you like to drop(d) or pop(p)?d
What number of column? 2
1 2 3 4 5 6 7 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. 1 . . . . . 
Invalid Move

1 个答案:

答案 0 :(得分:3)

检查代码后,我假设game.board是一个只包含0(整数?)值的双数组。

如果这是真的,请尝试替换:

        if game.board[column][row] == ' ':
            print('.', end = ' ')
        else:
            print(game.board[column][row], end = ' ')

with:

        if game.board[column][row] == 0:  # <--- change the condition here
            print('.', end = ' ')
        else:
            print(game.board[column][row], end = ' ')

编辑: ->[str]函数定义中的print_board注释表明此函数用于返回字符串数组。但事实并非如此。

您正在创建一个全新的电路板来打印色号。这是一种不好的做法,而是使用现有的做法。

您也可以直接在数组上使用for in循环,而不是使用索引。这将需要更少的代码,并且更清晰,更容易编写:

for row in game.board:  # <--  since game.board is your [[int]]
    for number in row:
        do_stuff_on(number)