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

如何控制循环范围?奇数数量三角形打印数量不符问题解析

奇数数量三角形打印异常的原因解析

问题场景

要实现一行内先打印正三角形、再打印倒三角形的组合图案,初始代码能输出正确的单个正倒三角样式,但整体三角形数量不符合预期;修改后将j循环范围改为b/2+1,仅在输入偶数数量的三角形时有效,输入奇数(如9)时只能打印8个,疑惑该问题是否由int(b/2)的强制转换导致。

初始代码

a = int(input("enter the height of triangle: "))
b =int(input("how many triangles you want??"))
for i in range(1 ,a+1):
    print(" "*(a+1 -i), end="")
    for j in range(1,b+1):
        print("* "*i,end="")
        print(" ",end="")
        print("* "*(a+1-i),end="")
        print(" ",end=" ")
    print()    

修改后代码

a = int(input("enter the height of triangle: "))
b =int(input("how many triangles you want??"))
c = int(b/2)
for i in range(1 ,a+1):
    print(" "*(a+1 -i), end="")
    for j in range(1,c+1):
        print("* "*i,end="")
        print(" ",end="")
        print("* "*(a+1-i),end="")
        print(" ",end=" ")
    print()    

问题原因解析

你的代码逻辑是每次j循环会输出1个正三角形 + 1个倒三角形,也就是2个独立的三角形。当你想输出总共b个三角形时:

  • 若b为偶数,b/2是整数,int(b/2)得到的循环次数刚好能输出2*(b/2)=b个三角形,符合预期;
  • 若b为奇数(如9),b/2的结果是浮点数(4.5),而int()函数会直接截断小数部分,仅保留整数位(4),此时循环4次只能输出4*2=8个三角形,比预期的9个少1个。

本质是int()对浮点数的截断特性,导致奇数输入时循环次数不足,丢失了最后1个三角形的打印机会。

修正思路(可选)

如果要兼容奇数数量的需求,可以改用整数除法c = b // 2(效果和int(b/2)一致,但更符合Python整数运算习惯),然后在循环结束后判断b % 2 == 1,如果是奇数,则额外打印1个正三角形(或根据需求的最后一个三角形类型)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:09:54