Академия Eduson

Вложенные списки. Матрицы

Работа с матрицами — прямоугольными и квадратными таблицами

 Какова размерность матрицы matrix?:

matrix  = [[45, 4, 77],
           [41, 7, 17]]

 Ответ:  2 x 3

 Что покажет приведенный ниже фрагмент кода?:

matrix  = [[1, 2, 8, 0],
           [-4, 1, 9, 4],
           [41, 71, 2, -2]]

print(matrix[2][3])

 Ответ:  -2

 Что покажет приведенный ниже фрагмент кода?:

n = 3
a = [[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]

for i in range(n):
    for j in range(n):
        print(a[i][j], end=' ')
    print()

 Ответ:  1 2 3;  4 5 6;  7 8 9

 Что покажет приведенный ниже фрагмент кода?:

n = 3
a = [[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]

for i in range(n):
    for j in range(n):
        print(a[j][i], end=' ')
    print()

 Ответ:  1 4 7;  2 5 8;  3 6 9

 Что покажет приведенный ниже фрагмент кода?:

n = 3
a = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

for i in range(n):
    for j in range(n):
        print(a[n - i - 1][n - j - 1], end=' ')
    print()

 Ответ:  9 8 7;  6 5 4;  3 2 1

 Что покажет приведенный ниже фрагмент кода?:

n = 5
a = [[19, 21, 33, 78, 99], 
     [41, 53, 66, 98, 76], 
     [79, 80, 90, 60, 20],
     [33, 11, 45, 67, 90],
     [45, 67, 12, 98, 23]]

maximum = -1
minimum = 100

for i in range(n):
    if a[i][i] > maximum:
        maximum = a[i][i]
    if a[i][n - i - 1] < minimum:
        minimum = a[i][n - i - 1]

print(minimum + maximum)

 Ответ:  101

 На вход программе подаются два натуральных числа n и m, каждое на отдельной строке — количество строк и столбцов в матрице. Далее вводятся сами элементы матрицы — слова, каждое на отдельной строке; подряд идут элементы сначала первой строки, затем второй, и т.д. Напишите программу, которая сначала считывает элементы матрицы один за другим, затем выводит их в виде матрицы.

n = int(input())
m = int(input())
l = []

for i in range(n):
    l.append([input() for _ in range(m)])
print(*l[i])

 На вход программе подаются два натуральных числа n и m, каждое на отдельной строке — количество строк и столбцов в матрице. Далее вводятся сами элементы матрицы — слова, каждое на отдельной строке; подряд идут элементы сначала первой строки, затем второй, и т.д.
 Напишите программу, которая считывает элементы матрицы один за другим, выводит их в виде матрицы, выводит пустую строку, и снова ту же матрицу, но уже поменяв местами строки со столбцами: первая строка выводится как первый столбец, и так далее.

n = int(input())
m = int(input())

l = []

for i in range(n):
    c = []
    for j in range(m):
        c.append(input())
    l.append(c)

for x in l:
    print(*x)
print()

for i in range(m):
    for j in range(n):
        print(l[j][i], end=' ')
    print()

 Следом квадратной матрицы называется сумма элементов главной диагонали. Напишите программу, которая выводит след заданной квадратной матрицы.

a = int(input())

s = 0

for i in range(a):
    n = int(input().split()[i])
    s += n
print(s)

 Напишите программу, которая выводит количество элементов квадратной матрицы в каждой строке, больших среднего арифметического элементов данной строки.

a = int(input())
l = []

for i in range(a):
    n = [int(j) for j in input().split()]
    l.append(n)

for j in range(len(l)):
    c = 0
    for k in range(len(l)):
        if l[j][k] > sum(l[j]) / a:
            c += 1
print(c)

 Напишите программу, которая выводит максимальный элемент в заштрихованной области квадратной матрицы.

a = int(input())

l = []
rez = []

for _ in range(a):
    n = [int(i) for i in input().split()]
    l.append(n)

for i in range(a):
    for j in range(a):
        if i >= j:
            rez.append(l[i][j])  
print(max(rez))

 Напишите программу, которая выводит максимальный элемент в заштрихованной области квадратной матрицы.

a = int(input())

l = []

for i in range(a):
    n = [int(i) for i in input().split()]
    for j in range(len(n)):
        if (i >= j and i <= a - 1 - j) or (i <= j and i >= a - 1 - j) or (i == j) or (i + j +1 == a):
            l.append(n[j])

print(max(l))

 Квадратная матрица разбивается на четыре четверти, ограниченные главной и побочной диагоналями: верхнюю, нижнюю, левую и правую. Напишите программу, которая вычисляет сумму элементов: верхней четверти; правой четверти; нижней четверти; левой четверти.

n= int(input())

m = [[int(i) for i in input().split()] for _ in range(n)]

left = sum([sum([m[i][j] for j in range(n) if i > j and i < n - 1 - j]) for i in range(n)])
down = sum([sum([m[i][j] for j in range(n) if i > j and i > n - 1 - j]) for i in range(n)])
up = sum([sum([m[i][j] for j in range(n) if i < j and i < n - 1 - j]) for i in range(n)])
right = sum([sum([m[i][j] for j in range(n) if i < j and i > n - 1 -j]) for i in range(n)])

print(f"""Верхняя четверть: {up}
Правая четверть: {right}
Нижняя четверть: {down}
Левая четверть: {left}""")

 На вход программе подаются два натуральных числа n и m — количество строк и столбцов в матрице. Создайте матрицу mult размером n×m и заполните её таблицей умножения по формуле mult[i][j] = i * j.

n = int(input())
m = int(input())

ll = []

l = [[0] * m for _ in range(n)]

for i in range(n):
    for j in range(m):
        l[i][j] = i * j
        ll = l

for x in ll:
    print(*x)

 На вход программе подаются два натуральных числа n и m — количество строк и столбцов в матрице, затем n строк по m целых чисел в каждой, отделенных символом пробела. Напишите программу, которая находит индексы (строку и столбец) первого вхождения максимального элемента.

n = int(input())
m = int(input())

l = [[int(i) for i in input().split()] for _ in range(n)]

m_m = l[0][0]
pos = '00'

for i in range(n):
    for j in range(m):
        if m_m < l[i][j]:
            m_m = l[i][j]
            pos = i, j

print(*pos)

 Напишите программу, которая меняет местами столбцы в матрице.

n = int(input())
m = int(input())

l = [[int(i) for i in input().split()] for _ in range(n)]

a = input().split()
x, y = int(a[0]), int(a[1])

for i in range(n):
    l[i][x], l[i][y] = l[i][y], l[i][x]

for z in l:    
    print(*z)

 Напишите программу, которая проверяет симметричность квадратной матрицы относительно главной диагонали.

n = int(input())

l = [[int(i) for i in input().split()]for _ in range(n)]

c = 0

for i in range(n):
    for j in range(n):
        if l[i][j] == l[j][i] and i != j:
            c += 1

if c == n * n - n:
    print('YES')
else:
    print('NO')

 Дана квадратная матрица чисел. Напишите программу, которая меняет местами элементы, стоящие на главной и побочной диагонали, при этом каждый элемент должен остаться в том же столбце (то есть в каждом столбце нужно поменять местами элемент на главной диагонали и на побочной диагонали).

n = int(input())

l = [[int(i) for i in input().split()]for _ in range(n)]

for i in range(n):
    for j in range(n):
        if i == j or i == n - 1 - j:
            print(l[n - 1 - i][j], end=' ')
        else:
            print(l[i][j], end=' ')
print()

 Дана квадратная матрица чисел. Напишите программу, которая зеркально отображает её элементы относительно горизонтальной оси симметрии.

n = int(input())

l = [[int(i) for i in input().split()] for _ in range(n)]

for i in range(n // 2):
    l[i], l[n - 1 - i] = l[n - 1 - i], l[i]

for x in l:
    print(*x)

 Напишите программу, которая поворачивает квадратную матрицу чисел на 90 градусов по часовой стрелке.

n = int(input())

l = [[int(i) for i in input().split()]for _ in range(n)]

for i in range(n):
    for j in range(n - 1, -1, -1):
        print(l[j][i], end=' ')
print()

 На шахматной доске 8×8 стоит конь. Напишите программу, которая отмечает положение коня на доске и все клетки, которые бьёт конь. Клетку, где стоит конь, отметьте английской буквой N, а клетки, которые бьёт конь, отметьте символами *, остальные клетки заполните точками.

c, r = input().strip()

c_c = {'a':0,'b':1, 'c':2, 'd':3, 'e':4, 'f':5, 'g':6, 'h':7}
r_r = {'1':7, '2':6, '3':5, '4':4, '5':3, '6':2, '7':1, '8':0}

arr = [['N' if [i, j] == [r_r[r], c_c[c]] else '.' for j in range(8)] for i in range(8)]

for i in range(8):
    for j in range(8):
        if (r_r[r] - i) * (c_c[c] -j) in [-2, 2]: arr[i][j] = '*'

for x in arr:
    print(*x, sep=' ')

 Магическим квадратом порядка n называется квадратная таблица размера n×n, составленная из всех чисел 1,2,3,…,n**2 так, что суммы по каждому столбцу, каждой строке и каждой из двух диагоналей равны между собой. Напишите программу, которая проверяет, является ли заданная квадратная матрица магическим квадратом.

n = int(input())

matrix = [[int(i) for i in input().split()] for _ in range(n)]

numbers = [] 
flag = True

for row in matrix:
    for elem in row:
        if elem in numbers or elem == 0:
            flag = False
            break
        numbers.append(elem)

target_sum = sum(matrix[0]) 

if flag:
    for c in range(n):
        sum_col = []
        for r in range(n):
            sum_col.append(matrix[r][c])
        if sum(sum_col) != target_sum:
            flag = False
            break

if flag:
    for row in matrix:
        if sum(row) != target_sum:
            flag = False
            break

main_diag = [] 

if flag:
    for i in range(n):
        main_diag.append(matrix[i][i])

if sum(main_diag) != target_sum:
    flag = False

side_diag = []

if flag:
    for j in range(n):
        side_diag.append(matrix[j][n - j - 1])

if sum(side_diag) != target_sum:
    flag = False

if flag:
    print("YES")
else:
    print("NO")

 На вход программе подаются два натуральных числа n и m. Напишите программу для создания матрицы размером n×m, заполнив её символами . и * в шахматном порядке. В левом верхнем углу должна стоять точка. Выведите полученную матрицу на экран, разделяя элементы пробелами.

a, b = [int(i) for i in input().split()]

l = [['.'] * b for i in range(a)]

for i in range(a):
    if i == 0 or i % 2 == 0:
        for j in range(1, b, 2):
            l[i][j] = '*'
    else:
        for j in range(0, b, 2):
            l[i][j] = '*'

for x in l:            
    print(*x) 

 На вход программе подается натуральное число n. Напишите программу, которая создает матрицу размером n×n и заполняет её по следующему правилу:

  • числа на побочной диагонали равны 1;
  • числа, стоящие выше этой диагонали, равны 0;
  • числа, стоящие ниже этой диагонали, равны 2.
n = int(input())

l = [[0] * n for _ in range(n)]

for i in range(n):
    l[i][n - i - 1] = 1
    for j in range(n):
        if i > n - j - 1:
            l[i][j] = 2

for x in l:
    print(*x)

 На вход программе подаются два натуральных числа n и m. Напишите программу, которая создает матрицу размером n×m и заполняет её числами от 1 до n*m в соответствии с образцом.

a = input().split()
n = int(a[0])
m = int(a[1])

s = []
c = 1

for i in range(n):
    s.append([])
    for j in range(m):
        s[i].append(c)
        c += 1
        print(f'{s[i][j]}'.ljust(3), end='')
    print()

 На вход программе подаются два натуральных числа n и m. Напишите программу, которая создает матрицу размером n×m, заполнив её в соответствии с образцом.

n, m = [int(i) for i in input().split()]

l = [[0] * m for _ in range(n)]

c = 1

for i in range(m):
    for j in range(n):
        l[j][i] = c
        c += 1

for x in l:
    print(*x)

 На вход программе подается натуральное число n. Напишите программу, которая создает матрицу размером n×n, заполнив её в соответствии с образцом: разместить единицы на главной и побочной диагоналях, остальные позиции матрицы заполнить нулями.

n = int(input())

l = [[0] * n for _ in range(n)]

for i in range(n):
    l[i][i] = 1
    l[i][n - i - 1] = 1

for x in l:
    print(*x)

 На вход программе подается натуральное число n. Напишите программу, которая создает матрицу размером n×n, заполнив её в соответствии с образцом.

n = int(input())

l = [[0] * n for _ in range(n)]

for i in range(n):
    for j in range(n):
        if i <= j and i <= n - 1 - j or i >= j and i >= n - 1 - j:
            l[i][j] = 1

for x in l:
    print(*x)

 На вход программе подаются два натуральных числа n и m. Напишите программу, которая создает матрицу размером n×m, заполнив её в соответствии с образцом.

n, m = [int(i) for i in input().split()]

l = [i for i in range(1, m + 1)]

for i in range(n):
    for j in range(m):
        print(l[j], end=' ')
    ud = l.pop(0)
    l.append(ud)
print()

 На вход программе подаются два натуральных числа n и m. Напишите программу, которая создает матрицу размером n×m, заполнив её "змейкой".

n, m = [int(i) for i in input().split()]

l = [[0] * m for _ in range(n)]

c = 1

for i in range(n):
    for j in range(m):
        l[i][j] = c
        c += 1

for i in range(n):
    if i % 2 == 0:
        print(*l[i])
    else:
        l[i].reverse()
        print(*l[i])

 На вход программе подаются два натуральных числа n и m. Напишите программу, которая создает матрицу размером n×m, заполнив её "диагоналями".

n, m = [int(i)for i in input().split()]

l = [[0] * m for _ in range(n)]

c = 1
k = 0

while c != n * m + 1:
    for i in range(n):
        for j in range(m):
            if i + j == k:
                l[i][j] = c
                c += 1
    k += 1

for i in range(n):
    for j in range(m):
        print(str(l[i][j]).ljust(3), end='')
print()

 На вход программе подаются два натуральных числа n и m. Напишите программу, которая создает матрицу размером n×m, заполнив её "спиралью".

n, m = [int(i) for i in input().split()]

l = [[0] * m for _ in range(n)]

c = 1
a = 0
b = 0
row = n - 1
col = m - 1

while a <= col and b <= row:
    for i in range(a, col + 1):
        l[a][i] = c
        c += 1
    b += 1

    for i in range(b, row + 1):
        l[i][col] = c
        c += 1
    col -= 1

    if b <= row:
        for i in range(col, a - 1, - 1):
            l[row][i] = c
            c += 1
        row -= 1

    if a <= col:
        for i in range(row, b - 1, - 1):
            l[i][a] = c
            c += 1
        a += 1

for x in l:
    print(*x)