Предполагая, что вы используете Python 2.7, проблема заключается в том, что вы используете input
для обработки ввода, введенного пользователем. Действительно, если вы посмотрите на соответствующую документацию (https://docs.python.org/2/library/functions.html#input), вы увидите, что в основном input
соответствует eval(raw_input())
, что означает, что аргумент выражения анализируется и оценивается как выражение Python. Если вы хотите прочитать стандартный ввод как строку, вместо этого вы должны использовать raw_input
.
Если вы используете python 3, то input
в порядке.
Обратите внимание, что вы должны форматировать входную строку таким образом, чтобы read_matrix
мог распознавать элементы в одной и той же строке и добавлять новую строку.
Одно из возможных решений (которое работает с python 2.7), сохраняя вашу структуру кода и предполагая, что формат ввода имеет номера в одной и той же строке, разделенные пробелом, и строки, разделенные символом ';' (Например, 1 2 3, 4 5 6, 7 8 9), является:
def parse_numbers_list(formatted_string):
list_of_lists = [map(int, row.split()) for row in formatted_string.split(';')]
return list_of_lists
x = raw_input("enter the list of lists of numbers?")
print(parse_numbers_list(x))
Для Python 3, аналогично:
def parse_numbers_list(formatted_string):
list_of_lists = [list(map(int, row.split())) for row in formatted_string.split(';')]
return list_of_lists
x = input("enter the list of lists of numbers?")
print(parse_numbers_list(x))
Обратите внимание, что я изменил имя функции, как в целом , код не проверяет, соответствует ли входная строка матричному ограничению, т. е. столько же столбцов для каждой строки. Вы можете добавить чек, чтобы узнать, имеет ли каждый список одинаковый размер.
Кроме того, полное решение должно включать проверку правильности форматирования входной строки.
Существует, конечно, множество других способов реализации кода для чтения матрицы со стандартного ввода, в том числе с использованием внешних библиотек, например, numpy, но я думаю, что, изучая Python, хорошо, что вы начинаете с основами.
'для строки в матрице:' будет присваивать 'line' каждому элементу в' matrix'. Так как 'matrix' передается как строка, каждый символ будет' line'. – zondo
'input' читается до новой строки. Попробуйте добавить «raw_input» в read_matrix в цикле while и перерыв, когда введенная строка пуста или недействительна. –
комментарий @YakymPirozhenko действителен только для python 2, потому что 3.x 'input' прав - нет' raw_input', действительно, поскольку unicode имеет значение по умолчанию – Ilja