Python矩阵输入

时间:2013-01-10 21:52:03

标签: python matrix

我正在编写一个用户必须输入二进制矩阵的程序。我怎样才能做到这一点。 说用户如何输入该矩阵的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

有许多不同的可能性。例如:

首先,您可以使用类似电子表格的GUI(或类似的curses UI),控制台式文本输入或各种其他内容。

假设您决定使用控制台输入,最明显的解决方案可能是空格分隔的列,换行符分隔的行。但这可能不是您用例的最佳解决方案。

如果用户可能希望将一次运行的输出复制并粘贴到下一次的输入中,则可能需要允许或要求括号和逗号,因为您要将它们打印出来。或者,如果他们可以从CSV文件中复制,则允许或要求使用逗号。等等。

如果矩阵必须是正方形,则不需要换行符。另一方面,使用它们可以使输入看起来更好,并且允许您提供更好的错误处理(“第3行有8个值而不是7”对比“您输入50个值而不是49个”)。

由于值是二进制的,因此您也不需要空格。这有类似的权衡。

您还可以在键盘上使用比10更靠近的两个字符,或者在视觉上更加独特(例如X.),或者更相关到你的问题空间。

等等。关键是,没有一个“最好的方式”;有许多权衡要做,甚至可能是创新的设计决策,这将导致更多的权衡。

一旦你选了一个,它们几乎都很容易实现。例如,让我们用空格分隔的列,换行符分隔行,用空行表示结尾:

 print("Please enter your matrix as 1s and 0s, with spaces between the columns.")
 print("Use one row per line, and a blank row when you're done.")
 matrix = []
 while True:
     line = input()
     if not line: break
     values = line.split()
     row = [int(value) for value in values]
     matrix.append(row)

你可以明显地将这些行中的一些合并在一起,或者将整个事物转换为列表理解或生成器,但是我将它保留为这样,这样你就可以添加你认为合适的错误处理。 (您可能会注意到根本没有错误处理 - 如果您在某些行上输入错误的列数,您将获得锯齿状矩阵;如果您不小心键入q而不是1,则会提高例外;等等。)