В вашем коде несколько ошибок:
- вы неправильно используете команду диапазона, первый индекс включительно , последний индекс эксклюзив -при движении в обратном направлении вам нужно
(len-1,-1,-1)
не (len,0,-1)
- вы ошибаетесь, вы суммируете ВСЕ значения, а не только диагональ
- вы суммируете неправильно, перезаписывая
z
каждый раз безувеличение n
См. встроенные комментарии об ошибках / исправлениях / улучшениях.
Я заменил ручные вводы фиксированными / случайными значениями, чтобы прервать ввод вручную:
import random
r = 5
c = 5
a = []
# add random numbers into list of list
for i in range(r):
a.append([])
for j in range(c):
a[-1].append(random.randint(1,500))
# print data formatted
# do not recalc len(a) / len(a[0]) all the time, use r and c
for i in range(r):
for j in range(c):
print("{:>5}".format(a[i][j]),end=" ")
print()
# sum anti diagonal
n=0
# this calculates the sum of _all_ values, not of the diagonal
# do not recalc len(a) / len(a[0]) all the time, use r and c
for i in range(r):
# for j in range(c,0,-1):
# range uses (inclusive,exclusive,step) limits - your c is 1 too high
# because of 0-indexing. fix using
for j in range(c-1,-1,-1):
# z=a[i][j]+n
# you need to increment n - not do stuff to z
n += a[i][j]
print(n)
Вывод:
33 69 430 218 15
149 327 44 33 279
327 57 431 57 195
307 460 268 465 170
154 325 380 79 217
5489 # sum of ALL values
Чтобы получить только диагональ, вам нужно сложить только 5 значений, вы зациклились на 5 * 5 значений.
Вы можете получитьправильные индексы, используя zip()
из двух range () s:
# generating just the indexes you need
idx = list(zip(range(r),range(c-1,-1,-1)))
print(idx) # [(0, 4), (1, 3), (2, 2), (3, 1), (4, 0)]
и суммируйте эти индексы.
Вы можете зацикливать эти кортежи - или использовать встроенные в функцию sum () питоны.
Вы можете использовать подсчет диапазонов вверх / вниз или подсчет диапазонов и индексирование отрицательного списка (эквивалент):
# using a range counting down for columns
print(sum( a[row][col] for row,col in zip(range(r), range(c-1,-1,-1)) ))
# using negative list indexing and a range counting upwards
print(sum( a[row][-col-1] for row,col in zip(range(r), range(c)) ))
Выход:
1093 # twice
Для заполнения a
вы также можете использовать понимание списка:
a = [ [random.randint(1,500) for _ in range(5)] for _ in range(5)] # automatic or
a = [ [int(input("Number: ")) for _ in range(5)] for _ in range(5) # manual input
Доку: