You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写基于名称和高度生成指定数字瓷砖图案的程序?

解决数字瓷砖生成问题

以下是实现需求的Python代码,以及核心问题的拆解思路:

代码实现

name = input("Name: ").strip()
height = int(input("Tile height: ").strip())

# 校验高度必须为奇数(菱形对称,中间行放名称)
if height % 2 == 0:
    print("瓷砖高度必须为奇数")
    exit()

name_length = len(name)
total_width = name_length * 3  # 瓷砖宽度为名称长度的3倍
middle_row_num = (height + 1) // 2  # 中间行的位置(从1开始计数)

# 生成菱形上半部分(不含中间行)
upper_section = []
for i in range(1, middle_row_num):
    # 构造中间的+|++...图案
    pattern_parts = ["+"] + ["++"] * (2 * (i - 1)) + ["+"]
    middle_pattern = "|".join(pattern_parts)
    # 计算两侧短横线的长度
    dash_count = (total_width - len(middle_pattern)) // 2
    upper_section.append("-" * dash_count + middle_pattern + "-" * dash_count)

# 生成中间行:大写名称居中,空格替换为短横线
middle_line = f"{name.upper():^{total_width}}".replace(" ", "-")

# 生成菱形下半部分(上半部分逆序)
lower_section = upper_section[::-1]

# 输出最终瓷砖
print("\n" + "\n".join(upper_section + [middle_line] + lower_section))

核心问题拆解

1. 如何判断中间行位置

因为菱形是对称结构,且中间行需要放置名称,所以瓷砖高度必须为奇数。中间行的位置可以通过 (height + 1) // 2 计算(行号从1开始),比如高度为5时中间行是第3行,高度为13时是第7行。

2. 生成带侧边短横线的菱形图案

菱形的上下部分完全对称,只需生成上半部分后反转即可得到下半部分:

  • 中间图案规律:从顶部第一行开始,每行的中间图案以+|+为基础,每靠近中间一行就增加两组++,用|分隔。例如第1行是+|+,第2行是+|++|++|+,第3行是+|++|++|++|++|+。
  • 侧边短横线计算:用总宽度减去中间图案的长度,再除以2即可得到左右两侧短横线的数量,确保每行总长度一致。

3. 中间行的名称输出

利用Python字符串格式化的居中功能,将大写后的名称填充到总宽度,再把填充的空格替换为短横线,就能直接得到名称居中、两侧短横线的效果。

内容的提问来源于stack exchange,提问作者Kaia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:14:57