我正在尝试根据当前位置获取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)
答案 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']