Заменить нижнюю часть матрицы на нули

Есть задача заменить верхнюю половину матрицы NxN на единицы кроме тех, которые слева от главной диагонали. Я думал так: заменить всё что выше главной диагонали на единицы и потом просто заменить всё что в нижней половине матрицы на 0. Заменил всё что выше главной диагонали на 1, но вот никак не пойму как заменить нижнюю половину матрицы на 0. пробовал делать так:

n#размер строк и столбиков 
half=n/2
for i in range(n):
    for j in range(n):
        if i and j>half:
            matrix[i][j] = 0

но вышло это :

[0, 1, 1, 1]
[0, 0, 1, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]

а хотелось:

[0, 1, 1, 1]
[0, 0, 1, 1]
[0, 0, 0, 0]
[0, 0, 0, 0]

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

Автор решения: Gladius

У меня получилось как-то так:

matrix = [[0, 1, 1, 1],
          [0, 0, 1, 0],
          [0, 0, 0, 0],
          [0, 0, 0, 0]]

n = len(matrix)

half = n // 2

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

print(matrix)

Должно работать и с четным, и с нечетным количеством строк/столбцов

→ Ссылка