首页 > 解决方案 > 如何让一个大字符串(又名 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-这是我找到的一个练习,但不知道如何有效地解决。

标签: pythonstring

解决方案


我不明白为什么迭代实际上会成为问题,除非您打印数百万个标志。我认为这将是最快的。无论如何,优化总是你最不想做的事情,你首先需要一个有效的算法。

我不会真正解决这个练习,而是一些事情。您可以先一行一行地使用强大的星号运算符:

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 length
flag = """
ORA  
MUDA 
"""

f_lines = flag.split("\n")
for l in f_lines:
    print(l * n)

考虑到这一点,我认为您拥有解决锻炼所需的所有关键。


推荐阅读