数组中的有效位置


else:
res = (numbers.index(str_pos[1:]), letters.index(str_pos[0]))
return res
def is_in_board(n,pos):
letters = [chr(x + ord('a')) for x in range(n)]
numbers = [str(x) for x in range(1, n + 1)]
numbers.reverse()
pos = ''.join([letters[pos[1]], numbers[pos[0]]])
if extract_pos(n,pos) is not None:
return True
else:
return False

当列表(pos(索引超出范围时,如何返回False?板

在函数extract_pos的第一行,您知道所需的一切:

  • 板的尺寸:n x n
  • 所需索引:str_pos

所以我会在extract_pos函数的第一行做这样的事情:

if int(str_pos[0]) >= n or int(str_pos[1]) >= n or int(str_pos[0]) < 0 or int(str_pos[1]) < 0 :
return 'Out of index'

然后您必须检查is_in_board函数中的返回值:

extract_pos_return_value = extract_pos(n,pos)
if extract_pos_return_value is not None and extract_pos_return_value is not 'Out of index':
return True
else:
return False

完整代码:

def extract_pos(n, str_pos):
if int(str_pos[0]) >= n or int(str_pos[1]) >= n or int(str_pos[0]) < 0 or int(str_pos[1]) < 0 :
return 'Out of index'
letters = [chr(x + ord('a')) for x in range(n)]
numbers = [str(x) for x in range(1,n+1)]
numbers.reverse()

if len(str_pos) < 2 or str_pos[0] not in letters or str_pos[1] not in numbers:
res = None
else:
res = (numbers.index(str_pos[1:]), letters.index(str_pos[0]))
return res
def is_in_board(n,pos):
letters = [chr(x + ord('a')) for x in range(n)]
numbers = [str(x) for x in range(1, n + 1)]
numbers.reverse()
pos = ''.join([letters[pos[1]], numbers[pos[0]]])
extract_pos_return_value = extract_pos(n,pos)
if extract_pos_return_value is not None and extract_pos_return_value is not 'Out of index':
return True
else:
return False

我将尝试向您展示一个更简单的解决方案。

首先,您不需要为字母和数字构造列表,检查参数要容易得多。

那么在is_in_board函数中,您没有正确处理pos参数。

请检查此解决方案:

def extract_pos(n, str_pos):
if 1<=ord(str_pos[0])-ord('a')<=n and 1<=ord(str_pos[1])-ord('0')<=n:
return n-int(str_pos[1]), (ord(str_pos[0])-ord('a'))
else:
return None

def is_in_board(n, pos):
xpos = extract_pos(n,chr(pos[1]+ord('a'))+chr(8-pos[0]+ord('0')))
if xpos != None:
x, y = xpos
if 0<=x<n and 0<=y<n:
return True
return False

最新更新