почему ris[q][w] = "*" меняет весь столбик, а не одно значение?
n = int(input())
a = int(input())
b = int(input())
ris = [["."] * n] * n
dim = []
for j in range(a,b + 1):
dim.append(j)
center = [int((((n - 1)/2) + 1)),int((((n - 1)/2) + 1))]
for q in range(n):
dis = 0
for w in range(n):
dis = (abs((w + 1) - center[0])) + (abs((q + 1) - center[1]))
if dis in dim:
ris[q][w] = "*"
for e in range(n):
print(ris[e])
Данный код почему-то ris[q][w] = "*" меняет весь столбик, а не одно значение массива. Вся суть задачи, что он должен закрашивать точки, которые лежат на расстоянии в {dim}, и благодаря этому получается ромб, в отлаживании кода он просто закрашивает весь столб.
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
потому что ссылки списков и все такое
когда вы делаете "список * число", то получаете список все элементы которого ссылаются на первоначальный список
сделайте так:
ris = [["." for i in range(n)] for j in range(n)]
P.S.
а вообще весь ваш код можно свернуть в:
print(*[[".*"[a <= abs(w - (n - 1) // 2) + abs(q - (n - 1) // 2) <= b] for w in range(n)] for q in range(n)], sep='\n')
Автор решения: SergFSM
→ Ссылка
вам надо заменить
ris = [["."] * n] * n
на:
ris = [["."] * n for _ in range(n)]