我正在编写一个程序,用户必须输入一个二进制矩阵。我怎样才能做到这一点。告诉用户如何输入该矩阵的最佳方式是什么?
1 回答
有许多不同的可能性。例如:
首先,您可以使用类似电子表格的 GUI(或类似curses
的 UI)、控制台样式的文本输入或各种其他东西。
假设您已决定使用控制台输入,最明显的解决方案可能是空格分隔的列、换行符分隔的行。但这可能不是您的用例的最佳解决方案。
如果您的用户可能希望将一个运行的输出复制并粘贴到下一个运行的输入中,您可能希望允许或需要括号和逗号,因为您将要打印它们。或者,如果他们可能从 CSV 文件中复制,则允许或要求使用逗号。等等。
如果矩阵必须是正方形,则不需要换行符。另一方面,让它们使输入看起来更好,并允许您提供更好的错误处理(“第 3 行有 8 个值而不是 7”与“你输入 50 个值而不是 49”)。
由于值是二进制的,因此您也不需要空格。这有类似的权衡。
您还可以在键盘上使用比1
and更靠近的两个字符0
,或者在视觉上更明显(例如,X
and .
),或者与您的问题空间更相关。
等等。关键是,没有一种“最好的方法”;有许多权衡需要做出,甚至可能会导致更多权衡的创新设计决策。
一旦你选择了一个,它们几乎都很容易实现。例如,让我们用空格分隔列,换行分隔行,空行表示结束:
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
它会引发异常;等等)