Python 对不同的棋子使用相同的功能

Python 对不同的棋子使用相同的功能,python,Python,最近,我被分配了一个模拟8皇后问题的编程任务,我相信大家都知道,我的任务是为电路板上的不同部分创建函数。例如,将一个女王放在董事会上,这样她就不会看到其他女王 下面您将看到我的第一个函数,queensees,它基本上只是突出显示女王在黑板上的位置,并确定她是否可以看到其他人 def queenSees(pos,size): """ Return a list of all squares"In view" of a queen in position pos on a board of si

最近,我被分配了一个模拟8皇后问题的编程任务,我相信大家都知道,我的任务是为电路板上的不同部分创建函数。例如,将一个女王放在董事会上,这样她就不会看到其他女王

下面您将看到我的第一个函数,
queensees
,它基本上只是突出显示女王在黑板上的位置,并确定她是否可以看到其他人

def queenSees(pos,size):
  """ Return a list of all squares"In view" of a queen in position pos on a board of size"""
  inView=[]
  #Row and column
  for i in range(size):
      #Column
      setAppend(inView,(i,pos[1]))
      #Row
      setAppend(inView,(pos[0],i))
      #Diagonals
      for r in [-1,1]:
          for c in [-1,1]:
              appendIfInBounds(inView, pointShift(pos,r*i,c*i), size)
  #Take out position of queen so she doesn't see herself...
  inView.remove(pos)
下面我还为rook片段编写了一个函数,因为这只是从方程中去掉对角线搜索的问题

def rooksees(pos,size):
  """ Return a list of all squares"In view" of a rook in position pos on a board of size"""
  inView=[]
  #Row and column
  for i in range(size):
      #Column
      setAppend(inView,(i,pos[1]))
      #Row
      setAppend(inView,(pos[0],i))

              appendIfInBounds(inView, pointShift(pos,r*i,c*i), size)
  #Take out position of queen so he doesn't see himself...
  inView.remove(pos)

如何修改此选项以适应骑士国际象棋?

骑士以基数方向移动两个距离中的一个,以正交方向移动这两个距离中的另一个。4个原始方向*2个正交方向每个*2个原始距离=16个可能的位置。看起来你已经知道如何过滤掉理论上的位置,所以你需要做的就是首先生成这16个位置。如果你看不到一种编程方法,你可以这样硬编码:

positions = [[pos[0]+2,pos[1]+1],[pos[0]+2,pos[1]-1] ... ]
但这很容易出现小的打字错误,导致难以跟踪的错误。更好的方法可能是硬编码“调整”:

然后使用循环将它们应用到当前位置:

positions = [[pos[0]+d[0],pos[1]+d[1]] for d in moves]

骑士以基数方向移动两个距离中的一个,以正交方向移动这两个距离中的另一个。4个原始方向*2个正交方向每个*2个原始距离=16个可能的位置。看起来你已经知道如何过滤掉理论上的位置,所以你需要做的就是首先生成这16个位置。如果你看不到一种编程方法,你可以这样硬编码:

positions = [[pos[0]+2,pos[1]+1],[pos[0]+2,pos[1]-1] ... ]
但这很容易出现小的打字错误,导致难以跟踪的错误。更好的方法可能是硬编码“调整”:

然后使用循环将它们应用到当前位置:

positions = [[pos[0]+d[0],pos[1]+d[1]] for d in moves]

你所需要做的就是注释掉这辆车的对角线代码

即使我知道坐标,我也无法实现骑士see:有人能告诉我如何更改queensees函数来显示骑士吗?记得我已经注释掉queensees函数元素,我试图显示一个不起作用的骑士动作

def制作板(尺寸): 董事会=[] 对于范围内的i(尺寸): 董事会。追加([])) 对于范围内的j(尺寸): 单板[-1]。追加(假) 返回板

def显示屏(b): 除法器=(“+-”*len(b))+“+” 对于b中的行: 打印分隔器 打印“|”+“|”。连接({True:“X”,False:}[i]表示行中的i)+“|” 打印分隔器

def setAppend(s,i): “”“将i添加到s,除非我已在s中”“” 如果不是s中的i:s.append(i)

def内侧(p,尺寸): “”“如果点对给定大小的电路板有效,则返回True。否则返回False”“”
如果0所有您需要为rook做的事情,则注释掉对角线代码

即使我知道坐标,我也无法实现骑士see:有人能告诉我如何更改queensees函数来显示骑士吗?记得我已经注释掉queensees函数元素,我试图显示一个不起作用的骑士动作

def制作板(尺寸): 董事会=[] 对于范围内的i(尺寸): 董事会。追加([])) 对于范围内的j(尺寸): 单板[-1]。追加(假) 返回板

def显示屏(b): 除法器=(“+-”*len(b))+“+” 对于b中的行: 打印分隔器 打印“|”+“|”。连接({True:“X”,False:}[i]表示行中的i)+“|” 打印分隔器

def setAppend(s,i): “”“将i添加到s,除非我已在s中”“” 如果不是s中的i:s.append(i)

def内侧(p,尺寸): “”“如果点对给定大小的电路板有效,则返回True。否则返回False”“”
如果这不是C++…看起来更像Python还是什么?另外,大写你的句子会让你丧命吗?
c++
在你的标签上做了什么?你的代码在Python……这不是C++…看起来更像Python还是什么?另外,大写你的句子会让你丧命吗?
c++
在你的标签上做了什么?您的代码是用python编写的。。。