Файл: Учебное пособие по изучению языка программировани Python Л. Самыкбаева, А. Беляев, А. Палитаев, И. Ташиев, С. Маматов.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 259
Скачиваний: 7
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PY THON
74
17. Тема:
Матрицы
Матрица – это двумерный массив, имеющий табличную структуру. Описы- ваются массивы так же, как одномерные. Разница состоит в том, что у эле- мента двумерного массива две координаты (два индекса) – номер строки и номер столбца, в которых находится элемент.
Например, при составлении программы для игры в крестики-нолики мож- но пустым клеткам присвоить код «–1», клетке. С ноликом – код 0, а клетке с крестиком – код 1:
В Python для работы с таблицами используют списки. Двумерная таблица хранится как список, каждый элемент которого тоже представляет собой список («список списков»). Например, таблицу, показанную на рисунке, можно записать так:
a = [[-1, 0, 1],
[-1, 0, 1],
[0, 1, -1]]
Данный оператор можно записать в одну строку:
a = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1]]
Но поскольку человек воспринимает матрицу как таблицу, лучше и на экран выводить ее в виде таблицы. Для этого матрицу можно записать так:
a = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1]]
for
i
in
range ( len(a) ):
for
j
in
range
( len(a[i]) ):
(
'{:4d}'
.
format(a[i][j]), end =
''
)
()
>>>
Формат вывода
{:4d}
– раздвигает поля между столбцами: в нашем приме- ре перед каждым элемен- том ставится 4 пробела.
75
МАТРИЦЫ
-1 0 1
-1 0 1
0 1 -1
Здесь i – индекс подсписка (определяет число строк), а j – индекс элемента внутри подсписка (определяет число столбцов); len(a) – это число подспис- ков в большом списке (их здесь 3), len(a[i]) – число элементов подсписка, которое совпадает с числом столбцов.
a [i] [j] – это элемент в подсписке i, под j-индексом:
a[0][0]==-1, a[0][1]==0, a[0][2]==1, a[1][0]==-1,
и т.д.
Этот же пример можно записать так:
for
row
in
a:
#в строке a
for
elem
in
row:
#для элемента в строке
(elem, end=
' '
)
#вывести элементы
()
Задача 1. Заполним матрицу случайными цифрами. Количество строк и столбцов введем с клавиатуры.
Каждому элементу матрицы можно присвоить любое значение. Поскольку индексов два, для заполнения матрицы нужно использовать вложенный цикл. Далее будем считать, что существует матрица a, состоящая из n строк и m столбцов, а i и j – целочисленные переменные, обозначающие индексы строки и столбца. В этом примере матрица заполняется случайными числа- ми и выводится на экран:
import
random
n =
int
(
input
(
'Введите количество строк: '
))
m =
int
(
input
(
'Введите количество столбцов: '
))
a = []
for
i
in
range
(n):
a.append([])
for
j
in
range
(m):
a[i].append (random.randint (10,40))
#каждому э-ту
присваивается случайное число от 10 до 40
for
i
in
a:
#каждый подсписок выведется с новой строки,
(i)
#но в квадратных скобках
>>>
[33, 16, 31, 33]
#случайные числа при n=2, m=4
[39, 35, 11, 15]
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PY THON
76
Эту же задачу запишем короче, и так, чтобы в результате не было скобок:
import
random
n =
int
(
input
(
'Введите количество строк: '
))
m =
int
(
input
(
'Введите количество столбцов: '
))
a = [[random.randint(10, 40)
for
i
in
range
(m)]
for
j
in
range
(n)]
(
' '
.join([
str
(elem)
for
elem
in
row]))
#все элементы
объединяются и перечисляются через пробел
Обработка двумерного массива
Такой же двойной цикл нужно использовать для перебора всех элементов матрицы. Первый цикл перебирает номер строки, второй цикл бежит по элементам внутри строки. Вот как вычисляется сумма (s) всех элементов:
a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]]
s = 0
for
i
in
range
(len(a)):
for
j
in
range
(len(a[i])):
s + = a[i][j]
(s)
#результат 45
Для этой записи можно использовать встроенную функцию sum:
a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]]
s = 0
for
row
in
a:
s + =
sum
(row)
(s)
Обработку некоторых элементов матрицы рассмотрим на примере задачи:
Задача 2. Пусть дан квадратный массив из n строк и n столбцов. Необхо- димо заполнить диагональ единичками, область слева от нее заполнить двойками, а область справа – нулями.
Главная диагональ – это элементы a[0, 0], a[1, 1], …, a[n-1, n-1], то есть номер строки равен номеру столбца. Для заполнения главной диагонали единицами нужен один цикл:
for
i
in
range
(n):
#работаем с a[i][i]
a[i][i] = 1
#заполняем их единицами
77
МАТРИЦЫ
Элементы справа от диагонали заполним значением 0, для чего нам пона- добится в каждой из строк с номером i присвоить значение элементам a[i]
[j] для j=i+1, ..., n-1. Здесь нам понадобятся вложенные циклы:
for
i
in
range
(n):
for
j
in
range
(i + 1, n):
a[i][j] = 0
Аналогично присваиваем значение 2 элементам a[i][j] для j=0, ..., i-1:
for
i
in
range
(n):
for
j
in
range
(0, i):
a[i][j] = 2
Если внешние циклы объединить в один, то можно получить одно такое решение:
n = 4
a = [[0] * n
for
i
in
range
(n)]
for
i
in
range
(n):
for
j
in
range
(0, i):
a[i][j] = 2
a[i][i] = 1
for
j
in
range
(i + 1, n):
a[i][j] = 0
for
row
in
a:
(' '.join([
str
(elem)
for
elem
in
row]))
КОМПЬЮТЕРНЫЙ ПРАКТИКУМ:
1) Заполните прямоугольную матрицу a, имеющую n строк и
m столбцов элементами из случайных чисел. Найдите среднее арифметическое элементов массива.
2) Найдите наибольшее значение среди средних значений для каж
дой строки матрицы.
78
ПРИЛОЖЕНИЯ
Приложение №1
Приложение №2
79
ПРИЛОЖЕНИЯ
80
ПРИЛОЖЕНИЯ