如何编写基于名称和高度生成指定数字瓷砖图案的程序?
解决数字瓷砖生成问题
以下是实现需求的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
相关产品推荐
相关产品推荐

