首页 > 解决方案 > 如何从用户输入中捕获矩阵并在用户输入时将其打印出来?

问题描述

我正在搞乱 numpy 试图创建一个 3x3 矩阵。我想通过用户输入捕获矩阵输入,然后在用户输入矩阵时将其打印出来。

这就是我现在所拥有的,它抛出了一个

ValueError: invalid literal for int() with base 10: 

当我运行它时,我不知道为什么。我没有在任何地方输入字母“a”,只有数字。

def matrix():
    row = int(3)
    column = int(3)
    matrix_input = []
    print("Enter the entries in a single line (separated by space): ")
    for i in range(row):  # A for loop for row entries
        entries = []
        for j in range(column):  # A for loop for column entries
            entries.append(int(input()))
        matrix_input.append(entries)

    # matrix_input = np.array(entries).reshape(row, column)
    print(matrix_input)

目标是让用户在三个单独的行上输入 3 个数字。例子:

130
304
603

然后,程序将完全按照用户输入的格式以相同的格式输入。

130
304
603

任何指导将不胜感激。谢谢

标签: pythonnumpy

解决方案


现在,您的代码分别要求每个元素。如果您输入数字,直到它结束,就像

111
222
333
444
555
666
777
888
999

程序将返回

[[111, 222, 333], [444, 555, 666], [777, 888, 999]]

发生这种情况是因为input()它位于最内层循环内,因此被调用了 9 次。

因此,如果您想输入以空格分隔的值,可以使用列表推导将其转换为数字列表:

row = int(3)
matrix_input = []
print("Enter the entries in a single line (separated by space): ")
for i in range(row):  # A for loop for row entries
    matrix_input.append([int(k) for k in input().split(' ')])

for out in matrix_input:
    print('{0} {1} {2}'.format(*out))

这将要求三个条目,它们沿空格拆分并转换为整数。如果你想要浮动,你可以使用float(k)而不是int(k). for ... inprint 命令使用解包和返回行的事实。

或者,您可以使用' '.join()更灵活的方法:

for out in matrix_input:
    print(' '.join([str(el) for el in out]))

这实际上是矩阵构造的逆运算。


推荐阅读