我正在参加一个介绍comp sci课程,目前的项目是递归的.该程序读取一个文本文件,该文件有n行和n列的-和I.该程序创建一个2D列表,该列表是用于该程序的网格.然后提示用户在网格上的一个点(row,col),如果用户的点是a,则-该点变为a @然后我必须@通过检查上面的空格,左边递归地填充第一个可用空间,右边,下方并填充第一个可用空间.我的递归函数是:
def fillWithAt(grid, the_row, the_col):
if grid[the_row][the_col] == '-':
grid[the_row][the_col] = '@'
printFile(grid)
if the_row != 0:
if grid[the_row - 1][the_col] == '-':
fillWithAt(grid, the_row - 1, the_col)
if the_col != 0:
if grid[the_row][the_col - 1] == '-':
fillWithAt(grid, the_row, the_col - 1)
if the_col != (len(grid[the_row]) - 1):
if grid[the_row][the_col + 1] == '-':
fillWithAt(grid, the_row, the_col + 1)
if the_row != (len(grid) - 1):
if grid[the_row + 1][the_col] == '-':
fillWithAt(grid, the_row + 1, the_col)
else:
printFile(grid)
Run Code Online (Sandbox Code Playgroud)
grid是2D列表,the_row是用户的行,the_col是用户的列.该程序几乎完美地工作,但它到达最后两列时会崩溃.我无法弄清楚如何将输出复制到此,因为每次我尝试它都会被删除空白并且没有任何意义,所以我将尝试解释.
该程序工作正常,直到我击中最后两行.程序在右边找到一个空的空间,由于某种原因占据了右边的下两个空格而不是一个空格.之后程序错误地读取当前点周围的空格.在一天结束时,程序仍然完成任务,但我很好奇为什么发生错误.
我不是在寻找任何答案,而是建议.如果有人能够看到任何可能发生这种情况的原因,我会感激任何信息.我也喜欢反馈/建设性的批评.
编辑:这是递归过程的几个步骤.当前空间首先检查它在邻居之上的' - '.如果找到破折号,那么该空间被占用,如果不是,则检查左邻居,然后是右边,最后是下面.
- - - - - I I - - - - - - - -
- - - - I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ - - - - I I - - - - - - - -
- - - - I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ - - - I I - - - - - - - -
- - - - I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ @ - - I I - - - - - - - -
- - - - I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ @ @ - I I - - - - - - - -
- - - - I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ @ @ @ I I - - - - - - - -
- - - - I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ @ @ @ I I - - - - - - - -
- - - @ I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ @ @ @ I I - - - - - - - -
- - @ @ I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ @ @ @ I I - - - - - - - -
- @ @ @ I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ @ @ @ I I - - - - - - - -
@ @ @ @ I - - I I - - - - - -
- - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
@ @ @ @ @ I I - - - - - - - -
@ @ @ @ I - - I I - - - - - -
@ - - - I - - - - I I I I - -
- - - I - - - - - - - - I I I
- - I - - - - - - - - - - - -
- - - I - - - - - - - - I I I
- - - I - - I I I - - - I - -
- - - I - - I - - I - I - - -
- - - I I I I - - - I - - - -
- - - - - - - - - - - - - - -
Run Code Online (Sandbox Code Playgroud)
该程序按预期工作,直到这一点:
@ @ @ @ @ I I - - - - - - - -
@ @ @ @ I - - I I - - - - - -
@ @ @ @ I - - - - I I I I - -
@ @ @ I - - - - - - - - I I I
@ @ I - - - - - - - - - - - -
@ @ @ I - - - - - - - - I I I
@ @ @ I - - I I I - - - I - -
@ @ @ I - - I @ @ I - I @ - -
@ @ @ I I I I @ @ @ I @ @ - -
@ @ @ @ @ @ @ @ @ @ @ @ - - -
@ @ @ @ @ I I - - - - - - - -
@ @ @ @ I - - I I - - - - - -
@ @ @ @ I - - - - I I I I - -
@ @ @ I - - - - - - - - I I I
@ @ I - - - - - - - - - - - -
@ @ @ I - - - - - - - - I I I
@ @ @ I - - I I I - - - I - -
@ @ @ I - - I @ @ I - I @ @ @
@ @ @ I I I I @ @ @ I @ @ - -
@ @ @ @ @ @ @ @ @ @ @ @ - - -
@ @ @ @ @ I I - - - - - - - -
@ @ @ @ I - - I I - - - - - -
@ @ @ @ I - - - - I I I I - -
@ @ @ I - - - - - - - - I I I
@ @ I - - - - - - - - - - - -
@ @ @ I - - - - - - - - I I I
@ @ @ I - - I I I - - - I @ @
@ @ @ I - - I @ @ I - I @ @ @
@ @ @ I I I I @ @ @ I @ @ - -
@ @ @ @ @ @ @ @ @ @ @ @ - - -
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它占据了右边的两个空格而不是一个,然后在下一个移动中它占据了两个先前占用的空间之上的两个空间.
我生成网格的代码是:
def get2DList(fo):
full_list = []
for line in fo:
full_list.append(list(line.strip()))
fo.close()
return full_list
Run Code Online (Sandbox Code Playgroud)
佛是一个文件
编辑:我已经解决了我的问题,感谢@Blckknght让我知道我的printFile()函数是原因.它现在工作得很好.谢谢所有帮助过的人!
当我第一次提出这些函数时,我犯了一个粗心的错误。我的 printFile() 是这样的
def printFile(current_list):
for i in current_list:
for j in i[:-1]:
print(j, end = ' ')
print(j)
print()
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是,当我第一次尝试时,我只使用了for j in i: print(j, end = ' ')问题是它会在每个新行前面打印一个不需要的空格,这是我首先想到的事情。
我现在发现j在最后一列的 for 循环之外打印是一个错误,因为j它仍然等于 for 循环的前一个迭代,导致最后 2 列的行为相同(我是新手,所以请不要取笑我)。我的新功能是这样的:
def printFile(current_list):
for i in current_list:
print(' '.join(i))
print()
Run Code Online (Sandbox Code Playgroud)
现在一切都按预期进行。再次感谢所有提供帮助的人。
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |