2016-06-09 3 views
0

У меня есть 2-D массив 6x6, A. Я хочу, чтобы его значения для ввода пользователем в следующем формате или, например:Принимая пользовательский ввод двухмерного массива в заданном формате (Python2)

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 «s указывают места, где пользователь должен написать свои значения.

Это мой код. Он возвращает ошибку в split().

Я не хочу вводить данные в одной строке. Пожалуйста помоги!


EDIT 1 код мне нужно было уже предусмотрено: D. Тем не менее, я узнал что-то новое и полезное. Вот существующий код для выполнения задачи я хотел:

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

'split' возвращает список. Аргумент int() должен быть строкой или числом. Сообщение об ошибке передало бы это. Также отправьте сообщение об ошибке. – SilentMonk

ответ

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() в цикле, хотя список номеров, получив его индекс каждой итерации.

0

Существует несогласованность в том, как вы обрабатываете входные данные. В python 2.7 функция input() предназначена для чтения одного и только одного аргумента из stdin.

Я не совсем уверен, в какую сторону вы пытаетесь прочитать ввод. Вложенная петля предполагает, что вы пытаетесь прочитать значения поодиночке, но раскол предполагает, что вы делаете это строка за строкой. Чтобы охватить все базы, я объясню оба случая. По крайней мере, один из них будет иметь значение.

Случай 1: Допустим, ты ввода значения по одному, т.е.

1 
4 
9 
4 
... 

В этом случае, что происходит в том, что функция ввода() автоматически разборе входы как целые числа, и когда вы пытаетесь запустить split() для целого числа, существует ошибка типа. Python ожидает строку, и вы предоставляете int. Это сломается. Там это простое решение - это может быть исправлено, просто заменив эту линию с

n = input() 

Случай 2: Допустим, вы inputing линию номера по линии, как строки. Под этим я имею в виду что-то вроде:

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

То, что здесь происходит, что Int (...) пытается бросить список строк в целое число. Это явно нарушит код.Возможным решением было бы реструктурировать код, избавив его от внутреннего цикла. Нечто подобное должно работать:

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

Дайте этому Однострочник попробовать:

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]] 
Смежные вопросы