首页 > 解决方案 > 如何用 For 循环替换连接四代码

问题描述

我有一个 Connect Four 游戏,上面有一块我用一堆打印功能制作的棋盘,效率极低。这里是:

    print("   0   1   2   3   4   5   6")
    print("   " + board[0][0] + " | " + board[0][1] + " | " + board[0][2] + " | " + board[0][3] + " | " + board[0][
        4] + " | " + board[0][5] + " | " + board[0][6])
    print("  ---+---+---+---+---+---+---")
    print("   " + board[1][0] + " | " + board[1][1] + " | " + board[1][2] + " | " + board[1][3] + " | " + board[1][
        4] + " | " + board[1][5] + " | " + board[1][6])
    print("  ---+---+---+---+---+---+---")
    print("   " + board[2][0] + " | " + board[2][1] + " | " + board[2][2] + " | " + board[2][3] + " | " + board[2][
        4] + " | " + board[2][5] + " | " + board[2][6])
    print("  ---+---+---+---+---+---+---")
    print("   " + board[3][0] + " | " + board[3][1] + " | " + board[3][2] + " | " + board[3][3] + " | " + board[3][
        4] + " | " + board[3][5] + " | " + board[3][6])
    print("  ---+---+---+---+---+---+---")
    print("   " + board[4][0] + " | " + board[4][1] + " | " + board[4][2] + " | " + board[4][3] + " | " + board[4][
        4] + " | " + board[4][5] + " | " + board[4][6])
    print("  ---+---+---+---+---+---+---")
    print("   " + board[5][0] + " | " + board[5][1] + " | " + board[5][2] + " | " + board[5][3] + " | " + board[5][
        4] + " | " + board[5][5] + " | " + board[5][6])
    print("  ---+---+---+---+---+---+---")
    print("   " + board[6][0] + " | " + board[6][1] + " | " + board[6][2] + " | " + board[6][3] + " | " + board[6][
        4] + " | " + board[6][5] + " | " + board[6][6])
    print()

我想知道如何使用 for 循环替换我的电路板,以使代码看起来更整洁,更容易更改。如果您需要任何参考,这是我的其余代码。

https://paste.pythondiscord.com/buriritebe.md

谢谢!

标签: python

解决方案


当您尝试将代码滚动到循环中时,请查找您在哪里重复自己。例如,看起来每行打印都是相同的,但 x 坐标不同。那是你的外循环。在每一行中,每个单元格都是相同的,具有不同的 y 坐标。那是你的内循环。循环也可以是推导的形式。此外, string.join() 方法是您的朋友,因为单元格之间和行之间的分隔符总是相同的。Python 程序员喜欢单行解决方案。我敢肯定有一种更严格的方法来编写它,但是你要小心不要把事情卷得太紧,因为这会让你以后更改代码变得更加困难。这是您可以收紧它的一种方法:

def generate_line(x, board):
    return "   " + " | ".join(board[x][y] for y in range(7)) + "\n"
board = [['x','o','x','o','x','o','x'] for x in range(7)]
border = "  ---+---+---+---+---+---+---\n"
lines = [generate_line(x, board) for x in range(7)]
print(border.join(lines))

推荐阅读