首页 > 解决方案 > print 打印一个空格太多

问题描述

我目前正在完成我的项目,该项目涉及使用密钥矩阵对句子进行加密。到目前为止,所有计算都已完成且正确,剩下的就是我将输出打印到屏幕上,瞧。

这是我当前的输出

您可以在上面看到的是我当前的输出。密钥矩阵按照我希望的方式打印,并且加密消息也很好,除了我的打印比需要的多一个空格。这是非常有问题的,因为该项目将使用机器人进行验证,因此即使它在屏幕上没有任何改变(除了管道进入 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 新手,请原谅我糟糕的编码风格,我仍在努力。

标签: python

解决方案


您的问题是嵌套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)

*final 中的运算符print()解包列表,就好像您已将其每个元素指定为print(). 它相当于:

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

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


推荐阅读