如何让一个大字符串(又名 str 图片)一个接一个打印?

+___ +___ +___ 

|1 / |2 / |3 / 

|__\ |__\ |__\ 

|    |    | 

我试图让标志一个接一个地出现,我能想到的唯一方法是将图片的每一部分分配给各种变量(这意味着添加top = '+___'等等)。但是如果它确实适用于较小的图片,应该我用更大的?创建一个数组并遍历它在时间和内存计划中也不是一个好的解决方案。我试图将所有内容附加在一个字符串中,但使用end=''它并不能按照我需要的方式塑造形式(仅从新行开始)。我会很感激你的建议,在此先感谢。


n = int(input())

flag = """

+___  

|  /  

|__\  

|   

"""

for i in range(1, n + 1):

    print(flag[:9] + str(i) + flag[10:])

PS-这是我找到的一个练习,但不知道如何有效地解决。


aluckdog
浏览 110回答 2
2回答

偶然的你

我不明白为什么迭代实际上会成为问题,除非您打印数百万个标志。我认为这将是最快的。无论如何,优化总是你最不想做的事情,你首先需要一个有效的算法。我不会真正解决这个练习,而是一些事情。您可以先一行一行地使用强大的星号运算符:print("ORA  " * n)print("MUDA " * n)由于所有字符的间距相同,您可以看到它打印得很好。重要的是要检查所有行是否具有相同数量的字符,或者对其进行填充(例如,在行尾插入空格)。现在,关于更改字母,您需要更改一些算法:print("ORA   " * n)for i in range(n):    print("HELLO ".replace('E', i))print(i)print("MUDA  " * n)如果你担心你的老师会不喜欢这种编码风格,首先,这对你很好,然后你确实可以使用数组,有点像这样:# Notice that all my line have the same lengthflag = """ORA  MUDA """f_lines = flag.split("\n")for l in f_lines:    print(l * n)考虑到这一点,我认为您拥有解决锻炼所需的所有关键。

慕莱坞森

您不能并排打印 - 您的光标移动到下一行,每次打印都会顶部 = '+___'您可以将图片拆分为单独的行。它创建了一个可以迭代的列表。然后你可以使用简单的乘法打印一些字符串的倍数*:n = int(input())flag = """+___  |  /  |__\  |     """for line in flag.split("\n"):    print(line * n)结果:+___  +___  +___  +___  +___  |  /  |  /  |  /  |  /  |  /  |__\  |__\  |__\  |__\  |__\  |     |     |     |     |     但这仅在您的原始标志的所有行长度相等时才有效。如果您不想确保其中有空格,您可以稍后添加填充。使用字符串格式或一些巧妙的技巧。至于数字,字符串格式是你的朋友!flag = """+___  |{} /  |__\  |     """请注意这里的标志是如何被破坏的 -{}是两个字符,但我们将只使用一个数字来代替它!然后我们需要一个内部循环,因为每个标志需要一个不同的数字。for line in flag.split("\n"):    for i in range(1, n+1):        print(line.format(i), end="") #by default each print is one line, we want to stay in the same line!    print() #print the new line only after n * part of the flag is printed结果:+___  +___  +___  +___  +___  |1 /  |2 /  |3 /  |4 /  |5 /  |__\  |__\  |__\  |__\  |__\  |     |     |     |     |     
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python