Python Drawing a tic tac toe board

只愿长相守 提交于 2020-01-06 19:47:50

问题


I am trying to draw a fake 3x3 tic tac toe board. I am new to python and I don't understand why this does not work. Help would be appreciated. Thanks!

def draw():
    for i in range(4):
        board = (" ___ " * 3)

    for i in board:
        ("|    " * 4).join(board)

    print(board)


draw()

EDIT:

Final code:

def draw():
    board = ''

    for i in range(-1,6):

        if i%2==0:
            board += '|      ' * 4
            board += '\n|      |      |      |'

        else:
            board += ' _____ ' * 3

        board += '\n'
    print (board)

draw()

output:

 _____  _____  _____ 
|      |      |      |      
|      |      |      |
 _____  _____  _____ 
|      |      |      |      
|      |      |      |
 _____  _____  _____ 
|      |      |      |      
|      |      |      |
 _____  _____  _____ 

Double Edit:

Another way:

def drawsmall():
    a = (' ___' *  3 )
    b = '   '.join('||||')
    print('\n'.join((a, b, a, b, a, b, a, )))

drawsmall()

output:

 ___ ___ ___
|   |   |   |
 ___ ___ ___
|   |   |   |
 ___ ___ ___
|   |   |   |
 ___ ___ ___

回答1:


I found it easier to do this in one loop, printing a row of the board each iteration. You can alternate between vertical and horizontal bars by checking if the current iteration is an even or odd number using the % operator.

With strings you don't need to use join -- it can be more clear to append with the += operator.

def draw():
    # initialize an empty board
    board = ""

    # there are 5 rows in a standard tic-tac-toe board
    for i in range(5):
        # switch between printing vertical and horizontal bars
        if i%2 == 0:
            board += "|    " * 4
        else:
            board += " --- " * 3
        # don't forget to start a new line after each row using "\n"
        board += "\n"

    print(board)

draw()

Output:

|    |    |    |    
 ---  ---  --- 
|    |    |    |    
 ---  ---  --- 
|    |    |    |   



回答2:


Look up how the join function works. First, it takes the given string and uses that for the "glue", the string that connects the others. Second, it returns the constructed string; your join operation fails to save the result.

Try doing this first with nested loops: print a row of boxes, then the horizontal divider, etc. Then, bit by bit, convert that to the single-string output you want.




回答3:


You can try this:

def draw():
   return [["__" for b in range(3)] for i in range(3)]

Now you have a list of lists which contains your board. To print it out, you can do this:

the_board = draw()

for i in the_board:
    for b in i:

        print('|'.join(i), end="") 

    print()

print("  |    |  ")



回答4:


I thought I'd simplify things so that I could understand it myself. This code produces the same output as above:

def draw_board():
    v = '|    |    |    |'
    h = ' ____ ____ ____ '
    for i in range(0,10):
        if i%3==0:
            print(h)
        else:
            print(v)
draw_board()

Output:

 ____ ____ ____ 
|    |    |    |
|    |    |    |
 ____ ____ ____ 
|    |    |    |
|    |    |    |
 ____ ____ ____ 
|    |    |    |
|    |    |    |
 ____ ____ ____ 



回答5:


If you don't want to use variables/functions/loops and want a simple one-liner solution based on Print command:

print("__|__|__", "__|__|__", "  |  |  ", sep='\n')


来源:https://stackoverflow.com/questions/44269612/python-drawing-a-tic-tac-toe-board

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!