举例1:打印下图
*****
*****
*****
*****
*****
# 法1
for i in range(5):
print("*"*5)
结果:
*****
*****
*****
*****
*****
# 法2
for i in range(5): # 外层循环控制行数
for j in range(5): # 内层循环用来限制打印星星的个数
print("*", end="") # print后面默认是换行符,为了防止换行,使用空格
print()
结果:
*****
*****
*****
*****
*****
举例2:
*******
*****
***
*
解析:
从行来看:一共四行,也就是for i in range(4):
第一行:7个星星
第二行:5个星星+两个空格(左右两边各一个,2*1)
第三行:3个星星+4个空格(左右两边各2个,2*2)
第四行:1个星星+6个空格(左右两边各3个,2*3)
规律:星星数+空格数=7
也可以这样来看,只看左边打印几个空格,不用看右边,因为打完星星,后面的默认输出就是空格。
上面就会变成:
第一行:7个星星
第二行:5个星星+1个空格(左右两边各一个,2*1)
第三行:3个星星+2个空格(左右两边各2个,2*2)
第四行:1个星星+3个空格(左右两边各3个,2*3)
用print来写:
第一行:print('*'*7) ——————————打印7个*
第二行:print(' '+(7-(2*1)*'*')) # +为拼接符,也可用,
先打印一个空格,然后打印*,
*的个数=7-空格数
此时空格数为2*1,也就是,左右两边各一个
第三行:print(' '*2+(7-(2*2))*'*') 先打印两个空格,再打*
第四行:print(' '*3+(7-(2*3))*'*') 先打印3个空格,再打*
此时,第一行可以写成:print(' '*0+(7-(2*0))*'*')
规律:
print(' '*i+(7-2*i)*"*")
# 法1
for i in range(4):
print(' '*i+(7-2*i)*"*")
# 法2
n = 0
while n < 4:
print(" " * n + (7 - 2 * n) * "*")
n += 1
结果:
*******
*****
***
*
举例3:
*
***
*****
*******
解析:
第一行:两边各3个空格+1个星星
第二行:两边各2个空格+3个星星
第三行:两边各1个空格+5个星星
第四行:两边各0个空格+7个星星
规律:
第一行:print(' '*3, (7-(2*3))*'*') # ,为拼接符,改成+也可以
第二行:print(' '*2, (7-(2*2))*'*')
第三行:print(' '*1, (7-(2*1))*'*')
第四行:print(' '*0, (7-(2*0))*'*')
规律:
星星个数+空格个数=7
左边空格个数1-4行依次为:3 2 1 0
可以用range反向走起
for i in range(3,-1,-1):
结果:3 2 1 0正好对应空格数
所以规律:
print(' '*i, (7-2*i)*'*')
# 法1
for i in range(3, -1, -1):
print(' '*i+(7-2*i)*'*')
# 法2
n = 3
while n >= 0:
print(' ' * n + (7 - n * 2) * '*')
n -= 1
# 法3 # 不推荐,range那还可以做改进
for i in range(4):
print(' '*(3-i)+(7-((3-i)*2))*'*')
结果:
*
***
*****
*******
延申:
range从反向、正向举例
for i in range(3, -1, -1): # 左闭右开
print(i)
结果:
3
2
1
0
for i in range(4):
print(i)
结果:
0
1
2
3