Deepcopy в Python 3.7 3.6 не вывоз присвоение копий класса к списку/кортежу

Как на нем тогда писать перебор состояний игрового поля с множественным возвратом к предыдущему состоянию.

Уже более 10 часов не могу сделать задание по решению компьютером головоломки слоты путем перебора

По алгоритму, когда я попадаю на пустую ячейку , я добавляю в массив все возможные варианты поля с различными командами в этой ячейке , затем решаю последнюю, если решения нет удаляю ячейку и беру предыдущую

Короче когда я создаю новое состояние в массиве с deepcopy строка 63 а потом меняю его, меняются предыдущие и прога не пашет dbg3 b 0 u 0 mnbd

[['bu', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 b 0 l 1 mnbd
[['bl', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['bl', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 b 0 r 2 mnbd
[['br', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['br', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['br', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 b 0 1 3 mnbd
[['b1', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b1', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b1', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b1', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 b 0 2 4 mnbd
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['b2', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 o 1 u 0 mnbd
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ou', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 o 1 l 1 mnbd
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
[['ol', 'a ', 'a ', 'a ', 'a '], ['a ', 'a ']]
dbg3 o 1 r 2 mnbd

А вот и сам код:

from copy import *
ihatepython=[]
class EatCrapNDie:
    fld={(0,2): 'b',(1,2): 'b',(2,2): 'o',(3,2): 'b',(4,2): 'b',(2,0): 'b',(2,1): 'b',(2,3): 'b',(2,4): 'b',}
    goal={(0,2):True,(2,0):True,(4,2):True,(2,4):True,}
    fa=[['a ' for a in range(0,5)],['a ' for a in range(0,2)]]
    crsr=(0,0)
    stls=(2,3,0)
    bckp=[stls,(0,0,-1)]
clr=('b','o','a')
cmdlst=('u','l','r','1','2')
def stlsmv(qq):
    if qq.stls[2]==0:
        qq.stls=(qq.stls[0],qq.stls[1]-1,qq.stls[2])
    elif qq.stls[2]==1:
        qq.stls=(qq.stls[0]+1,qq.stls[1],qq.stls[2])
    elif qq.stls[2]==2:
        qq.stls=(qq.stls[0],qq.stls[1]+1,qq.stls[2])
    elif qq.stls[2]==3:
        qq.stls=(qq.stls[0]-1,qq.stls[1],qq.stls[2])    
def stlstrn(qq,a):
    i=qq[2]+a
    if i>3:
        i=0
    elif i<0:
        i=3
    qq.stls=(qq.stls[0],qq.stls[1],i)
def xsctcmd(q):
    global crrnt,ra,ihatepython,ndscl
    print('dbg2',q)
    if q==' ':
        for i in range(0,len(clr)):
            for u in range(0,len(cmdlst)):
                crrnt=crrnt+1
                ihatepython=ihatepython+[deepcopy(ra)]
                ihatepython[crrnt].fa[ra.crsr[1]][ra.crsr[0]]=clr[i]+cmdlst[u]
                print('dbg3',clr[i],i,cmdlst[u],u,'mnbd')
                for qwbck in ihatepython:
                    print(qwbck.fa)
                
        ra=deepcopy(ihatepython[crrnt])
        ihatepython.pop(crrnt)
        crrnt=crrnt-1
    elif q=='u':
        ra.crsr=(ra.crsr[0]+1,ra.crsr[1])
        stlsmv(ra.stls)
    elif q=='l':
        ra.crsr=(ra.crsr[0]+1,ra.crsr[1])
        stlstrn(ra.stls,-1)
    elif q=='r':
        ra.crsr=(ra.crsr[0]+1,ra.crsr[1])
        stlstrn(ra.stls,1)
    elif q=='1' or q=='2':
        i=int(q)-1
        if ra.bckp[i]==ra.stls:
            if crrnt>-1:
                print('sclout',ra.fa)
                ra=deepcopy(ihatepython[crrnt])
                ihatepython.pop(crrnt)
                crrnt=crrnt-1
            else:
                ndscl=True
        else:
            ra.crsr=(0,i)
            ra.bckp[i]=ra.stls
                
crrnt=-1
ndscl=False
ra=EatCrapNDie
while ndscl==False:
    print('dbg',ra.fa,ra.crsr,ra.stls)
    crd=(ra.stls[0],ra.stls[1])
    if crd in ra.fld:
        if ra.fld[crd]==ra.fa[ra.crsr[1]][ra.crsr[0]][0] or ra.fa[ra.crsr[1]][ra.crsr[0]][0]=='a':
            if crd in ra.goal:
                ra.goal[crd]=False
                frc=True
                for u in ra.goal:
                    if ra.goal[u]==True:
                        frc=False
                if frc==True:
                    print('itwrks',ra.fa)
                    ndscl=True
            xsctcmd(ra.fa[ra.crsr[1]][ra.crsr[0]][1])
    else:
        print('stlsout',ra.fa)
        ra=deepcopy(ihatePython[crrnt])
        deepcopy.pop(crrnt)
        crrnt=crrnt-1

Я отдаю себе отчет в том что это лютый говнокод,но я писал по быстрому, чтобы понять, что не так в основном проекте.


Ответы (0 шт):