我的代码能更简单些吗?

2024-10-01 15:35:25 发布

您现在位置:Python中文网/ 问答频道 /正文

一个n乘n的方阵(数字表)是一个魔术矩阵,如果它的行和每列的和是相同的。例如,下面的4乘4矩阵是一个魔法矩阵。每行和每列的和是完全相同的值34

        16 2 3 13
        5 11 10 8
        9 7 6 12
        4 14 15 1

写一个函数,用一个4乘4的矩阵作为参数,然后判断这个矩阵是否神奇。这个 #矩阵应存储为二维列表。用魔法矩阵和非魔法矩阵测试你的函数

def magic(matrix = []):

    magic_matrix = False
    if len(matrix) != 4:
        print('Enter a 4 * 4 matrix')
        return magic_matrix

    row1Sum = sum(matrix[0]) 
    rowSum_ok = True
    for row in range(1, 4):
        if sum(matrix[row]) != row1Sum:
            rowSum_ok = False
            break
    colSum_ok = True
    for col in range(4):
        s_col = 0
        for row in range(4):
            s_col += matrix[row][col]
        if s_col != row1Sum:
            colSum_ok = False
            break
        if rowSum_ok and colSum_ok:
            magic_matrix = True
        return magic_matrix

def mainMagic():
    m1 = [[9, 6, 3, 16],
          [4, 15, 10, 5],
          [14, 1, 8, 11],
          [7, 12, 13, 2]]
    print('\nThe matrix:')
    for i in range(4):
        for j in m1[i]:
            print(str(j).rjust(3), end =' ')
        print()
    if magic(m1):
        print('is a magic matrix.')
    else:
        print('is not a magic matrix.')

    m2 = [[6, 22, 44, 18],
          [1, 11, 10, 13],
          [3, 17, 6, 12],
          [9, 14, 2, 1]]
    print('\nThe matrix:')
    for i in range(4):
        for j in m2[i]:
            print(repr(j).rjust(3), end = ' ')
        print()
    if magic(m2):
        print('is a magic matrix.')
    else:
        print('is not a magic matrix.')

mainMagic()

Tags: infalseforifismagic魔法range
1条回答
网友
1楼 · 发布于 2024-10-01 15:35:25

一对set comprehensions和一对^{}相当直接地进行清理,比如:

代码:

def is_magic(matrix):
    sum_rows = {sum(row) for row in matrix}
    sum_cols = {sum(col) for col in zip(*matrix)}
    return len(sum_cols) == 1 and sum_cols == sum_rows

测试代码:

m1 = [[9, 6, 3, 16],
      [4, 15, 10, 5],
      [14, 1, 8, 11],
      [7, 12, 13, 2]]

m2 = [[6, 22, 44, 18],
      [1, 11, 10, 13],
      [3, 17, 6, 12],
      [9, 14, 2, 1]]

print(is_magic(m1))
print(is_magic(m2))

结果:

True
False

相关问题 更多 >

    热门问题