国际象棋:骑士运动(避免if-else)

时间:2013-11-29 17:47:07

标签: python chess

我正在尝试根据当前位置获取Knight所有可能的位置。

以下代码在python中。有一个简单的用户界面,用户输入当前位置,然后显示可能的位置。

我做了很多if&其他。有人可以缩短显示方式吗?

def getPostions():
    ch = p.get()[0]
    n = int(p.get()[1])
    posList = []

    posList = [ chr(ord(ch)-1)+str(int(n)-2), chr(ord(ch)-1)+str(int(n)+2),
                chr(ord(ch)+1)+str(int(n)-2), chr(ord(ch)+1)+str(int(n)+2),
                chr(ord(ch)-2)+str(int(n)-1), chr(ord(ch)-2)+str(int(n)+1),
                chr(ord(ch)+2)+str(int(n)-1), chr(ord(ch)+2)+str(int(n)+1)]

    if (ch == "a"):

        # del 0,1,4,5
        posList = [posList[2], posList[3], posList[6], posList[7]]

        if (n == 8):

            # del 3,7
            posList = [posList[0],posList[2]]

        elif (n == 7):

            # del 3
            posList = [posList[0],posList[2],posList[3]]

        elif (n == 1):

            # del 2,6
            posList = [posList[1],posList[3]]

        elif (n == 2):

            # del 2
            posList = [posList[1],posList[2],posList[3]]

    elif (ch == "b"):

        # del 4,5
        posList = [posList[0],posList[1],posList[2],posList[3],posList[6],posList[7]]

        if (n == 8):

            # del 1,3,7
            posList = [posList[0],posList[2],posList[4]]

        elif (n == 7):

            # del 1,3
            posList = [posList[0],posList[2],posList[4],posList[5]]

        elif (n == 1):

            # del 0,2,6
            posList = [posList[1],posList[3],posList[5]]

        elif (n == 2):

            # del 0,2
            posList = [posList[1],posList[3],posList[4],posList[5]]

    elif (ch == "h"):

        # del 2,3,6,7
        posList = [posList[0],posList[1],posList[4],posList[5]]

        if (n == 8):

            # del 1,5
            posList = [posList[0],posList[2]]

        elif (n == 7):

            # del 1
            posList = [posList[0],posList[2],posList[3]]

        elif (n == 1):

            # del 0,4
            posList = [posList[1],posList[3]]

        elif (n == 2):

            # del 0
            posList = [posList[1],posList[2],posList[3]]

    elif (ch == "g"):

        # del 6,7
        posList = [posList[0],posList[1],posList[2],posList[3],posList[4],posList[5]]

        if (n == 8):

            # del 1,3,5
            posList = [posList[0],posList[2],posList[4]]

        elif (n == 7):

            # del 1,3
            posList = [posList[0],posList[2],posList[4],posList[5]]

        elif (n == 1):

            # del 0,2,4
            posList = [posList[1],posList[3],posList[5]]

        elif (n == 2):

            # del 0,2
            posList = [posList[1],posList[3],posList[4],posList[5]]


    result['text'] = "Possible Locations for Knight are: " + ",".join(posList)
    result.pack(pady=30)

1 个答案:

答案 0 :(得分:1)

创建列表后

posList = [ chr(ord(ch)-1)+str(int(n)-2), chr(ord(ch)-1)+str(int(n)+2),
                chr(ord(ch)+1)+str(int(n)-2), chr(ord(ch)+1)+str(int(n)+2),
                chr(ord(ch)-2)+str(int(n)-1), chr(ord(ch)-2)+str(int(n)+1),
                chr(ord(ch)+2)+str(int(n)-1), chr(ord(ch)+2)+str(int(n)+1)]

只是过滤它:

posList = [pos for pos in posList if pos[0] in 'abcdefgh' and pos[1] in '12345678']