直角三角形星星有四种情况分别是,如下图所示,假设行数等于列数
其中(1)和(2)属于一种情况,(3)与(4)属于另一种情况
首先说(1)和(2):
这种三角形星星只需要打印星星即可,然后观察可以知道
图(1)是第1行打印1个星星,第2行打印2个星星,以此类推
# 定义行变量,从1开始计数
row = 1
# 循环5次
while row <= 5:
print("*" * row) # 第i行打印i个星星
row += 1
print("end")
图(2)类似,只不过变成第1行打印5个星星,第2行打印4个星星,以此类推第i行打印n-i+1个,n为行数,代码读者可以自行练习这里就省略了。
接下来说(3)和(4):
这种三角形星星即要打印空格又要打印星星,观察可知
图(3)是第1行打印0个空格和5个星星,第2行是打印1个空格和4个星星,以此类推
# 定义行变量,从1开始计数
row = 1
while row <= 5:
print(" " * (row-1) + "*" * (6-row)) # 第i行打印i-1个空格和6-i个星星,加起来等于行数5
row += 1
print("end")
图(4)类似,只不过变成第1行打印4个空格和1个星星,第2行打印3个空格和2个星星,以此类推第i行打印n-i个空格和i个星星,加起来等于行数n,代码读者可以自行练习。
不使用字符串拼接打印就有点类似C等其他语言的思路,就是一个一个的打印,那么就需要变化一下,首先来介绍一下print函数
在默认情况下,print
函数输出内容之后,会自动在内容末尾增加换行
如果不希望末尾增加换行,可以在 print
函数输出内容的后面增加 , end=""
其中 ""
中间可以指定 print
函数输出内容之后,继续希望显示的内容
语法格式如下:
# 向控制台输出内容结束之后,不会换行
print("*", end="")
# 单纯的换行
print("")
end=""
表示向控制台输出内容结束之后,不会换行
有了以上知识后首先说图(1)和(2)
由于是从左到右一个字符一个字符的打印,这个时候就需要引入列变量了
图(1)第1行打印1个星星,就是列变量计数的内层循环只循环1次,第2行打印2个星星就是列变量计数的内层循环循环2次,以此类推
# 定义行变量,从1开始计数
row = 1
while row <= 5:
# 定义列变量,从1开始计数
col = 1
# 第i行,列循环i次
while col <= row:
print("*", end="")
col += 1
# 每打印完1行换行
print("")
row += 1
print("end")
图(2)类似,第1行打印5个星星,就是列变量计数的内层循环循环5次,第2行打印4个星星就是列变量计数的内层循环循环4次,以此类推第i行的内层循环循环n+1-i次,其中n为行数,代码读者可以自行练习。
图(3)和(4)就比较麻烦,因为既要打印空格又要打印星星
我们可以这么来看图(3)和(4),它们都是打印5行,每行有5列,对于每一行来说先打印空格然后打印星星,空格和星星的个数加起来等于5,一共打印25下。
我们可以先简化问题,打印5行5列,共25个星星看一下
# 定义行变量,从1开始计数
row = 1
while row <= 5: #打印5行
col = 1 # 定义列变量,从1开始计数
while col <= 5: # 每行打印5列
print("*", end="")
col += 1
print("") # 每打印完1行后换行
row += 1
print("end")
有了以上程序之后我们就可以在此基础上修改
我们的目标是第1行先打印0个空格然后打印5个星星,第2行先打印1个空格然后打印4个星星,可以在内层循环中用if来判断打印几个空格和几个星星, 第i行就是i-1个空格和6-i个星星,空格和星星的个数加起来等于列数n
# 定义行变量,从1开始计数
row = 1
while row <= 5: #打印5行
col = 1 # 定义列变量,从1开始计数
while col <= 5: # 每行打印5列
# 第i行打印i-1个空格和6-i个星星
if col <= (row - 1):
print(" ", end="")
else:
print("*", end="")
col += 1
print("") # 每打印完1行后换行
row += 1
print("end")
图(4)类似,第1行打印4个空格和1个星星,第2行打印3个空格和2个星星,以此类推,第i行打印n-i个空格和i个星星,n等于列数 ,代码读者可以自行练习。