您的代码有两个问题:
1) 正如用户2357112所说,您需要在两个减法前后加上括号,这样减法就在除法之前完成了。
str(root[1]-origin[i][0])
应该是
str(root[1]-origin[i][1])
def N_queens_validator(n):
if len(set(n))!=len(n):
return print(f'{n} =>False same row')
else:
origin=[(ind,val) for ind,val in enumerate(n)]
a=origin[:]
for m in range (len(n)):
root=a.pop(0)
for i in range(m+1,len(n)):
result=(root[0]-origin[i][0])/(root[1]-origin[i][1])
print(str(root[0]-origin[i][0])+'/'+str(root[1]-origin[i][1])+' the result is: '+str(result))
if abs(result)==1:
return print(f'{n} =>False same diagonal')
return print(f'{n} =>True')
N_queens_validator([8, 6, 4, 2, 7, 1, 3, 5])
结果:
-1/2 the result is: -0.5
-2/4 the result is: -0.5
-3/6 the result is: -0.5
-4/1 the result is: -4.0
-5/7 the result is: -0.7142857142857143
-6/5 the result is: -1.2
-7/3 the result is: -2.3333333333333335
-1/2 the result is: -0.5
-2/4 the result is: -0.5
-3/-1 the result is: 3.0
-4/5 the result is: -0.8
-5/3 the result is: -1.6666666666666667
-6/1 the result is: -6.0
-1/2 the result is: -0.5
-2/-3 the result is: 0.6666666666666666
-3/3 the result is: -1.0
[8, 6, 4, 2, 7, 1, 3, 5] =>False same diagonal