代码中错误的原因是什么?

时间:2019-09-10 08:52:26

标签: python python-3.x n-queens

我尝试了此python代码来解决n皇后问题,但没有得到任何输出。 有人可以告诉我我哪里出问题了吗?

def initialize(n):
    for key in ['queen','row','col','nwtose','swtone']:
       board[key]={}
    for i in range(n):
       board['queen'][i]=-1
       board['row'][i]=0
       board['col'][i]=0
    for i in range(-(n-1),n):
       board['nwtose'][i]=0
    for i in range(2*n-1):
       board['swtone'][i]=0
def printboard():
   for row in sorted(board['queen'].keys()):
      print((row,board['queen'][row]))
def free(i,j):
   return(board['row'][i]==0 and board['col'][j]==0 and board['nwtose'][j-i]==0 and board['swtone'][j+i]==0)
def addqueen(i,j):
   board['queen'][i]=j
   board['row'][i]=1
   board['col'][j]=1
   board['nwtose'][j-i]=1
   board['swtone'][j+i]=1
def undoqueen(i,j):
   board['queen'][i]=-1
   board['row'][i]=0
   board['col'][j]=0
   board['nwtose'][j-i]=0
   board['swtone'][j+i]=0
def placequeen(i):
   n=len(board['queen'].keys())
   for j in range(n):
      if free(i,j):
         addqueen(i,j)
         if i==n-1:
            return(True)
         else:
            extendsoln=placequeen(i+1)
         if extendsoln:
            return(True)
         else:
            undoqueen(i,j)
     else:
        return(False)
board={}
n=int(input("How many queens?"))
initialize(n)
if placequeen(0):
       printboard()

printboard()函数中的打印语句不起作用。有人可以帮我推理原因吗?

2 个答案:

答案 0 :(得分:0)

复制并运行您的代码,并收到以下错误:

  

IndentationError:unindent与任何外部缩进级别都不匹配

这是关于您的场所函数中的最后一个“其他陈述”

将此内容复制到其他内容,然后重试:

def placequeen(i):
   n=len(board['queen'].keys())
   for j in range(n):
      if free(i,j):
         addqueen(i,j)
         if i==n-1:
            return(True)
         else:
            extendsoln=placequeen(i+1)
         if extendsoln:
            return(True)
         else:
            undoqueen(i,j)
      else: # << this needed a space
        return(False)

您正在使用什么编辑器/ IDE?我建议使用pycharm,在我不得不运行代码之前,它给了我这个错误。

让我知道这是否解决了您的问题!

答案 1 :(得分:0)

不打印任何内容的原因是因为您的if语句执行为False,而您希望它为True。

使用此代码检查自己(添加了else块以在语句为False时捕获输出):

board={}
n=int(input("How many queens?"))
initialize(n)
if placequeen(0):
    print("Output == True")
    printboard()
else: #<< added for debug purposes
    print("Output == False")
    printboard()

原因和解决方案

将条件执行为False的原因可能是因为在placequeen()函数中,您在for循环内使用了“ Return”语句。

您需要调试此function()并检查为什么它(几乎)始终返回注释(= False)。

问题的根本原因在于placequeen()函数。希望这将使您走上正确的道路!