我是Python的新手,所以我只是想构建我已用C ++和Java构建的所有程序,只是为了熟悉语法。我在N queen问题中遇到了错误,它在C ++和Java中完美执行。
这是代码
def place(m , i):
for j in range(0 , m - 1 ):
if(x[j] == i or abs(x[j] - i) == abs(j-m)):
return False
return True
def nqueen(k , n ):
for c in range(0, n):
if( place(k , c) ):
x[k] = c
if ( k == n):
print(x)
else:
nqueen(k + 1 , n)
x = []
num = int(input("Enter the no. of rows and columns: "))
nqueen(0 , num)
num = 4的输出应为:
遇到的错误是:
回溯(最近一次呼叫最后一次):
文件“D:\ P \ NQueen.py”,第18行,in nqueen(0,num)
文件“D:\ P \ NQueen.py”,第10行,在nqueen中 x [k] = c IndexError:列表赋值索引超出范围
请帮帮我。
答案 0 :(得分:0)
range(0,n)产生一个从零开始的列表,该列表上升到n-1。你的检查k == n需要是k ==(n-1)。否则你正在调用x [n],它比你想要的更大。另外,范围函数默认从0开始。您可以使用范围(m-1)和范围(n)获得与当前相同的结果。
答案 1 :(得分:0)
append
/ extend
动态增长它,但要访问特定元素,您必须实际创建空间:
In [1]: x = []
In [2]: x[0]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-2-1ae75c28907a> in <module>()
----> 1 x[0]
IndexError: list index out of range
In [3]: x[0] = 1
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-16-1a754504edbf> in <module>()
----> 1 x[0] = 1
IndexError: list assignment index out of range
In [4]: x = [0] * 4
In [5]: x[0]
Out[5]: 0 (0x0)
In [6]: x[0] = 1
(请注意,您也应该在C中执行此操作,但有时C会让您不安全地离开,不确定为什么Java会让您这样做)。
其他选项是使用append迭代:
x = []
for entry in some_list:
x.append(processed_value(entry))
或者使用字典,它有其他缺点,但也可以用作稀疏数组。如果您想要默认读取功能,可以使用defaultdict:
In [8]: d1 = {}
In [9]: d1[0] = 1
In [10]: d2 = {}
In [11]: d2[0]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-11-8d722d66aade> in <module>()
----> 1 d2[0]
KeyError: 0
In [12]: from collections import defaultdict
In [13]: d2 = defaultdict(int)
In [14]: d2[0]
Out[14]: 0 (0x0)
答案 2 :(得分:0)
要在python中初始化固定长度列表,您必须使用类似
的内容 x = [None] * num
或x = [0] * num
此外,range(0,n)
从0 to n-1
开始迭代,因此在place
函数中,您应该使用for j in range(0 , m )
除此之外,逻辑上你应该在打印结果列表之前检查if ( k == n-1)
而不是if ( k == n)