【问题标题】:Valid position in array数组中的有效位置
【发布时间】:2021-12-24 00:03:30
【问题描述】:
         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 ?board

【问题讨论】:

    标签: python arrays list indexoutofrangeexception


    【解决方案1】:

    在函数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
    
    

    【讨论】:

      【解决方案2】:

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

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

      那么在你的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
      

      【讨论】:

      • 感谢您的回答,但它不起作用,因为例如 extract_pos(7,b2) 的输出必须返回 (5,1)
      • 好的,我已经更改了示例代码。
      • 再次感谢,但是is_in_board有问题。在 extract_pos if 1
      • 函数调用到底是什么?它对我有用,例如使用is_in_board(7,'b2')
      • 不幸的是,pos 必须是 Tuple[int, int] 对于 extract_pos 位置 a7 应该匹配索引对 (0, 0) 但它调用 None
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2010-12-01
      • 1970-01-01
      • 2010-10-19
      • 2015-04-29
      • 1970-01-01
      相关资源
      最近更新 更多