如何控制循环范围?奇数数量三角形打印数量不符问题解析
奇数数量三角形打印异常的原因解析
问题场景
要实现一行内先打印正三角形、再打印倒三角形的组合图案,初始代码能输出正确的单个正倒三角样式,但整体三角形数量不符合预期;修改后将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
相关产品推荐
相关产品推荐

