【问题标题】:Taking user input of 2-D array in a given format以给定格式获取二维数组的用户输入
【发布时间】:2016-06-09 18:14:31
【问题描述】:

我有一个二维 6x6 数组,A。 我希望用户以以下格式或示例输入其值:

0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

0 表示用户将写入其值的位置。

这是我的代码。它在split() 中返回错误。

def arr_input(x):
    for i in range(6):
         for j in range(6):
              n = int(input().split(' '))
              if n>=-9 and n<=9:
                   x[i][j] = n
    print "\n"

我不想在一行中输入。请帮忙!


编辑 1 我需要的代码已经提供:D。尽管如此,我还是学到了一些新的和有用的东西。这是执行我想要的任务的现有代码:

arr = []
for arr_i in xrange(6):
    arr_temp = map(int,raw_input().strip().split(' '))
    arr.append(arr_temp)

【问题讨论】:

标签: python arrays python-2.7 input


【解决方案1】:

首先,您使用的是input(),当您在终端中输入数字时,它会返回 int。您应该使用raw_input() 并逐行获取。

其次,您正在尝试将列表转换为整数,您应该遍历列表值,转换并插入结果列表。

固定代码:

def arr_input(x):
    for i in range(6):
        num_list = raw_input().split(' ')
        for j, str_num in enumerate(num_list):
            n = int(str_num)
            if n >= -9 and n <= 9:
                x[i][j] = n
    print "\n"

在这里,我使用enumerate() 通过每次迭代获取其索引来循环遍历数字列表。

【讨论】:

    【解决方案2】:

    您处理输入的方式不一致。在 python 2.7 中,input() 函数被设计为从标准输入读取一个,并且只有一个参数。

    我不确定您尝试以哪种方式读取输入。嵌套的 for 循环表明您正在尝试逐个读取值,但拆分表明您正在这样做逐行。为了涵盖所有基础,我将解释这两种情况。其中至少有一个是相关的。

    案例 1: 假设您一直在逐一输入值,即

    1
    4
    9
    4
    ...
    

    在这种情况下,发生的情况是 input() 函数自动将输入解析为整数,当您尝试对整数运行 split() 时,会出现类型错误。 Python 需要一个字符串,而您提供的是一个 int。那会坏掉的。有一个简单的解决方案 - 这可以通过简单地用

    替换该行来解决
    n = input()
    

    案例 2: 假设您以字符串的形式逐行输入数字。我的意思是这样的:

    "1 3 4 5 7 9"
    "4 1 8 2 5 1"
    ...
    

    这里发生的是 int(...) 试图将字符串列表转换为整数。这显然会破坏代码。一种可能的解决方案是通过摆脱内部 for 循环来重构代码。像这样的东西应该可以工作:

    def arr_input(arr):
        for i in range(6):
            s = input()
            nums_s = s.split(' ')
            nums = [int(x) for x in nums_s]
            arr.append(nums)
        print "\n"
        return arr
    
    # Usage
    a = []
    print(a)
    a = arr_input(a)
    print(a)
    

    【讨论】:

      【解决方案3】:

      试试这个单线:

      def arr_input(N=6):
          print 'Enter %d by %d array, one row per line (elements separated by blanks)' % (N, N)    
          return [[n if abs(n)<=9 else 0 for n in map(int, raw_input().split())] for i in range(N)]
      

      以下交互式会话演示了它的用法:

      >>> A = arr_input(3)
      Enter 3 by 3 array, one row per line (elements separated by blanks)
      1 2 -3
      4 5 -6
      8 9 10
      >>> A
      [[1, 2, -3], [4, 5, -6], [8, 9, 0]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        相关资源
        最近更新 更多