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

如何结合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:35:25