怎么在python中判断一个矩阵中,某个数的上、下、左、右、左上、左下、右上、右下八个方向上与之直接相邻的数中,是否有比他大的数
时间: 2023-07-10 07:29:33 浏览: 61
可以使用以下代码来判断一个矩阵 `matrix` 中,某个数 `num` 的八个方向上是否存在比它大的数:
```python
def is_larger_around(matrix, row, col, num):
"""
判断矩阵 matrix 中,第 row 行第 col 列的数 num 的八个方向上是否有比它大的数
"""
for i in range(row-1, row+2):
for j in range(col-1, col+2):
if i >= 0 and i < len(matrix) and j >= 0 and j < len(matrix[0]):
if matrix[i][j] > num:
return True
return False
```
其中,`row` 和 `col` 分别表示矩阵中 `num` 所在的行和列,`matrix` 是一个二维矩阵。函数遍历 `(row-1, col-1)` 到 `(row+1, col+1)` 这个范围内的所有元素,如果发现有比 `num` 大的数,就返回 `True`,否则返回 `False`。
相关问题
定义一个4×4的整形矩阵,输入相应数值,并将左上半部分的,数值都加1,副对角线(右上到左下)上的值不变,右下半部分的值都减1。再输出该矩阵,每个整数占3个场宽。
以下是使用 Python 实现的代码:
```python
matrix = [[0 for j in range(4)] for i in range(4)] # 初始化矩阵
for i in range(4):
for j in range(4):
matrix[i][j] = int(input("请输入第{}行第{}列的数:".format(i+1, j+1)))
# 处理左上半部分的数
for i in range(4):
for j in range(i):
matrix[i][j] += 1
# 处理右下半部分的数
for i in range(4):
for j in range(i+1, 4):
matrix[i][j] -= 1
# 输出矩阵
for i in range(4):
for j in range(4):
print("{:3d}".format(matrix[i][j]), end=" ")
print()
```
示例输出:
```
请输入第1行第1列的数:1
请输入第1行第2列的数:2
请输入第1行第3列的数:3
请输入第1行第4列的数:4
请输入第2行第1列的数:5
请输入第2行第2列的数:6
请输入第2行第3列的数:7
请输入第2行第4列的数:8
请输入第3行第1列的数:9
请输入第3行第2列的数:10
请输入第3行第3列的数:11
请输入第3行第4列的数:12
请输入第4行第1列的数:13
请输入第4行第2列的数:14
请输入第4行第3列的数:15
请输入第4行第4列的数:16
2 2 3 4
6 6 7 8
9 10 11 12
13 14 15 14
```
用python实现一个带有胜负判断的五子棋
以下是一个简单的五子棋游戏的实现,其中包括了胜负判断。
```python
import numpy as np
def create_board():
board = np.zeros((15, 15))
return board
def place_piece(board, row, col, piece):
board[row][col] = piece
def is_valid_move(board, row, col):
if row < 0 or row > 14 or col < 0 or col > 14:
return False
elif board[row][col] != 0:
return False
else:
return True
def has_won(board, piece):
# 横向判断
for i in range(15):
for j in range(11):
if board[i][j] == piece and board[i][j+1] == piece and board[i][j+2] == piece and board[i][j+3] == piece and board[i][j+4] == piece:
return True
# 竖向判断
for i in range(11):
for j in range(15):
if board[i][j] == piece and board[i+1][j] == piece and board[i+2][j] == piece and board[i+3][j] == piece and board[i+4][j] == piece:
return True
# 左上到右下判断
for i in range(11):
for j in range(11):
if board[i][j] == piece and board[i+1][j+1] == piece and board[i+2][j+2] == piece and board[i+3][j+3] == piece and board[i+4][j+4] == piece:
return True
# 右上到左下判断
for i in range(11):
for j in range(4, 15):
if board[i][j] == piece and board[i+1][j-1] == piece and board[i+2][j-2] == piece and board[i+3][j-3] == piece and board[i+4][j-4] == piece:
return True
return False
board = create_board()
print(board)
player = 1
game_over = False
while not game_over:
# 玩家1下棋
if player == 1:
row = int(input("Player 1 row: "))
col = int(input("Player 1 column: "))
if is_valid_move(board, row, col):
place_piece(board, row, col, 1)
if has_won(board, 1):
print("Player 1 wins!")
game_over = True
else:
print("Invalid move, try again.")
continue
# 玩家2下棋
else:
row = int(input("Player 2 row: "))
col = int(input("Player 2 column: "))
if is_valid_move(board, row, col):
place_piece(board, row, col, 2)
if has_won(board, 2):
print("Player 2 wins!")
game_over = True
else:
print("Invalid move, try again.")
continue
print(board)
# 切换玩家
player = 3 - player
```
这个实现使用了numpy库来创建一个15x15的矩阵作为棋盘,玩家1下的棋子用数字1表示,玩家2下的棋子用数字2表示。游戏开始时,玩家1先下棋,然后切换到玩家2,直到有一方获胜或者棋盘填满。胜利条件通过检查每个五元组(横向、竖向、左上到右下、右上到左下)来确定。如果五元组中有五个相同的数字,则该玩家获胜。