Python 创建一个子例程,告诉玩家他们输入的坐标何时已被占用
我创建了一个包含所有可用坐标的列表,因此我的想法是,一旦输入坐标,它将从列表中删除,并放入另一个名为take_Coord的列表中 但我只知道我的代码可以比现在更有效我只是不知道如何,如果需要更多的信息,请告诉我 代码如下:Python 创建一个子例程,告诉玩家他们输入的坐标何时已被占用,python,subroutine,Python,Subroutine,我创建了一个包含所有可用坐标的列表,因此我的想法是,一旦输入坐标,它将从列表中删除,并放入另一个名为take_Coord的列表中 但我只知道我的代码可以比现在更有效我只是不知道如何,如果需要更多的信息,请告诉我 代码如下: Board = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] Coordinate = 0 YCoordinate = 0 ValidMove = Fa
Board = [[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
Coordinate = 0
YCoordinate = 0
ValidMove = False
CurrentSymbol = ''
StartSymbol = ''
PlayerOneSymbol = ''
PlayerTwoSymbol = ''
Answer = ''
Aval_coordinate = ['11','12','13','21','22','23','33','32''31']
Taken_Coord = 0
def CheckValidMove(XCoordinate, YCoordinate, Board, Taken_Coord, Aval_coordinate):
ValidMove = True
Taken_Coord = (''+str(XCoordinate) + str(YCoordinate) + '')
count = Aval_coordinate.count(Taken_Coord)
if (XCoordinate < 1) or (XCoordinate > 3):
ValidMove = False
if(YCoordinate < 1) or (YCoordinate > 3):
ValidMove = False
elif count == 0:
ValidMove = False
elif Taken_Coord == '11':
Aval_coordinate.pop('11')
elif Taken_Coord == '12':
Aval_coordinate.pop('12')
elif Taken_Coord == '13':
Aval_coordinate.pop('13')
elif Taken_Coord == '21':
Aval_coordinate.pop('21')
elif Taken_Coord == '22':
Aval_coordinate.pop('22')
elif Taken_Coord == '23':
Aval_coordinate.pop('23')
elif Taken_Coord == '33':
Aval_coordinate.pop('33')
elif Taken_Coord == '31':
Aval_coordinate.pop('31')
elif Taken_Coord == '32':
Aval_coordinate.pop('32')
return ValidMove
Board=[[0,0,0,0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
坐标=0
YCoordinate=0
ValidMove=False
CurrentSymbol=“”
开始符号=“”
播放符号=“”
PlayerTwoSymbol=“”
答案=“”
Aval_坐标=['11','12','13','21','22','23','33','32''31']
采取的协调=0
def CheckValidMove(X坐标、Y坐标、电路板、采取坐标、Aval坐标):
ValidMove=True
采取协调=(''+str(XCoordinate)+str(yccoordinate)+'')
计数=Aval_坐标。计数(取坐标)
如果(XCoordinate<1)或(XCoordinate>3):
ValidMove=False
如果(YCoordinate<1)或(YCoordinate>3):
ValidMove=False
elif计数==0:
ValidMove=False
elif take_Coord==“11”:
Aval_坐标.pop('11')
elif take_Coord==“12”:
Aval_坐标.pop('12')
elif take_Coord==“13”:
Aval_坐标.pop('13')
elif take_Coord==“21”:
Aval_坐标.pop('21')
elif take_Coord==“22”:
Aval_坐标.pop('22')
elif take_Coord==“23”:
Aval_坐标.pop('23')
elif take_Coord==“33”:
Aval_坐标.pop('33')
elif take_Coord==“31”:
Aval_坐标.pop('31')
elif take_Coord==“32”:
Aval_坐标.pop('32')
返回有效移动
是的,差不多就是这样。也不要对变量或函数使用大写名称,它们用于类。另外,list.pop()
方法需要要删除的索引,而不是字符串。您可能想要使用的是remove()
真是太好了,老实说,我知道有办法缩短它!谢谢你如果你对它满意的话,把它标记为正确的答案:)我还加了一小部分来去掉不太好的“计数”
def check_valid_move(x_coordinate, y_coordinate, board, taken_coord, aval_coordinate):
taken_coord = f"{x_coordinate}{y_coordinate}"
if x_coordinate and y_coordinate not in range(1,4):
return False
if taken_coord not in aval_coordinate:
return False
aval_coordinate.remove(taken_coord)
return True