我目前正在完成我的项目,该项目涉及使用密钥矩阵对句子进行加密。 到目前为止,所有计算都已正确完成,剩下的就是我将输出打印到屏幕上,瞧。
上面您可以看到的是我当前的输出。 密钥矩阵的打印方式与我希望的打印方式相同,并且对加密消息也很有效,除了我的打印内容比需要的打印空间多。这是相当有问题的,因为该项目将要由机器人进行验证,因此,即使它在屏幕上没有任何改变(除非将管道移入cat -e时),该机器人仍会选择它。 >
我的打印功能如下:
def the_output_printer(key_matrix, encrypted_matrix, matrix_size):
length = (len(sys.argv[1]));
if (length == 0):
exit(84);
lines = round(length / matrix_size, 0);
if (length % matrix_size != 0):
lines += 1
lines = int(lines);
print("Key matrix:");
for line_index_key in range(0, matrix_size):
for col_index_key in range(0, matrix_size):
if (col_index_key != matrix_size - 1):
print("{}".format(key_matrix[line_index_key][col_index_key]), end="\t");
if (col_index_key == matrix_size - 1):
print("{}".format(key_matrix[line_index_key][col_index_key]), end="\n");
print("\n", end="");
print("Encrypted message:")
for line_index in range(0, lines):
for col_index in range(0, matrix_size):
print("{}".format(encrypted_matrix[line_index][col_index]), end=" ");
print();
我尝试了一些与“ Key Matrix”所做的类似的操作,但效果并不理想。 关于如何不打印最后一个“”的任何想法?
谢谢大家阅读!
由于我仍然不熟悉python,请原谅我可怕的编码风格,但我仍在努力。
答案 0 :(得分:1)
您的问题是,嵌套for
循环的每次迭代都将end
参数打印一个空格。假设您希望所有元素之间都可以,那么很好,但是它不知道在嵌套循环的最后一次迭代中跳过它。
解决此问题的方法不止一种,但是因为您提到了Python的新手知识,所以我将坚持一个简单的方法-而不是打印每个数字,而是将这些数字收集在一个列表中,然后将该列表传递给{ {1}}。 print()
默认在其参数之间添加一个分隔符,但不要在最后一个参数之后。
print()
最后一个message_elements = []
for line_index in range(0, lines):
for col_index in range(0, matrix_size):
message_elements.add("{}".format(encrypted_matrix[line_index][col_index]))
print(*message_elements)
中的*
运算符将列表解压缩,就像您已将列表的每个元素指定为print()
的参数一样。等效于:
print()
一旦您对Python有了更多的经验,就有种方法可以更简洁地将矩阵元素收集到列表中,或者完全避免使用中间列表并使用单个表达式来完成。但这应该行得通,并且对您现有的代码所做的更改应尽可能少。
答案 1 :(得分:0)
好的,我知道了:)! 问题是,由于我还是Python的新手,所以我再次搞砸了如何 range()起作用。 我以前解决此问题的尝试类似于:
if (line_index == lines and col_index == matrix_size):
print("{}".format(encrypted_matrix[line_index][col_index]));
else:
print("{}".format(encrypted_matrix[line_index][col_index]), end=" ");
我忽略了使用
的事实in range(foo)
该值在foo-1处停止,或者非常简单,尽管它严格低于foo。 解决方法很简单,就是将-1添加到我的if语句中,这与我在执行key_matrix打印部分时忘记的事情完全相同。函数的固定部分现在看起来像这样:
if (line_index == lines - 1 and col_index == matrix_size - 1):
print("{}".format(encrypted_matrix[line_index][col_index]));
else:
print("{}".format(encrypted_matrix[line_index][col_index]), end=" ");
哪个给我正确的输出:)。谢谢大家,但我在重新阅读了几次代码后才明白了。