我正在编写一个用户必须输入二进制矩阵的程序。我怎样才能做到这一点。 说用户如何输入该矩阵的最佳方法是什么?
答案 0 :(得分:3)
有许多不同的可能性。例如:
首先,您可以使用类似电子表格的GUI(或类似的curses
UI),控制台式文本输入或各种其他内容。
假设您决定使用控制台输入,最明显的解决方案可能是空格分隔的列,换行符分隔的行。但这可能不是您用例的最佳解决方案。
如果用户可能希望将一次运行的输出复制并粘贴到下一次的输入中,则可能需要允许或要求括号和逗号,因为您要将它们打印出来。或者,如果他们可以从CSV文件中复制,则允许或要求使用逗号。等等。
如果矩阵必须是正方形,则不需要换行符。另一方面,使用它们可以使输入看起来更好,并且允许您提供更好的错误处理(“第3行有8个值而不是7”对比“您输入50个值而不是49个”)。
由于值是二进制的,因此您也不需要空格。这有类似的权衡。
您还可以在键盘上使用比1
和0
更靠近的两个字符,或者在视觉上更加独特(例如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
,则会提高例外;等等。)