Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2020 13:10:39

Zay
Зарегистрирован: 2020-10-10
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вложенные списки

Есть задача , нужно посчитать сумму элементов двумерного квадратного (NxN) списка, которые расположены на главной диагонали.
Программа сперва принимает на вход число N (N<=15) - количество строк и столбцов в списке, а затем в N строках записаны элементы списка.

Такую проверку делает платформа:
Sample Input 1:

2
1 2
3 4
То есть наполнение матрицы делается построчно через пробел.
В моём коде ввод происходит построчно. Дополнительно сделал вывод что бы посмотреть вид матрицы.

 a=[]
n=int(input())
s=0
for i in range(n):
  b=[]
  for j in range(n):  
    q=int(input())
    b.append(q)
  a.append(b)
for i in a:
  print(i,end='')
  print()
for i in range(n):
  for j in range(n):
    if i==j:
      s+=a[i][j]
print(s)
мне нужно ввести каждую строку целиком через пробе одной строкой.
вместо:
 q=int(input())
ввожу:
q=list(map(int, input().split()))
программа работает не корректно…
В чем моя ошибка?, пожалуйста не надо предлагать свои коды, исправьте мой

Офлайн

#2 Окт. 10, 2020 14:56:37

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Вложенные списки

 n=int(input())
s=0
b=[]
for j in range(n):
	q=list(map(int, input().split()))
	b.append(q)
print(b)
for i in range(n):
  for j in range(n):
    if i==j:
      s+=b[i][j]
print(s)

Офлайн

#3 Окт. 10, 2020 19:12:57

Zay
Зарегистрирован: 2020-10-10
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вложенные списки

Можно с комментарием если не трудно, не очень пойму логику

Офлайн

#4 Окт. 10, 2020 19:30:38

Zay
Зарегистрирован: 2020-10-10
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Вложенные списки

Всё спасибо. Я понял всё, но получается что код только для таблиц в которых 2 строки и неограниченное количество вложенностей в каждую строку? Квадратная таблица не залаживается в коде.

Офлайн

#5 Окт. 10, 2020 19:44:20

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Вложенные списки

вам нужно проитись по спискам состовляющим вашу матрицу и брать поиндексно элементы из них со смещением в 1
добовляя найденые элементы в список (который и будем обсчитывать) после чего сумировать все элементы получившегося списка sum()

упс главная диаганаль не то что выше
это https://ru.wikipedia.org/wiki/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B4%D0%B8%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C

ок тогда код от xam1816


зы
ввод

 In [1]: q = [int(i) for i in input().split(' ')]
1 2 3 4 4 5
In [2]: print(q)
[1, 2, 3, 4, 4, 5]
In [3]:

да нет все правильно … после чего сумировать все элементы получившегося списка sum()



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Окт. 10, 2020 20:26:09)

Офлайн

#6 Окт. 11, 2020 01:48:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Вложенные списки

Отдельно делаешь ввод массива

  
>>> def input_array():
...     rows = int(input())
...     out = [list(map(int, input().split()))
...            for _ in range(rows)]
...     return out
... 
>>> input_array()
2
1 2
3 4
[[1, 2], [3, 4]]
>>> 
>>> input_array()
3
1 2 3
4 5 6
7 8 9
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>>

Отдельно делаешь подсчёт суммы элементов на главной диагонали любой матрицы (не только квадратной)
  
>>> def get_maindiag_sum(mtx):
...     return sum(
...         mtx[i][j]
...         for i in range(len(mtx))
...         for j in range(len(mtx[0]))
...         if i == j
...     )
... 
>>> get_maindiag_sum([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
15
>>> get_maindiag_sum([[1, 2, 3], [4, 5, 6]])
6
>>>

Потом собираешь всё, сделанное ранее, вместе
  
>>> def input_array():
...     rows = int(input())
...     out = [list(map(int, input().split()))
...            for _ in range(rows)]
...     return out
... 
>>> def get_maindiag_sum(mtx):
...     return sum(
...         mtx[i][j]
...         for i in range(len(mtx))
...         for j in range(len(mtx[0]))
...         if i == j
...     )
... 
>>> print('result =', get_maindiag_sum(input_array()))
3
1 2 3
4 5 6
7 8 9
result = 15
>>>
Так ты можешь писать много разных программ, используя готовый код, который уже написан тобой или другими давно. Учишься сразу писать такой код (многоразовый), учишься использовать существующий код повторно (адаптировать его под новую программу, если нужно его немного переделать перед этим).



Отредактировано py.user.next (Окт. 11, 2020 01:53:12)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version