Форум сайта python.su
Есть школьная задачка. вводится число, необходимо создать квадратную матрицу, в диагоналях - единицы, все что сверху диагонали - нули, все что ниже - двойки.
Казалось бы - все элементарно.
я создаю массив нулей, потом обхожу его, сравниваю индексы, перезаписываю значения
Но внезапно возникает непонятка которая зависит от способа генерации начального массива
если массив создается так:
a = [[0 for f in range(n)] for k in range(n)]
a = [[0]*n]*n
n = int(input('введите n:')) # a = [[0 for f in range(n)] for k in range(n)] # если создавать массив так - то все нормально a = [[0]*n]*n for k in range(n): print(a[k]) for i in range(n): for j in range(n): if i==j: a[i][j] = 1 print('i=',i,' j=',j, 'a=',a[i][j]) elif j>i: a[i][j] = 0 print('i=', i, ' j=', j, 'a=', a[i][j]) else: a[i][j] = 2 print('i=', i, ' j=', j, 'a=', a[i][j]) print('***') print('a[',i,']=',a[i]) # до этого момента все в порядке # а дальше начинается какая-то херня print('a[1][1]=',a[1][1]) # оппа!!!!!!!!! вывродит 2 хотя должно быть 1 print('a:') #print(a) for m in range(n): print('m:',m) print(a[m])
Отредактировано vzhicharra (Март 29, 2017 21:32:32)
Офлайн
ну потому что второй алгоритм делает не то что первый
>>> n=3 >>> a = [[0 for f in range(n)] for k in range(n)] >>> a[0] [0, 0, 0] >>> a[1] [0, 0, 0] >>> a[0] is a[1] False >>> a=[[0]*n]*n >>> a[0] [0, 0, 0] >>> a[1] [0, 0, 0] >>> a[0] is a[1] True >>>
[code python][/code]
Отредактировано PEHDOM (Март 29, 2017 22:06:49)
Офлайн
ага, понял, спасибо
Офлайн