Задача
Дана матрица 3х3. Нужно научиться с ней работать.
Эту матрицу мы зададим в файле data.txt:
Повторяем для 1 строк
Если переменная а0 - это список из 3 чисел, то к этим числам обращаемся a[0], a[1], a[2]
код | что делает |
print(a0) | печатает [4, 7, 9] - весь список |
print(a0[1]) | печатает число 7 |
a0[1] = 100 | вместо 7 стало число 100 |
print(a0[1]) | печатает число 100 |
print(a0) | печатает [4, 100, 9] - весь список |
Чтение и печать списка
Будем читать, печатать и вычислять сумму только для первой строки чисел 4 7 9
a0 = list(map(int, input().split())) # читаем строку чисел
print(a0) # [4, 7, 9] - печать списка чисел
# печать элементов списка по одному
print(a0[0]) # 4
print(a0[1]) # 7
print(a0[2]) # 9
# печать элементов списка по одному в цикле, col изменяется от 0 до 2
for col in range(3):
print(f'col={col}, a0[col]={a0[col]}')
# так мы можем изменять элемент списка
#a0[1] = 100 # вместо 7 в a0[1] теперь 100
#print(a0) # [4, 100, 9] - печать списка
Найдем сумму элементов списка
Напишем таблицу значений переменных
- i - номер элемента списка
- a0[i] - число, которое хранится в списке a0 под номером i
- res - сюда будем вычислять сумму
Выпишем формулу для вычисления res
Допишем код:
# сумма элементов списка
res = 0
for i in range(3):
res = res + a0[i]
print(f'i={i}, a0[i]={a0[i]} res={res}')
Запустим программу. Она напечатает
i=0, a0[i]=4 res=4
i=1, a0[i]=7 res=11
i=2, a0[i]=9 res=20
Список - это одна строка (row). В строке изменяется номер столбца (column). Будем обозначать номер столбца не переменной
i, а переменной
col.
Тогда код для чтения, печати и для суммирования с использованием переменной
col.
a0 = list(map(int, input().split()))
print(a0)
print(a0[0])
print(a0[1])
print(a0[2])
for col in range(3):
print(f'col={col}, a0[col]={a0[col]}')
#a0[1] = 100 # 7 -> 100
#print(a0)
res = 0
for col in range(3):
res = res + a0[col]
print(f'col={col}, a0[col]={a0[col]} res={res}')
Матрицы
Пусть дана матрица 3х3. У матрицы есть строки (rows) и столбцы (columns).
Сделали матрицу в коде
Матрица - это список списков. Ее можно задать прямо в коде:
a = [[4, 7, 9], [1, 6, 8], [3, 2, 0]]
или тот же код, который мы пишем красиво:
a = [
[4, 7, 9],
[1, 6, 8],
[3, 2, 0]
]
Печать матрицы
Печать всей матрицы - это просто
получим
[[4, 7, 9], [1, 6, 8], [3, 2, 0]]
- a[0] - список [4, 7, 9] - первая строка
- a[1] - список [1, 6, 8] - следующая строка
- a[2] - список [3, 2, 0] - последняя строка
Хотим напечатать красиво
print(a[0])
print(a[1])
print(a[2])
получим
[4, 7, 9]
[1, 6, 8]
[3, 2, 0]
Уже лучше. Но лучше сделаем это в цикле. Изменяться в цикле будет номер строки
row от 0 до 2:
for row in range(3):
print(a[row])
У нас есть код печати одного списка (одной строки), возьмем его и напишем вместо print(a[row]):
for row in range(3):
for col in range(3):
print(f'row={row} col={col} a[row][col]={a[row][col]}')
row=0 col=0 a[row][col]=4
row=0 col=1 a[row][col]=7
row=0 col=2 a[row][col]=9
row=1 col=0 a[row][col]=1
row=1 col=1 a[row][col]=6
row=1 col=2 a[row][col]=8
row=2 col=0 a[row][col]=3
row=2 col=1 a[row][col]=2
row=2 col=2 a[row][col]=0
Оставим только печать чисел a[row][col]
for row in range(3):
for col in range(3):
print(a[row][col])
получим
У нас лишний раз переводится строка после каждого числа. Можно после каждого числа печатать пробел, а не переводить строку:
for row in range(3):
for col in range(3):
print(a[row][col], end=' ') # end=' ' - в конце печатать пробел, а не переводить строку
получим
Почти идеально. Добавим в конце печати каждой строки перевод строки (напечатаем пустую строку)
for row in range(3):
for col in range(3):
print(a[row][col], end=' ') # end=' ' - в конце печатать пробел, а не переводить строку
print('') # закончили печать очередной строки - новая строка
получим
Чтение матрицы
Читаем матрицу на n строк так (объяснения как это работает - на следующих уроках):
n = 3 # сейчас мы знаем, что у нас будут 3 строки
# читаем матрицу из n строк
a = [list(map(int, input().split())) for i in range(n)]
Сумма всех элементов матрицы
n = 3
'''
a0 = list(map(int, input().split()))
print(a0)
print(a0[0])
print(a0[1])
print(a0[2])
for i in range(3):
print(f'i={i}, a0[i]={a0[i]}')
#a0[1] = 100 # 7 -> 100
#print(a0)
res = 0
for i in range(3):
res = res + a0[i]
print(f'i={i}, a0[i]={a0[i]} res={res}')
'''
# читаем матрицу из n строк
a = [list(map(int, input().split())) for i in range(n)]
print(a)
print('---')
for row in range(3):
print(a[row])
print('---')
print('row col a[row][col]')
for row in range(3):
for col in range(3):
print(row, col, a[row][col])
print('---')
for row in range(3):
for col in range(3):
print(a[row][col], end=' ')
print() # print new line
# sum row 0
def sum_row(a, row):
""" Считает сумму чисел в матрице а на строке row и возвращает эту сумму"""
res = 0
for col in range(3):
res = res + a[row][col]
print(f'col={col}, a[row][col]={a[row][col]} res={res}')
return res
# x = sin(3.14)
res0 = sum_row(a,row=0)
print('res0 =', res0)
res1 = sum_row(a,row=1)
print('res1 =', res1)
res2 = sum_row(a,row=2)
print('res2 =', res2)
print('---')
res_total = 0
for row in range(3):
res_row = sum_row(a, row=row)
res_total = res_total + res_row
print(f'SUM ROW: row={row} res_row={res_row} res_total={res_total}')
print('---')
# sum all matrix
res_total = 0
for row in range(3):
res_row = 0
for col in range(3):
res_row = res_row + a[row][col]
print(f'row={row} col={col}, a[row][col]={a[row][col]} res={res_row}')
res_total = res_total + res_row
print(f'SUM ROW: row={row} res_row={res_row} res_total={res_total}')
print('---')
# sum all matrix
res = 0
for row in range(3): # разные магазины магазин0, магазин1, магазин2
# res = 0 # ???
for col in range(3):
res = res + a[row][col]
print(f'row={row} col={col}, a[row][col]={a[row][col]} res={res}')
print(f'SUM ROW: row={row} res={res}')
--
TatyanaDerbysheva - 21 Oct 2019