打印太多打印一个空间

时间:2019-12-13 22:22:56

标签: 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();

我尝试了一些与“ Key Matrix”所做的类似的操作,但效果并不理想。 关于如何不打印最后一个“”的任何想法?

谢谢大家阅读!

由于我仍然不熟悉python,请原谅我可怕的编码风格,但我仍在努力。

2 个答案:

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

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