使用 for 循环将字符串风格化为 ASCII 艺术
Using for loop to stylize strings into ASCII art
我正在尝试获取此输出:
+-+-+-+-+-+-+
|P|Y|T|H|O|N|
+-+-+-+-+-+-+
是否可以在不在代码中添加新行的情况下获得该输出?
def art(name):
for i in range(len(name[0]), len(name) + 1):
head = "+" + i * "-+"
middle = "|" + i * "{}|".format(name[0].upper())
bottom = "+" + i * "-+"
print(head + "\n" + middle + "\n" + bottom)
art("Python")
实际输出:
+-+-+-+-+-+-+
|P|P|P|P|P|P|
+-+-+-+-+-+-+
我不知道如何操作它才能让它工作。我尝试使用 index()
和 i
作为变量,但出现如下错误:“IndexError: string index out of range”
head
和 bottom
不需要在 for
循环中,因为它们会一次性计算出完整的字符串。就此而言,因为它们是相同的字符串,所以根本没有理由将它们作为两个单独的变量。
您的循环不需要遍历索引——它可以遍历字符,因此您可以自己直接添加这些字符;并且使用 f 弦有点过于复杂。
无论如何——如果你要使用循环,你应该加法构造你的字符串;只是在每次迭代时覆盖整个内容,根本没有必要使用循环。
def art(name):
head = "+" + len(name) * "-+"
middle = ''
for character in name:
middle += '|{}'.format(character.upper())
print(head + "\n" + middle + "|\n" + head)
art("Python")
当您查找要打印的字符时,您硬编码了索引 0
:
def art(name):
for i in range(len(name[0]), len(name) + 1):
head = "+" + i * "-+"
middle = "|" + i * "{}|".format(name[0].upper())
^-- here
bottom = "+" + i * "-+"
print(head + "\n" + middle + "\n" + bottom)
art("Python")
相反,您可以使用 i
来引用 name
中的实际字符:
middle = "|" + i * "{}|".format(name[i].upper())
您的 range
也有错误。没有必要使用 len(name[0])
- 这将永远是 1
,并且会导致你的循环 运行 一次迭代比 name
的长度长(因为索引开始于0
)。这就是你 IndexError
.
的原因
相反,使用 0
作为开始 - 这与根本不提供开始参数相同:
for i in range(len(name)):
但您实际上并不需要索引;无需遍历 name
即可执行您想要的操作。您可以改为使用 |
作为分隔符连接 name
中的每个字母。 header/footer 可以通过重复 +-
与 name
的长度相同的时间来创建。所以你的循环可以替换为:
print('+-' * len(name) + '+')
print('|' + '|'.join(name.upper()) + '|')
print('+-' * len(name) + '+')
.. 或分配给 head
、middle
、bottom
(如果需要的话)。
我正在尝试获取此输出:
+-+-+-+-+-+-+
|P|Y|T|H|O|N|
+-+-+-+-+-+-+
是否可以在不在代码中添加新行的情况下获得该输出?
def art(name):
for i in range(len(name[0]), len(name) + 1):
head = "+" + i * "-+"
middle = "|" + i * "{}|".format(name[0].upper())
bottom = "+" + i * "-+"
print(head + "\n" + middle + "\n" + bottom)
art("Python")
实际输出:
+-+-+-+-+-+-+
|P|P|P|P|P|P|
+-+-+-+-+-+-+
我不知道如何操作它才能让它工作。我尝试使用 index()
和 i
作为变量,但出现如下错误:“IndexError: string index out of range”
head
和 bottom
不需要在 for
循环中,因为它们会一次性计算出完整的字符串。就此而言,因为它们是相同的字符串,所以根本没有理由将它们作为两个单独的变量。
您的循环不需要遍历索引——它可以遍历字符,因此您可以自己直接添加这些字符;并且使用 f 弦有点过于复杂。
无论如何——如果你要使用循环,你应该加法构造你的字符串;只是在每次迭代时覆盖整个内容,根本没有必要使用循环。
def art(name):
head = "+" + len(name) * "-+"
middle = ''
for character in name:
middle += '|{}'.format(character.upper())
print(head + "\n" + middle + "|\n" + head)
art("Python")
当您查找要打印的字符时,您硬编码了索引 0
:
def art(name):
for i in range(len(name[0]), len(name) + 1):
head = "+" + i * "-+"
middle = "|" + i * "{}|".format(name[0].upper())
^-- here
bottom = "+" + i * "-+"
print(head + "\n" + middle + "\n" + bottom)
art("Python")
相反,您可以使用 i
来引用 name
中的实际字符:
middle = "|" + i * "{}|".format(name[i].upper())
您的 range
也有错误。没有必要使用 len(name[0])
- 这将永远是 1
,并且会导致你的循环 运行 一次迭代比 name
的长度长(因为索引开始于0
)。这就是你 IndexError
.
相反,使用 0
作为开始 - 这与根本不提供开始参数相同:
for i in range(len(name)):
但您实际上并不需要索引;无需遍历 name
即可执行您想要的操作。您可以改为使用 |
作为分隔符连接 name
中的每个字母。 header/footer 可以通过重复 +-
与 name
的长度相同的时间来创建。所以你的循环可以替换为:
print('+-' * len(name) + '+')
print('|' + '|'.join(name.upper()) + '|')
print('+-' * len(name) + '+')
.. 或分配给 head
、middle
、bottom
(如果需要的话)。