Python. Не работает присвоение в двумерном массиве

Решается задача приведения двумерного массива к треугольному виду. Программа игнорирует ячейки при попытке преобразовать их значение. Почему все прекрасно работает в Си, а на Python нет? Прилагаю код:

Заполнение матрицы.

import random as rnd
rows = 4
columns = rows+1
matrix = []
print('\nДо преобразований:\n')
for i in range(0, rows):
    matrix.append([])
    for j in range(0,columns):
        matrix[i].append(float(rnd.randint(10, 20)))
        print(matrix[i][j], end = ' ')
    print()

БЛОК ПРЕОБРАЗОВАНИЙ. Работает на Си.

for m in range(0, rows-1):
    for i in range(m+1, rows):
        for j in range(m, columns):
            matrix[i][j] = matrix[i][j] - (matrix[i][m]/matrix[m][m]) * matrix[m][j]

Вывод матрицы. Здесь только выравнивание ячеек. Проблема не здесь.

print('\nПосле преобразований:\n')
for j in range(0, columns):
    print(float(round(matrix[0][j], 1)), end = ' ')
print()

for i in range(1, rows):
    for j in range(0,columns):
        if (len(str(matrix[i][j])) == 4):
            print(float(round(matrix[i][j], 1)), end = ' ')
        if (len(str(matrix[i][j])) == 3):
            print(float(round(matrix[i][j], 1)), end = '  ')
        if (len(str(matrix[i][j])) <= 2):
            print(float(round(matrix[i][j], 1)), end = '   ')
    print()

Результаты.

введите сюда описание изображения


Ответы (1 шт):

Автор решения: A_Vaclav
До преобразований:

15.0 13.0 14.0 16.0 11.0 
18.0 19.0 18.0 10.0 15.0 
18.0 17.0 12.0 16.0 18.0 
14.0 13.0 16.0 16.0 15.0 

matrix[i][j] = matrix[i][j] - (matrix[i][m]/matrix[m][m]) * matrix[m][j]

После:
m   i   j   matrix[i][j] 
------------------------------
0   1   0   0.0         0.0 = 18.0 - (18.0 / 15.0) * 15.0
#теперь matrix[1][0] равен 0!
0   1   1   19.0        19.0 = 19.0 - (0.0 / 15.0) * 15.0 
#а 0 как не отнимай...
0   1   2   18.0
0   1   3   10.0
0   1   4   15.0
0   2   0   0.0
0   2   1   17.0
0   2   2   12.0
0   2   3   16.0
0   2   4   18.0
0   3   0   0.0
0   3   1   13.0
0   3   2   16.0
0   3   3   16.0
0   3   4   15.0
1   2   1   0.0
1   2   2   12.0
1   2   3   16.0
1   2   4   18.0
1   3   1   0.0
1   3   2   16.0
1   3   3   16.0
1   3   4   15.0
2   3   2   0.0
2   3   3   16.0
2   3   4   15.0

[[10.0, 20.0, 16.0, 20.0, 14.0],
 [0.0, 18.0, 16.0, 17.0, 10.0],
 [0.0, 0.0, 16.0, 12.0, 18.0],
 [0.0, 0.0, 0.0, 16.0, 17.0]]
→ Ссылка