python - 如何用 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
谢谢!
解决方案
当您尝试将代码滚动到循环中时,请查找您在哪里重复自己。例如,看起来每行打印都是相同的,但 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))
推荐阅读
- function - 避免通过调用函数将文本添加到文件的开头
- android - addPreferencesFromResource() 在 Android 上导致 StrictMode 违规
- json - 如何将 Nginx error.log 转换为 json 格式
- vue.js - 对象 i18n 中字段的本地化
- .net - Acronym regex 适用于 .NET 在线工具,但不适用于 C# 代码
- javascript - Jquery datepicker 在模式弹出窗口中不起作用
- react-router - 有没有办法通过 HashRouter 和 react-router v4 使用历史记录?
- docker - Docker 容器无法在 cisco vpn 后面访问互联网
- c# - 如何使用 c# 验证安装验证回发 SKAdnetwork?
- powershell - powershell '您不能在空值表达式上调用方法'