Вложенные списки. Матрицы
Работа с матрицами — прямоугольными и квадратными таблицами
Какова размерность матрицы 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)