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

时间:2015-07-06 12:10:34

标签: python matrix

我是Python的新手,并且正在努力寻找输入数据矩阵的方法。我需要做的是:

  1. 询问用户有多少行
  2. 询问用户有多少列 3允许用户为指定的行x列矩阵输入1或0值
  3. 我实际上试图复制以前在旧的PCW BASIC计划中所做的事情!在该版本中,用户 被要求单独输入1或0,即对于3 x 3矩阵,他们会被要求输入第1行,第1列? [输入] 第1行,第2栏[输入]第1行,第3列[输入]第2行,第1列[输入] ....等。

    理想情况下,如果用户能够一次输入一个完整的行,即1 0 1 [Enter] 1 1 0 [Enter] 0 1 0会更好 [Enter]甚至更好地在类似电子表格的网格中,但我怀疑对于刚刚开始的人来说这太雄心勃勃了 蟒蛇。对于每个矩阵,用户首先输入行标题和列标题,因此最好显示 输入数据后,屏幕输出中会显示这些信息。

    除此阶段外,还有一系列相当基本的数学运算要完成。

    从我最初的阅读开始,我最初得到的印象是我可能需要使用NumPy或熊猫?我已经阅读了一些关于这些的内容,但是看不到任何与我想要实现的非常相似的东西。现在我开始认为列表可能已经足够了吗?

    如果有人可以帮助我指出正确的方向,或者给我一些非常感激的指示。

    为了说明我尝试复制的内容,这是原始BASIC代码的摘录:

    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
    

    非常感谢!

    罗伯特

2 个答案:

答案 0 :(得分:1)

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

return

结果:

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)

Enter your [...] empty row. Next row > 0 1 0 Next row > 1 1 0 Next row > 0 0 1 Next row > M = [[0, 1, 0], [1, 1, 0], [0, 0, 1]] 是一个科学库,旨在在python中启用«numpy like»代码(更快地处理矩阵等等)。根据您对矩阵的处理方式,使用MATLAB可能不是最快的方法。

一个小例子(使用之前定义的矩阵numpy,关于你的评论):

M

答案 1 :(得分:0)

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)))

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

for i in range(0,columns):
    for j in range(0,rows):
        print("The value at row %d , column %d is : %d : "%(j,i,A[i,j]))