Member 13832334 Ответов: 0

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?

0 Ответов