打印空间太大

2024-06-17 13:00:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在完成我的项目,涉及使用密钥矩阵加密一个句子。 到现在为止,所有的计算都已经完成并且正确了,剩下的就是我把输出打印到屏幕上

This is my current output

上面你能看到的是我的电流输出。 密钥矩阵是按我所希望的方式打印的,加密消息也很好,只是我的打印比需要的多打印一个空间。这是相当有问题的,因为事实上,该项目将与机器人验证,所以即使它没有改变屏幕上(除了管道到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();

我尝试了一些类似于我为密钥矩阵所做的事情,但没有真正奏效。 有没有办法不打印最后一个“”

谢谢大家的阅读

由于我还是python新手,请原谅我糟糕的编码风格,我还在努力


Tags: keyinforsizeindexifline密钥
2条回答

您的问题是嵌套的for循环的每次迭代都会打印end参数,一个空格。假设您希望所有元素之间都有一个元素,但它不知道在嵌套循环的最后一次迭代中跳过它

解决这个问题的方法不止一种,但是因为您提到了我是Python的新手,所以我将坚持使用一种简单的方法—不打印每个数字,而是将数字收集到一个列表中,然后将该列表传递给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()的参数一样。相当于:

 print(message_elements[0], message_elements[1], ...)

一旦您对Python有了更多的经验,就可以更简洁地将矩阵元素收集到一个列表中,或者完全避免使用中间列表并使用一个表达式来完成。但这应该工作和改变尽可能少,我可以从您现有的代码

好吧,我想出来了:)! 问题是,由于我还是Python新手,我又一次搞砸了如何使用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时。 修复方法很简单,就是在if语句中添加-1,这和我在打印key\u矩阵时忘记的完全一样。函数的固定部分现在看起来如下:

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=" ");

这给了我正确的输出:)。谢谢大家,但我重新阅读了几次代码后就明白了

相关问题 更多 >