我有一个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)
答案 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]]