如何从用户输入中捕获矩阵并在用户输入时将其打印出来?

问题描述

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

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

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

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

解决方法

现在,您的代码分别询问每个元素。如果您输入数字,直到它本身像

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)。 print命令使用解包以及for ... in返回行的事实。

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

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

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

,
Id   Name    Old_Id  
---------------------
1    Paul     null
2    Paul      1
3    Jim      null
4    Paul      2
5    Tim      null 

输入:

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
        ints =input()

        entries = []

        for a in ints:
          entries.append(int(a))
        matrix_input.append(entries)

    for ele in matrix_input:
      for d in ele:
        print(d,end='')
      print('')

matrix()

输出:

Enter the entries in a single line (separated by space): 
130
304
603
,

问题是您正试图将整个字符串(每个int之间带有空格的输入)转换为整数。

相反,您需要拆分输入。见下文:

def matrix():
    row = int(3)
    column = int(3)
    matrix_input = []
    print("Enter the entries in a single line (separated by space): ")
    
    input_str = input()
    
    entries = []
    entries.extend([int(x) for x in input_str.split(' ')])
    
    for item in entries:
        print(item)

,

这可以解决问题。

df = df.replace(np.inf,np.nan)

Out[2]: 
   A  B         C         D
0  1  2  2.000000  0.500000
1  2  3  1.500000  0.666667
2  3  4  1.333333  0.750000
3  0  5       NaN  0.000000