打印一个如上图所示的菱形。遇到这样的题目,我们该如何去思考呢?首先这是一个对称的图形,其次,我们不能只看到 * 这个符号,而应该每行都当成空格+ *的这种组合。那么一步一步的发掘该图形的规律。
这里重点是看*个数和前空格这两列的规律,行号可以自由的由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:\untitled\project2\venv\Scripts\python.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
知识兔其实这里可以使用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:\untitled\project2\venv\Scripts\python.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
知识兔