Python中打印图案

2025年1月5日 | 17 分钟阅读

模式问题在编程中非常常见。这些问题有助于熟悉程序的流程,也有助于理解如何编写程序以获得所需的输出。模式是使用循环打印的。我们通常使用嵌套循环来打印模式。外层循环定义了模式的行数。同时,内层循环定义了我们需要的模式。我们在内层循环中设置条件。在本教程中,我们将看到打印不同类型模式的程序。打印模式的方法可能不止一种,因此无需遵循一种严格的方法。

简单金字塔模式

方法 - 1

代码

输出

* 
* * 
* * * 
* * * * 
* * * * * 

时间复杂度:该方法的时间复杂度是非线性的。我们使用了嵌套循环来打印模式。外层循环将迭代 n 次;因此,时间复杂度将是 O(n)。但是,内层循环将从 0 迭代到 n 次,这使得内层循环的最坏时间复杂度为 O(n)。此程序的总时间复杂度为 O(n2)。

空间复杂度:该方法空间复杂度为 O(1)。我们没有使用任何辅助空间来打印模式。

方法 - 2

我们可以使用列表打印相同的模式,这样可以简化代码。

代码

输出

* 
* * 
* * * 
* * * * 
* * * * * 

时间复杂度:该方法的时间复杂度是线性的,因为我们使用了一个循环来打印模式。因此,使用列表比使用嵌套循环更好。join 函数的时间复杂度为 O(n);但是,总的来说,复杂度将是 O(n) + O(n)。该方法的平均时间复杂度为 O(n)。

空间复杂度:该方法空间复杂度是线性的,因为我们使用列表来存储模式。因此,该方法的空间复杂度为 O(n)

方法 - 3

我们将使用递归方法来打印模式。

代码

输出

* 
* * 
* * * 
* * * * 
* * * * * 

方法 - 4

这次,我们将使用 while 循环来打印模式。

代码

输出

* 
* * 
* * * 
* * * * 
* * * * * 

时间复杂度:该方法的时间复杂度为 O(n ^ 2)。我们使用了嵌套循环来打印模式。

空间复杂度:该方法空间复杂度为 O(1),因为我们没有使用任何额外的空间来存储模式。

旋转模式

现在,我们将翻转模式并设计程序来打印模式。

方法 - 1

代码

输出

            * 
         * * 
      * * * 
   * * * * 
* * * * * 

方法 - 2

现在,我们将看到一种更好的方法来打印之前的模式

在这个模式中,我们必须打印空格(数字_从_基数 - 行号),然后打印行号次星号。这次,我们将使用 while 循环来打印模式。我们将看到可以使用单个 while 循环打印模式,因此不需要嵌套循环。这将把时间复杂度从非线性降低到线性时间复杂度。以下是此方法实现的 Python 代码

代码

输出

           * 
         * * 
      * * * 
   * * * * 
* * * * * 

方法 - 3

我们将使用 for 循环编写之前的程序。

代码

输出

            * 
         * * 
      * * * 
   * * * * 
* * * * * 

打印三角形

方法 - 1

代码

输出

    * 
   * * 
  * * * 
 * * * * 
* * * * * 

数字模式

现在,我们将看到如何使用数字打印模式。

方法 - 1

代码

输出

1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 

方法 - 2

在此模式中,我们不必在每一行都从 1 开始。

代码

输出

1 
2 3 
4 5 6 
7 8 9 10 
11 12 13 14 15 

方法 - 3

在此模式中,我们将使用数字打印一个三角形。

代码

输出

      1 
     1 2 
    1 2 3 
   1 2 3 4 
  1 2 3 4 5

打印字母

模式 - 1

我们将使用字母打印模式。我们将更新字母的 ASCII 码来打印字母模式。使用 ASCII 码的原因是为了递增字符。

代码

输出

A 
B B 
C C C 
D D D D 
E E E E E 

模式 - 2

此程序将连续打印字母,而不是在每一行都从 A 开始。与之前的算法相比,变化在于字符 ASCII 码的递增。在之前的代码中,我们在内层循环完成后,即在外层循环中,递增了代码值。此算法将为每一行递增代码值。在此算法中,我们将在内层循环中递增代码值,从而为每一行的每一列移动到下一个字符。

代码

输出

A 
B C 
D E F 
G H I J 
K L M N O

模式 - 3

在此模式中,我们将打印一个字符三角形。

代码

输出

      A 
     A B 
    A B C 
   A B C D 
  A B C D E 

复杂模式

模式 - 1

此程序分为四部分。

代码

输出

Printing Patterns in Python

模式 - 2

代码

输出

Printing Patterns in Python

模式 - 3

代码

输出

Printing Patterns in Python

模式 - 4

代码

输出

\*******/
*\*****/*
**\***/**
***\*/***
****/****
***/*\***
**/***\**
*/*****\*
/*******\

模式 - 5

代码

输出

4 3 2 1 0 
3 2 1 0 
2 1 0 
1 0 
0 

模式 - 6

代码

输出

1 
7 2 
12 8 3 
16 13 9 4 
19 17 14 10 5 
21 20 18 15 11 6

打印 G 模式

如果我们尝试使用 (行, 列) 矩阵来分析此图像,我们将发现这些过程,其中圆表示模式 G 中星号的位置。在这种情况下,过程是逐列进行的。因此,我们为第一行星号设置第一个 if 条件,该条件表示所有行从 1 到 (n-1) 都将接收星号,而行 0 和 (n-1) 则不会。类似地,我们想要行 = 0 和行 = (n-1) 的第二、第三和第四列中的星号。其余步骤不言而喻,并且从图表的行和列放置中可以清楚看出。

下面是该方法在 Python 中的实现。

代码

输出

Printing Patterns in Python