例子:循环语句--打印一个菱形

 打印一个如上图所示的菱形。遇到这样的题目,我们该如何去思考呢?首先这是一个对称的图形,其次,我们不能只看到 * 这个符号,而应该每行都当成空格+ *的这种组合。那么一步一步的发掘该图形的规律。

 这里重点是看*个数和前空格这两列的规律,行号可以自由的由range()函数来控制,7-*个数=2*前空格,这个公式便是该例子的核心算法。找到对称的中心点。

 1 # coding=gbk
 2 # 此处不考虑*的间距问题,一个*即为边长1
 3 line = int(input("请输入该菱形的边长:"))
 4 a = 2 * line - 1
 5 # a即为菱形中间的对角线长度
 6 for i in range(-a//2,a//2+1):
 7 # 该range()函数的取值范围是根据行号来裁定的,中间行号定为0
 8     if i < 0:
 9         print(' '*(-i) + '*'*(2 * i + a))
10     else:
11         print(' '*i + '*'*(a - 2 * i))
12 #################################################
13 D:untitledproject2venvScriptspython.exe D:/untitled/project2/day1/lingxing.py
14 请输入该菱形的边长:6
15       
16      *
17     ***
18    *****
19   *******
20  *********
21 ***********
22  *********
23   *******
24    *****
25     ***
26      *
27 
28 Process finished with exit code 0

上图中个代码是分为上下两部分打印的,其实这里可以用一个公式来输出上下两部分的结果,因为i取值有正负之分,所以才有了if…else…,我们可以新起一个变量l,让l一直保持为正数。即8~11行代码可以写成如下所示:

1     if i < 0:
2         l = -i
3     else:
4         l = i
5     print(' '*l + '*'*(a - 2 * l))

其实这里可以使用python中的绝对值函数abs(),abs(x),x可以是整数、浮点数和复数。函数返回x(数字)的绝对值,如果参数是一个复数,则返回它的大小。

 1 # coding=gbk
 2 # 此处不考虑*的间距问题,一个*即为边长1
 3 line = int(input("请输入该菱形的边长:"))
 4 a = 2 * line - 1
 5 # a即为菱形中间的对角线长度
 6 for i in range(-a//2,a//2+1):
 7 # 该range()函数的取值范围是根据行号来裁定的,中间行号定为0
 8     print(' '*abs(i) + '*'*(a - 2*abs(i)))
 9 ############################################
10 D:untitledproject2venvScriptspython.exe D:/untitled/project2/day1/lingxing.py
11 请输入该菱形的边长:5
12      
13     *
14    ***
15   *****
16  *******
17 *********
18  *******
19   *****
20    ***
21     *
22 
23 Process finished with exit code 0
原文地址:https://www.cnblogs.com/linfengs/p/11635267.html