首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以给定格式接收二维数组的用户输入。

以给定格式接收二维数组的用户输入。
EN

Stack Overflow用户
提问于 2016-06-09 18:14:31
回答 3查看 1.2K关注 0票数 0

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

代码语言:javascript
运行
复制
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()中的一个错误。

代码语言:javascript
运行
复制
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.不过,我学到了一些新的和有帮助的东西。下面是执行我想要的任务的现有代码:

代码语言:javascript
运行
复制
arr = []
for arr_i in xrange(6):
    arr_temp = map(int,raw_input().strip().split(' '))
    arr.append(arr_temp)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-09 18:31:24

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

第二,您正在尝试将列表转换为整数,您应该循环遍历列表值,然后在结果列表上进行转换和插入。

固定代码:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2016-06-09 18:33:09

你对待输入的方式有不一致之处。在python 2.7中,and ()函数设计为读取stdin中的一个参数,而且只读取一个参数。

我不太清楚你是怎么读输入的。嵌套的for循环表示您试图逐个读取值,但拆分表明您正在逐行地读取这些值。为了涵盖所有的基础,我会解释这两种情况。其中至少有一个是相关的。

案例1:假设您一直在一个接一个地输入值,即

代码语言:javascript
运行
复制
1
4
9
4
...

在本例中,所发生的情况是that ()函数将输入自动解析为整数,当您尝试对整数运行拆分()时,会出现类型错误。Python需要一个字符串,而您正在提供一个int。那会打破的。有一个简单的解决方案--这可以通过简单地将这一行替换为

代码语言:javascript
运行
复制
n = input()

案例2:假设您正在逐行输入数字,作为字符串输入。我的意思是:

代码语言:javascript
运行
复制
"1 3 4 5 7 9"
"4 1 8 2 5 1"
...

这里发生的是int(.)正在尝试将字符串列表转换为整数。这显然会破坏代码。一个可能的解决方案是通过去掉内部for循环来重构代码。像这样的事情应该有效:

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2016-06-09 18:54:21

试试看这个单线:

代码语言:javascript
运行
复制
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)]

下面的交互式会议演示了它的用法:

代码语言:javascript
运行
复制
>>> 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]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37733366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档