核心代码就是print(" "*abs(4-n), "*"*(2*(4-abs(4-n))-1)),需要先确定当前行空格个数,再确定*符号的个数。

'''------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:编写编写函数fun,其功能为打印如下图所示图形。
   *
  ***
 *****
*******      
 *****
  ***
   *
要求:要求使用abs()。
      编写函数中包含输出语句,直接打印表达式的结果。

---------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main和其它函数中的
      任何内容,仅在函数的注释标志之间填入所编写的若干语句。
------------------------------------------------------'''


def fun(n):
    # **********Program**********
    print(" "*abs(4-n), "*"*(2*(4-abs(4-n))-1))
    # **********  End  **********


def main():
    for index in range(1, 8):
        fun(index)


if __name__ == '__main__':
    main()

如果觉得上面的方法复杂,可以使用下面方法7行菱形

for i in range(-3, 4):
        j = abs(i)
        #先是j个空格,然后打印(7-2j)个* ,后面的都是空格
        print(' '*j+'*'*(7-2*j))

如果是9行

for i in range(-4,5):
    j = abs(i)
    #先是j个空格,然后打印(9-2j)个* ,后面的都是空格
    print(' '*j+'*'*(9-2*j))   

参考:
使用Python打印一些图形,主要是找到循环规律 - Wily的博客 - CSDN博客
python打印菱形和对顶三角形 - chen的博客 - CSDN博客