gpt4 book ai didi

python - 国际象棋:马运动(避免 if-else)

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:12 25 4
gpt4 key购买 nike

我正在尝试根据当前位置获取骑士可以放置的所有可能位置。

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

我已经做了很多 if & else 。有人可以指出更短的方法吗?

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)

最佳答案

创建列表后

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']

关于python - 国际象棋:马运动(避免 if-else),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20291079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com