Дан массив А(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)]