如何允许用户将可变大小的数据矩阵输入Python

2024-04-20 10:02:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python非常陌生,正在努力寻找输入数据矩阵的方法。我需要做的是:

  1. 询问用户有多少行
  2. 询问用户有多少列 3允许用户为指定的行x列矩阵键入1或0值

实际上,我正在尝试复制以前在一个旧的PCW基本程序中进行的工作!在该版本中,用户 被要求单独键入1或0,即对于3 x 3矩阵,他们将被要求输入第1行,第1列?[输入] 第1行,第2列[输入]第1行,第3列[输入]第2行,第1列[输入]。。。。等等

理想情况下,如果用户能够一次键入一个完整的行,即1 0 1[Enter]1 1 1 0[Enter]0 1 0 [输入]或者更好的表格,比如网格,但我怀疑对于刚开始的人来说,这太野心勃勃了 Python。对于每个矩阵,用户将首先输入行和列标题标签,因此最好显示 一旦输入数据,这些数据就会在屏幕上输出。在

在这个阶段之后,还需要对数据进行一系列相当基本的数学运算。在

从我最初的阅读中,我最初的印象是我可能需要使用纽比或熊猫?我读过一些关于这些的文章,但是看不到任何与我正在努力实现的目标非常相似的东西。现在我开始觉得这些单子就足够了?在

如果有人能帮我指出正确的方向或给我一些建议,我将不胜感激。在

为了说明我要复制的内容,这是从原始基本代码中提取的:

1100 INPUT "HOW MANY ELEMENTS (COLUMNS) HAVE YOU"J
1110 PRINT
1120 INPUT "HOW MANY VARIABLES (ROWS) HAVE YOU"I
1130 PRINT
1140 PRINT "INPUT DATA,ROW BY ROW,AS FOLLOWS:"
1150 PRINT "TYPE '0' FOR A VOID"
1160 PRINT "TYPE '1' FOR AN INCIDENT"
1170 PRINT
1180 FOR R = 1 TO I
1190 FOR C = 1 TO J
1200 PRINT "ROW "R;": COLUMN "C;
1210 INPUT "INCIDENT OR VOID"R%(R,C)
1220 NEXT C
1230 NEXT R

非常感谢!在

罗伯特


Tags: 数据用户youforinput键入havetype
2条回答

您可以要求用户逐个输入行并以空行结束(之前不询问行数):

print ('Enter your row one by one (pressing enter between each row). To terminate, enter an empty row.')
M = []
while True:
    r = input ('Next row > ')
    if not r.strip (): # Empty input
        break
    M.append(list(map(int, r.split())))
print('M =', M)

结果:

^{pr2}$

numpy是一个科学的库,旨在用python实现«MATLAB类»代码(更快地操作矩阵,等等)。根据您想对矩阵做什么,使用numpy可能不是最快的方法。在

一个小例子(使用前面定义的矩阵M,关于您的评论):

>>> import numpy
>>> a = numpy.array (M)
>>> a
array([[0, 1, 0],
       [1, 1, 0],
       [0, 0, 1]])
>>> a.sum (0) # Sum over the first axis (row)
array([1, 2, 1])
>>> a.sum (0) % 2 # Sum + Modulo over the result
array([1, 0, 1], dtype=int32)
>>> b = 1 - a.sum (0) % 2 # Sum + Modulo + Inverse 1 and 0
>>> b
array([0, 1, 0], dtype=int32)
>>> a == b # check for each row
array([[ True,  True,  True],
       [False,  True,  True],
       [ True, False, False]], dtype=bool)
>>> (a == b).all (1) # Check for each raw if all column are True
array([ True, False, False], dtype=bool)
for i in range(0,columns):
    for j in range(0,rows):
        A[i][j] = int(input("Enter the value at row %d , column %d : "%(j,i)))

这是您想要的基本原型,根据需要更改名称和功能。
打印:

^{pr2}$

相关问题 更多 >