如何用更简单的Python代码实现带奇数校验的星号菱形打印功能
原代码逻辑拆解
- 首先导入math库做上下取整运算,接收用户输入的高度值转成整数
- 合法性校验:判断输入值是否为大于2的奇数,不满足就输出提示
- 构造序列
a:比如输入高度为7(奇数),a最终会变成[1,2,3,4,3,2,1],对应每行星号的“层级”,用来计算每行需要打印的星号数量 - 循环遍历序列
a的每一项:- 每行星号数量 = 2*层级 -1,比如层级1对应1个星,层级2对应3个星,以此类推
- 每行左右两侧的空格数 =(总高度 - 星号数量)// 2,保证星号居中
- 拼接空格+星号+空格后打印,就得到菱形效果
更简单的实现方案
不需要导入math库,逻辑更直观,直接拆分上下半部分打印即可,代码如下:
# 获取用户输入 height = int(input("Enter height - odd number: ")) # 合法性校验 if height > 2 and height % 2 == 1: mid = height // 2 # 中间行的索引,比如高度7的话mid是3(从0数第4行是中间) # 打印上半部分+中间行 for i in range(mid + 1): star_num = 2 * i + 1 space_num = mid - i print(" " * space_num + "*" * star_num + " " * space_num) # 打印下半部分(倒序,不包含中间行) for i in range(mid - 1, -1, -1): star_num = 2 * i + 1 space_num = mid - i print(" " * space_num + "*" * star_num + " " * space_num) else: print("The height must be a positve odd value")
这个实现的优势:
- 不需要依赖math库,也不需要构造额外的列表,直接两次循环就完成打印,逻辑清晰好懂
- 计算过程都是整数运算,没有类型转换的额外开销
内容的提问来源于stack exchange,提问作者Newbie Jeanette
相关产品推荐
相关产品推荐

