Typeerror: объект 'str' не поддерживает назначение элементов - Python — исправлено, но программа не завершается
Код, который я написал, должен считывать матрицу, которую я даю в качестве входных данных из txt - файла через командную строку. Я выполняю его следующим образом:python3 doomday_py.py file.txt в визуальном коде. Например , когда я читаю входную матрицу,
+..X..X...
....ОБМАН...-
Я сохраняю его в массив. В этом примере первая строка-a[0], а вторая-a[1]. Элемент a[0][1] - это '.' , в данном примере. Затем с помощью функции flood, которую я написал, я вносил изменения в этот список. Если скажем а[0][1]=='.' я хочу превратить его в ... [0][1]=='+' , согласно элементу, который я удаляю каждый раз из очереди. Я написал функцию наводнения.
когда я запускаю код, я получаю :
Обратная трассировка (самый недавний призыв последнего):
Файл "doomday_py.py", строка 118, in <module>
Файл "doomday_py.py", строка 118, in <module>
synteleia = флуд(элемент, х, г, col_per_line, линий)
Файл "doomday_py.py", строка 62, в потопе
a[x+1][y]=элемент
TypeError: объект 'str' не поддерживает назначение элемента
Если я сделаю такое изменение:
if x-1>=0: if a[x-1][y]=='.': var=a[x-1][y] var=element insert(element, x-1, y, 0) elif (a[x-1][y]!='X' and a[x-1][y]!=element): a[x-1][y]='*' synteleia = 1
Я больше не получаю эту ошибку, но программа не завершается. Не могли бы вы объяснить мне, пожалуйста, почему я получаю такое поведение?
Кроме того, в этой программе, которую я написал, Я вижу, что могу изменять элементы внутри списка без получения ошибки
<pre lang="Python">
Что я уже пробовал:
front = front2 = front3 = -1 rear = rear2 = rear3 = -1 queue_array=[] queue_array2=[] queue_array3=[] element='=' x=y=0 #qa=bb=aa=0 #item=i=j=t=0 def insert(item, i, j, t): global front, rear, rear2, rear3, front2, front3 #insert element into the queue if front == -1: front = 0 front2 = 0 front3 = 0 rear = rear + 1 queue_array.insert(rear, item) rear2 = rear2 + 1 queue_array2.insert(rear2, i) # x coordinate rear3 = rear3 + 1 queue_array3.insert(rear3, j) #y coordinate def delete(): global front, front2, front3 qa=queue_array[front] #the element to be deleted from the queue + or - aa=queue_array2[front2] bb=queue_array3[front3] front = front + 1 # x coordinate of deleted element front2=front2 + 1 # y coordinate of del elem front3=front3 + 1 #print(qa) #print(aa) #print(bb) return(qa, aa, bb) def flood(element, x, y, col_per_line, lines): synteleia = 0 if x-1>=0: if a[x-1][y]=='.': a[x-1][y]=element insert(element, x-1, y, 0) elif (a[x-1][y]!='X' and a[x-1][y]!=element): a[x-1][y]='*' synteleia = 1 if(y-1>=0): if (a[x][y-1]=='.'): a[x][y-1]=element insert(element, x, y-1, 0) elif (a[x][y-1]!='X' and a[x][y-1]!=element): a[x][y-1]='*' synteleia = 1 if(x+1 < lines): if (a[x+1][y]=='.'): a[x+1][y]=element insert(element, x+1, y, 0) elif (a[x+1][y]!='X' and a[x+1][y]!=element): a[x+1][y]='*' synteleia = 1 if(y+1 < col_per_line): if (a[x][y+1]=='.'): a[x][y+1]=element insert(element, x, y+1, 0) elif (a[x][y+1]!='X' and a[x][y+1]!=element): a[x][y+1]='*' synteleia = 1 return synteleia import sys with open(sys.argv[1], 'r') as f: array = f.readlines() #reads the file's lines array = [x.strip() for x in array] #ignores the newline char #print (content) a=array lines=len(a) for j in range(len(a)): for k in range(len(a[j])): col_per_line=len(a[j]) for j in range(len(a)): #the list consists of 2 sublists, for these 2 sublists for k in range(len(a[j])): #for every elemenent in the sublist, loops in the "2D" list if(a[j][k]=='+' or a[j][k]=='-'): # add + or - ,only them, into the queue mol=a[j][k] #print(mol) #print(j, k) t=0 insert(mol,j, k,t) # print() synteleia, timef = 0 , 0 while (synteleia==0 and front<rear): size = rear - front + 1 while(size > 0): t=0 qa,aa,bb = delete() element=qa print(element) x=aa y=bb print(x,y) synteleia = flood(element, x, y, col_per_line, lines) size=size-1 timef=timef+1 #print(queue_array)
Richard MacCutchan
Какая строка 62, какая строка 118?