【问题标题】:Python validation of list inputs is skipping invalid index? [duplicate]列表输入的 Python 验证正在跳过无效索引? [复制]
【发布时间】:2020-10-02 22:40:42
【问题描述】:

我正在尝试构建一个代码来创建一个包含 9 个列表的列表,每个列表还包含 9 个元素。我创建了一个转换器来验证每个条目的大小,然后将它们拆分为其单独的各个元素。它正确地注意到不完整的长度,并在输出之前需要正确数量的有效输入,但由于某种原因,第一次读取无效的每个索引都不会返回新的有效输入。下面是代码。

是我忽略了一些简单的语法还是我的代码不够用?


print('Please enter your line with no spaces or commas')

board_list = [[], [], [], [], [], [], [], [], []]

def convert(line):
    li = [int(x) for x in str(line)]
    if len(li) == 9:
        return li
    else:
        print("Your line was not valid, please try again.")
        convert(input())

def create_board(bo):
    for row in range(len(bo)):
        print('Please enter the line below:')
        board_list[row] = convert(input())

create_board(board_list)
print(board_list)

'''

【问题讨论】:

  • 你用的是哪个版本的python?最重要的是:您的代码不是pythonic。避免不必要的索引

标签: python list


【解决方案1】:

convert()方法中的else语句中添加return

def convert(line):
    li = [int(x) for x in str(line)]
    if len(li) == 9:
        return li
    else:
        print("Your line was not valid, please try again.")
        return convert(input())

【讨论】:

    【解决方案2】:

    convert的最后一行,需要返回值。也就是说,

    return convert(input())
    

    实际上,您是在请求用户输入,通过convert 运行它,但随后对结果不做任何事情。

    编辑:

    作为旁注,我建议不要对convert 进行递归调用。这不太可能,但如果用户不断输入错误,您将遇到递归深度错误。最好在convert之外对输入进行验证。

    【讨论】:

      【解决方案3】:
      print('Please enter your line with no spaces or commas')
      
      board_list = [[], [], [], [], [], [], [], [], []]
      
      def convert(line):
          li = [int(x) for x in str(line)]
          if len(li) == 9:
              return li
          else:
              print("Your line was not valid, please try again.")
              return convert(input())
      
      def create_board(bo):
          for row in range(len(bo)):
              print('Please enter the line below:')
              board_list[row] = convert(input())
      
      create_board(board_list)
      print(board_list)
      

      【讨论】:

        猜你喜欢
        • 2020-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-13
        • 1970-01-01
        • 1970-01-01
        • 2013-02-09
        相关资源
        最近更新 更多