根据字符串长度动态打印



我是Python的新手,正在尝试使用print和for循环来打印如下模式,其中块的宽度取决于我要输入的字符,即块和周围行的宽度随着字符串的长度而动态增加,例如ABCDEFGHI..:

┏━━━━━━━━━━┓
┃  ABCDE   ┃
┗━━━━━━━━━━┛

我正在尝试迭代字符串的字符,比如-

name = "abcdefghi"
for i in name:
print("━",end="")
print()
for j in range(1):
print("┃"+" "*(len(name)-1)+"┃")
for k in name:
print("━",end="")

这给了我一个类似的输出

━━━━━━━━━━━━
┃           ┃
━━━━━━━━━━━━
  1. 如何使用多个循环来结束行?(使图案看起来不像一个开放式盒子(
  2. 有没有什么方法可以启动第二个循环索引-1而不是行━━━模式

需要关于尝试什么的建议吗?

样本中有类似'┏'的字符,因此在设计逻辑时需要考虑它们:

name = "abcdefghi"
width = len(name) + 4
print('┏' + "━"*width + "┓")
print('┃' + name.center(width) + '┃')
print('┗' + "━"*width + "┛")
┏━━━━━━━━━━━━━┓┃abcdefghi┃┗━━━━━━━━━━━━━┛

您可以先构建完整的字符串,然后打印

name = "abcdefghi"
hh = (len(name)+4)*"━" # horizontal line, using "string multiplication"
box = f"┏{hh}┓n┃  {name}  ┃n┗{hh}┛" # using f-string substitution
print(box)
┏━━━━━━━━━━━━━┓
┃  abcdefghi  ┃
┗━━━━━━━━━━━━━┛

如果要将名称写入框中,则不需要for循环。您可以像现有代码使用" "*(len(name)-1)一样,将"━" * len(name)用于可变长度字符串

name = "abcdefghi"
print("┏━" + "━" * len(name) + "━┓")
print("┃ " + name + " ┃")
print("┗━" + "━" * len(name) + "━┛")

给予:

┏━━━━━━━━━━━┓
┃ abcdefghi ┃
┗━━━━━━━━━━━┛

对于这个问题中稍宽的框,只在边缘硬编码一些稍长的字符串可能是最简单的:

print("┏━━" + "━" * len(name) + "━━┓")
print("┃  " + name + "  ┃")
print("┗━━" + "━" * len(name) + "━━┛")

给予:

┏━━━━━━━━━━━━━┓
┃  abcdefghi  ┃
┗━━━━━━━━━━━━━┛

最新更新