【发布时间】:2018-06-24 12:01:07
【问题描述】:
我目前正在构建自己的国际象棋引擎,并且可以就如何使这段代码更有效地计算对角线移动提出一些建议。 (这显然只适用于右上的对角线)
到目前为止,我使用“Try-Except”来迭代 1,然后我的 return 语句过滤掉任何非板载值。然而,这似乎是一种非常庞大的做事方式。
任何有关如何重构此代码的 cmets 或建议将不胜感激。
import argparse, json
chessBoard = [[1, 1, 1, 1, 1, 1, 1, 1] for i in range(8)]
chess_map_from_alpha_to_index = {
"a" : 0,
"b" : 1,
"c" : 2,
"d" : 3,
"e" : 4,
"f" : 5,
"g" : 6,
"h" : 7
}
chess_map_from_index_to_alpha = {
0: "a",
1: "b",
2: "c",
3: "d",
4: "e",
5: "f",
6: "g",
7: "h"
}
def getBishopMoves(pos, chessBoard):
column, row = list(pos.strip().lower())
row = int(row) - 1
column = chess_map_from_alpha_to_index[column]
i,j = row, column
solutionMoves = []
#Up-Right Diagonal
try:
temp = chessBoard[i + 1][j + 1]
solutionMoves.append([i + 1, j + 1])
except:
pass
try:
temp = chessBoard[i + 2][j + 2]
solutionMoves.append([i + 2, j + 2])
except:
pass
try:
temp = chessBoard[i + 3][j + 3]
solutionMoves.append([i + 3, j + 3])
except:
pass
try:
temp = chessBoard[i + 4][j + 4]
solutionMoves.append([i + 4, j + 4])
except:
pass
try:
temp = chessBoard[i + 5][j + 5]
solutionMoves.append([i + 5, j + 5])
except:
pass
try:
temp = chessBoard[i + 6][j + 6]
solutionMoves.append([i + 6, j + 6])
except:
pass
try:
temp = chessBoard[i + 7][j + 7]
solutionMoves.append([i + 7, j + 7])
except:
pass
try:
temp = chessBoard[i + 7][j + 7]
solutionMoves.append([i + 7, j + 7])
except:
pass
temp = [i for i in solutionMoves if i[0] >=0 and i[1] >=0]
solutionMoves = ["".join([chess_map_from_index_to_alpha[i[1]], str(i[0] + 1)]) for i in temp]
solutionMoves.sort()
return solutionMoves
【问题讨论】:
-
您至少可以将
try:...except:pass块放入for循环中。它会阻止重复之类的问题(就像 7s 一样) -
我投票决定将此问题作为离题结束,因为改进工作代码的通用请求属于 Code Review,而不是 Stack Overflow。
-
对此我感到非常抱歉。我会确保更仔细地阅读指南。
标签: python loops optimization chess try-except