用户输入给定格式的二维数组(Python2)

时间:2016-06-09 18:14:32

标签: arrays python-2.7

我有一个2-D 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)

3 个答案:

答案 0 :(得分: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()通过每次迭代获取索引来遍历数字列表。

答案 1 :(得分:0)

您对输入的处理方式存在不一致。在python 2.7中,input()函数用于从stdin中读取一个且只有一个参数。

我不确定你在尝试读取输入的方式。嵌套的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)

答案 2 :(得分:0)

试试这个单行:

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]]