for j in range(7):
for i in range(j):
print('*',end='')
print()
输出:
*
**
***
****
*****
******
如何把这个三角形掉过来打印呢?
分析一下,最关键的是第一层循环中的range(7)。现在需要一个list,是[7,6,5,4,3,2,1]
for j in [7,6,5,4,3,2,1]:
for i in range(j):
print('*',end='')
print()
*******
******
*****
****
***
**
*
哈哈,实现了。虽然直接穷举list,显得有点笨。
参考了这位同学的文章https://blog.csdn.net/CaoMei_HuaCha/article/details/80873917,可以将上述的list改写成range(7,0,-1)
那如何输出下图呢?
先做个分析
1. 等腰直角三角形的两边都是5个*
2.对于每一行而言,第一行是5个*;第二行,只有第一列和最后一列有*……最后一行只有一个*
3. 一般的,对于第i行(1 < i < N),第一列打印*,中间打印i-2个*(这点用循环实现),最后打印一个*。对于第N行和最后一行,直接打印*
def print_tri(num):
if num < 3:
print('We can not print this triangle.')
else:
for i in range(num):
print('*',end='')
print()
for row in range(num-1,1,-1):
print('*',end='')
for j in range(1,row-1):
print(' ',end='')
print('*')
print('*')
print_tri(5)
计算结果:
*****
* *
* *
**
*
成功啦!开心。
看了别人的解答,原来还有更简洁的办法,太厉害!
我麻烦的地方,是打印重复东西的时候,用了for循环。其实可以直接用(要打印的东西)*n来解决。
于是,修改一下代码:
def print_tri(num):
if num < 3:
print('We can not print this triangle.')
else:
print('*'*num)
for row in range(num-1,1,-1):
print('*'+' '*(row-2)+'*')
print('*')
print_tri(5)
得到了同样的答案:
*****
* *
* *
**
*
好棒!
优选答案用的是while循环https://mp.weixin.qq.com/s/1VVWI-JKu-fwdcpkmonIgA,我觉得用for循环也很棒!
总结下:
1. 用range构建一个逆序的形式:range(大的数字,小的数字,-1)
2.处理(打印)相同的内容,可以考虑*N
3. 遇到问题,一定要观察和分析。