如何结合for循环与elif语句实现指定星号图案?
星号图案实现问题解答
现有代码的简洁性评价
你的代码逻辑很直观,用两个for循环分别处理递增和递减的星号行,对于刚学编程3周的阶段来说,可读性没问题,完全合格。唯一可以优化的地方是避免重复的嵌套循环代码,但这个写法已经足够清晰,没必要强行简化。
为什么作业要求加elif?
这是典型的基础逻辑训练——老师想让你学会在单一循环中通过分支判断控制输出,而不是拆分两个独立循环。虽然看起来多此一举,但能帮你理解“循环+分支”的组合用法,以后遇到更复杂的逻辑(比如需要在循环中根据不同状态做不同操作)时,就能更快上手。
用for+elif实现的代码示例
把两个循环合并成一个,用if/elif判断当前行属于递增还是递减阶段,控制星号数量:
rows = 6 # 总共有12行:前6行递增,后6行递减 for current_row in range(1, 2 * rows + 1): if current_row <= rows: # 前6行,星号数等于当前行号 star_num = current_row elif current_row > rows: # 后6行,星号数从rows开始递减 star_num = 2 * rows - current_row + 1 # 打印星号行 print("* " * star_num)
运行后输出和你原有代码完全一致:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
逻辑说明:
- 用
range(1, 2*rows+1)生成1到12的行号,覆盖所有需要输出的行 - 前6行(
current_row <=6):星号数随行数增加而增加 - 后6行(
current_row >6):通过2*rows - current_row +1计算递减的星号数,比如第7行对应6个星,第8行对应5个,以此类推 - 用字符串乘法
"* " * star_num替代嵌套循环,代码更紧凑
保留嵌套循环的elif写法(贴合作业要求)
如果你想保留原来的嵌套循环结构,也可以把两个循环的逻辑合并到一个大循环里,用elif控制内部循环的输出:
rows = 6 for i in range(1, 2 * rows + 1): for j in range(1, rows + 2): if i <= rows and j <= i: print("*", end=" ") elif i > rows and j <= 2 * rows - i + 1: print("*", end=" ") print()
不过这个写法可读性不如第一种,只是为了满足“必须用elif”的作业要求,实际开发中更推荐第一种简洁的写法。
内容的提问来源于stack exchange,提问作者Will Harris
相关产品推荐
相关产品推荐

