迷宫遍历数字求和程序逻辑错误排查求助
迷宫处理程序逻辑错误排查请求
我正在开发一个迷宫处理程序,需求为读取.txt格式迷宫文件,沿路径收集所有十进制数字求和,遇到'#'时终止程序。已多次调试代码但仍未定位逻辑错误,推测问题出在行列更新或矩阵尺寸处理上。以下是测试用的两个迷宫文件及我的Python解决方案(变量为葡萄牙语),恳请帮忙排查错误:
测试文件1
6 59 # 5 | \-48-3-----6---------------9-5---------2--3--------7-7-\ | ------------5-------------------0--50---8-------9----4---6/
测试文件2
36 80 /-48-3-----6---------------9-5---------2--3--------7-7-\ | | ---|--------5-------------------0--5---8-------9----4---6-|----6---4--68----\ | /0--\ | | 8 0 /-|--------------------4-7-----9------2-6-\ | \---3---6--4|-|-|----09\ /789--0--#---4-00----71||8------------0--/ | | | | | || | 5 | | | |4 /6--11-9--2-----2-------1-7--1----\ 85 5 | 3 | | | | 5| | | | | 4 | # || | | 4 | | | 1| | | | | 2 | || | 3 0 | | 9 || | | | | | 8 /2----7-------------8|2--2----0-----3\ | | | 1 | 1 | || | 3 | | | | | | |8 0 \-7--4------91/ | \--|----3-------6----73/| 7 \-----3------634-----90---965-8------------6/ | | 7 | | | \---5----8--/ | | | \-------------4---9-2-5--1-37-15---2--2--6----9---1-25----/
我的解决方案代码
nome = 'x1.txt' doc = [] with open(nome, 'r') as file: for l in file: linha = list(l.strip()) doc.append(linha) doc = [[element for element in row if element != '\n'] for row in doc] linhas = '' colunas = '' achou = False for carac in doc[0]: if carac == ' ': achou= True elif not achou: linhas += carac else: colunas += carac linhas = int(linhas) colunas = int(colunas) # doc.remove(doc[0]) print(linhas, colunas) print(doc) somaTotal = 0 num = 0 def esq_dir(linhaA, colunaA): global num global somaTotal num = '0' c = colunaA for i in range(c, colunas): carac = doc[linhaA][i] print(carac) print(linhaA, colunaA) if carac == '#': somaTotal += int(num) num = '0' break if carac == '-' or carac == '|': colunaA += 1 somaTotal += int(num) num = '0' if carac == '/': # colunaA += 1 somaTotal += int(num) linhaA -= 1 subindo(linhaA, colunaA) break if carac == '\\': # colunaA += 1 somaTotal += int(num) linhaA += 1 descendo(linhaA, colunaA) break elif carac.isdigit(): num += carac colunaA += 1 def dir_esq(linhaA, colunaA): global somaTotal global num num = '0' c = colunaA for i in range(c -1,-1, -1): carac = doc[linhaA][i] print(carac) print(linhaA, colunaA) if carac == '#': somaTotal += int(num) num = '0' break if carac == '-' or carac == '|': colunaA -= 1 somaTotal += int(num) num = '0' if carac == '\\': linhaA += 1 somaTotal += int(num) subindo(linhaA, colunaA) break if carac == '/': linhaA -= 1 somaTotal += int(num) descendo(linhaA, colunaA) break elif carac.isdigit(): num += carac colunaA -= 1 def descendo(linhaA, colunaA): global somaTotal num = '0' l = linhaA for i in range(l, linhas): carac = doc[i][colunaA] print(carac) if carac == '#': somaTotal += int(num) num = '0' break if carac == '-' or carac == '|': linhaA += 1 somaTotal += int(num) num = '0' if carac == '/': colunaA -= 1 dir_esq(linhaA, colunaA) break if carac == '\\': colunaA += 1 esq_dir(linhaA, colunaA) break elif carac.isdigit(): num += carac linhaA += 1 def subindo(linhaA, colunaA): global somaTotal num = '0' # troquei de '' para 0 para evitar syntax errors l = linhaA for i in range(l - 1,-1, -1): # alterei para -1 o 'stop' pois não estava lendo a condição de parada (#), portanto não somava o 4 carac = doc[i][colunaA] print(carac) print(linhaA, colunaA) if carac == '#': somaTotal += int(num) num = '0' break if carac == '-' or carac == '|': linhaA -=1 somaTotal += int(num) num = '0' if carac == '/': colunaA += 1 somaTotal += int(num) esq_dir(linhaA, colunaA) break if carac == '\\': linhaA -= 1 somaTotal += int(num) dir_esq(linhaA, colunaA) break elif carac.isdigit(): num += carac linhaA -= 1 linhaAtual = 0 colunaAtual = 0 for i, linha in enumerate(doc): if linha and linha[0] == '-': linhaAtual = i break # print(doc) # print(linhaAtual) esq_dir(linhaAtual, colunaAtual) print(somaTotal)
内容的提问来源于stack exchange,提问作者Heloysa Pelizon
相关产品推荐
相关产品推荐

