-->
当前位置:首页 > 题库 > 正文内容

函数题:实现象棋中相的走法

Luz3年前 (2022-05-25)题库1049
编写函数,使其能够对指定位置的相输出下一步可以移动到的所有位置。比如现在(4,2)的红相,就可以移动到(2,0) (2,4)

棋盘在x方向被分为0到8这九个位置;在y方向被分为0到9这十个位置。比如棋盘左下角的位置是(0,0)

棋盘上棋子的分布储存在字典board中,字典board的每一个键为一个元组,对应棋盘上的一个位置;字典的值为一个由两个字符构成的二元元组,第一个字符为棋子的颜色,第二个为棋子的名称。如果对应的位置上没有棋子,则字典的值为 (0, '空')。
board对应如下棋局:
![image.png](~/bb7616c2-670b-4f05-9030-a0141e7abd57.png)

### 函数接口定义:
Python
def moves_elephant(pos):

pos是一个二元元组,为红相或黑象的位置

### 裁判测试程序样例:
Python
# 返回棋子元组,比如("黑","炮");如为空返回(0,"空")
def getPiece(pos):
return board[pos] # 返回元组

# 返回棋子的颜色
def getColor(piece):
return piece[0]

def moves_empty_board_elephant(pos):
return [(pos[0] - 2, pos[1] - 2), (pos[0] - 2, pos[1] + 2), (pos[0] + 2, pos[1] - 2), (pos[0] + 2, pos[1] + 2)]

# 返回象的合法位置列表
def moves_elephant(pos):
# 请添加你的函数代码

def main():
global board
board = {(0,0):(0,"空"), (0,1):(0,"空"), (0,2):(0,"空"), (0,3):(0,"空"), (0,4):("红","卒"), (0,5):(0,"空"), (0,6):(0,"空"), (0,7):(0,"空"), (0,8):(0,"空"), (0,9):("红","炮"),
(1,0):(0,"空"), (1,1):(0,"空"), (1,2):(0,"空"), (1,3):(0,"空"), (1,4):(0,"空"), (1,5):(0,"空"), (1,6):(0,"空"), (1,7):(0,"空"), (1,8):("红","马"), (1,9):("红","马"),
(2,0):(0,"空"), (2,1):(0,"空"), (2,2):(0,"空"), (2,3):(0,"空"), (2,4):(0,"空"), (2,5):(0,"空"), (2,6):(0,"空"), (2,7):(0,"空"), (2,8):(0,"空"), (2,9):(0,"空"),
(3,0):(0,"空"), (3,1):(0,"空"), (3,2):(0,"空"), (3,3):(0,"空"), (3,4):(0,"空"), (3,5):(0,"空"), (3,6):(0,"空"), (3,7):("黑","士"), (3,8):(0,"空"), (3,9):("黑","炮"),
(4,0):("红","将"), (4,1):("红","士"), (4,2):("红","象"), (4,3):(0,"空"), (4,4):(0,"空"), (4,5):("黑","车"), (4,6):(0,"空"), (4,7):("黑","象"), (4,8):("黑","士"), (4,9):("黑","将"),
(5,0):("红","士"), (5,1):(0,"空"), (5,2):(0,"空"), (5,3):(0,"空"), (5,4):(0,"空"), (5,5):(0,"空"), (5,6):(0,"空"), (5,7):(0,"空"), (5,8):(0,"空"), (5,9):(0,"空"),
(6,0):("红","象"), (6,1):(0,"空"), (6,2):(0,"空"), (6,3):(0,"空"), (6,4):("红","卒"), (6,5):(0,"空"), (6,6):(0,"空"), (6,7):(0,"空"), (6,8):(0,"空"), (6,9):("黑","象"),
(7,0):(0,"空"), (7,1):(0,"空"), (7,2):(0,"空"), (7,3):(0,"空"), (7,4):(0,"空"), (7,5):(0,"空"), (7,6):(0,"空"), (7,7):(0,"空"), (7,8):(0,"空"), (7,9):(0,"空"),
(8,0):(0,"空"), (8,1):(0,"空"), (8,2):(0,"空"), (8,3):(0,"空"), (8,4):("红","卒"), (8,5):(0,"空"), (8,6):(0,"空"), (8,7):(0,"空"), (8,8):(0,"空"), (8,9):(0,"空"),
}
print(*moves_elephant((4,2)))

if __name__ == '__main__':
main()


### 输入样例:
无输入
in


### 输出样例:
out
(2, 0) (2, 4)







答案:若无答案欢迎评论


# 返回棋子元组,比如("黑","炮");如为空返回(0,"空")
def getPiece(pos):
return board[pos] # 返回元组

# 返回棋子的颜色
def getColor(piece):
return piece[0]

def moves_empty_board_elephant(pos):
return [(pos[0] - 2, pos[1] - 2), (pos[0] - 2, pos[1] + 2), (pos[0] + 2, pos[1] - 2), (pos[0] + 2, pos[1] + 2)]

def moves_elephant(pos):
moves = []
for move in moves_empty_board_elephant(pos):
# 棋子挪动后得在棋盘上
if 0 <= move[0] <= 8 and 0 <= move[1] <= 9:
# 象不能过河
if getColor(getPiece(pos)) == '红':
if move[1] < 5:
# 去掉上面有同色棋子的位置
if board[move][0] != getColor(getPiece(pos)):
moves.append(move)
elif getColor(getPiece(pos)) == '黑':
if move[1] > 4:
# 去掉上面有同色棋子的位置
if board[move][0] != getColor(getPiece(pos)):
moves.append(move)
return moves

def main():
global board
board = {(0,0):(0,"空"), (0,1):(0,"空"), (0,2):(0,"空"), (0,3):(0,"空"), (0,4):("红","卒"), (0,5):(0,"空"), (0,6):(0,"空"), (0,7):(0,"空"), (0,8):(0,"空"), (0,9):("红","炮"),
(1,0):(0,"空"), (1,1):(0,"空"), (1,2):(0,"空"), (1,3):(0,"空"), (1,4):(0,"空"), (1,5):(0,"空"), (1,6):(0,"空"), (1,7):(0,"空"), (1,8):("红","马"), (1,9):("红","马"),
(2,0):(0,"空"), (2,1):(0,"空"), (2,2):(0,"空"), (2,3):(0,"空"), (2,4):(0,"空"), (2,5):(0,"空"), (2,6):(0,"空"), (2,7):(0,"空"), (2,8):(0,"空"), (2,9):(0,"空"),
(3,0):(0,"空"), (3,1):(0,"空"), (3,2):(0,"空"), (3,3):(0,"空"), (3,4):(0,"空"), (3,5):(0,"空"), (3,6):(0,"空"), (3,7):("黑","士"), (3,8):(0,"空"), (3,9):("黑","炮"),
(4,0):("红","将"), (4,1):("红","士"), (4,2):("红","象"), (4,3):(0,"空"), (4,4):(0,"空"), (4,5):("黑","车"), (4,6):(0,"空"), (4,7):("黑","象"), (4,8):("黑","士"), (4,9):("黑","将"),
(5,0):("红","士"), (5,1):(0,"空"), (5,2):(0,"空"), (5,3):(0,"空"), (5,4):(0,"空"), (5,5):(0,"空"), (5,6):(0,"空"), (5,7):(0,"空"), (5,8):(0,"空"), (5,9):(0,"空"),
(6,0):("红","象"), (6,1):(0,"空"), (6,2):(0,"空"), (6,3):(0,"空"), (6,4):("红","卒"), (6,5):(0,"空"), (6,6):(0,"空"), (6,7):(0,"空"), (6,8):(0,"空"), (6,9):("黑","象"),
(7,0):(0,"空"), (7,1):(0,"空"), (7,2):(0,"空"), (7,3):(0,"空"), (7,4):(0,"空"), (7,5):(0,"空"), (7,6):(0,"空"), (7,7):(0,"空"), (7,8):(0,"空"), (7,9):(0,"空"),
(8,0):(0,"空"), (8,1):(0,"空"), (8,2):(0,"空"), (8,3):(0,"空"), (8,4):("红","卒"), (8,5):(0,"空"), (8,6):(0,"空"), (8,7):(0,"空"), (8,8):(0,"空"), (8,9):(0,"空"),
}
print(*moves_elephant((4,2)))

if __name__ == '__main__':
main()

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。