python经典百题之打印菱形图案

题目:打印出如下图案(菱形)

方法一:使用循环嵌套

思路:

  1. 打印上半部分菱形,从第一行到中间行,行数递增,每行打印奇数个 *,实现方式为先打印空格,再打印 *;
  2. 打印下半部分菱形,从中间行到最后一行,行数递减,每行打印奇数个 *,实现方式同上。

代码如下:

python 复制代码
for i in range(1, 8, 2):
    print(" " * ((7-i)//2) + '*' * i)
for i in range(5, 0, -2):
    print(" " * ((7-i)//2) + '*' * i)

优点:代码简洁易懂,逻辑清晰,容易实现。

缺点:代码可读性不好,不容易扩展。

方法二:使用函数递归

思路:

  1. 定义一个函数 print_diamond(n),表示打印行数为 n 的菱形。
  2. 如果 n = 1,则只需要打印一个 *;
  3. 否则,先打印上半部分菱形,递归调用 print_diamond(n-2),再打印下半部分菱形。

代码如下:

python 复制代码
def print_diamond(n):
    if n == 1:
        print("*")
    else:
        print(" " * ((n-1)//2) + '*' * n)
        print_diamond(n-2)
        print(" " * ((n-1)//2) + '*' * n)

print_diamond(7)  

优点:使用递归思想,代码简洁可读性好,易于扩展。

缺点:由于使用了递归,可能会导致函数调用栈溢出。

方法三:使用列表推导式

思路:

  1. 使用列表推导式生成一个包含所有菱形行的列表 diamond,行数为 1 到 7;
  2. 使用循环遍历 diamond,打印每一行。

代码如下:

python 复制代码
diamond = [" " * ((7-i)//2) + '*' * i for i in range(1, 8, 2)] + \
          [" " * ((7-i)//2) + '*' * i for i in range(5, 0, -2)]
for row in diamond:
    print(row)

优点:代码简洁易懂,可读性好,易于扩展。

缺点:代码可能不够直观,需要理解列表推导式的使用。

相关推荐
databook12 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar13 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805114 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_14 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机20 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机21 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i21 小时前
drf初步梳理
python·django
每日AI新事件21 小时前
python的异步函数
python