Дан массив А(n,m). Возвести в квадрат каждый четный элемент, у которого номер строки нечетный. Python

Дан массив А(n,m). Возвести в квадрат каждый четный элемент, у которого номер строки нечетный

a = [1, 2, 3], [4, 5, 6], [7, 8, 9]
c = [0, 0, 0], [0, 0, 0], [0, 0, 0]
n = 3


def select():
    for i in range(n, 2):
        for j in range(n):
            global a
            if int(a[i][j]) % 2 == 0:
                c[i][j] = a[i][j] * a[i][j]
            else:
                continue


select()
print(c)

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

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

"смешались вместе люди, кони" :)

у вас не работает функция, потому что

for i in range(n, 2):

означает

for i in range(3, 2):

т.е. 0 циклов - от 3 до 2 с шагом 1 не дойти

кстати

else:
    continue

совершенно необязательна, поскольку и так будет выполнена

кроме того у вам список целых чисел и дополнительно переводить их в целые числа

int(a[i][j])

необязательно

да и само условие в вашем коде неправильное, оно не соответствует условию задачи... как я понимаю

Ваш код должен был бы выглядеть так:

a = [1, 2, 3], [4, 5, 6], [7, 8, 9]
c = [0, 0, 0], [0, 0, 0], [0, 0, 0]


for i in range(len(a)):
    for j in range(len(a[i])):
        if i % 2 == 1 and j % 2 == 0:
            c[i][j] = a[i][j] * a[i][j]
        else:
            c[i][j] = a[i][j]

print(c)

или, если предпочитаете однострочные решения:

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

c = [[a[i][j]**2 if i % 2 == 1 and j % 2 == 0 else a[i][j] for j in range(len(a[i]))] for i in range(len(a))]

print(c)

или так:

c = [[j[1]**2 if i[0] % 2 == 1 and j[0] % 2 == 0 else j[1] for j in enumerate(i[1])] for i in enumerate(a)]

или так (чуть покороче):

c = [[j[1]**2 if i[0] % 2 and not j[0] % 2 else j[1] for j in enumerate(i[1])] for i in enumerate(a)]

или так (для любителей более короткого изврата):

c = [[j[1]**(1 + (i[0] % 2 and not j[0] % 2)) for j in enumerate(i[1])] for i in enumerate(a)]
→ Ссылка