Bootstrap

【Python】字母 Rangoli 图案

一、题目

You are given an integer N. Your task is to print an alphabet rangoli of size N. (Rangoli is a form of Indian folk art based on creation of patterns.)

Different sizes of alphabet rangoli are shown below:

# size 3

----c----
--c-b-c--
c-b-a-b-c
--c-b-c--
----c----

 # size 5

--------e--------
------e-d-e------
----e-d-c-d-e----
--e-d-c-b-c-d-e--
e-d-c-b-a-b-c-d-e
--e-d-c-b-c-d-e--
----e-d-c-d-e----
------e-d-e------
--------e--------

 # size 10

------------------j------------------
----------------j-i-j----------------
--------------j-i-h-i-j--------------
------------j-i-h-g-h-i-j------------
----------j-i-h-g-f-g-h-i-j----------
--------j-i-h-g-f-e-f-g-h-i-j--------
------j-i-h-g-f-e-d-e-f-g-h-i-j------
----j-i-h-g-f-e-d-c-d-e-f-g-h-i-j----
--j-i-h-g-f-e-d-c-b-c-d-e-f-g-h-i-j--
j-i-h-g-f-e-d-c-b-a-b-c-d-e-f-g-h-i-j
--j-i-h-g-f-e-d-c-b-c-d-e-f-g-h-i-j--
----j-i-h-g-f-e-d-c-d-e-f-g-h-i-j----
------j-i-h-g-f-e-d-e-f-g-h-i-j------
--------j-i-h-g-f-e-f-g-h-i-j--------
----------j-i-h-g-f-g-h-i-j----------
------------j-i-h-g-h-i-j------------
--------------j-i-h-i-j--------------
----------------j-i-j----------------
------------------j------------------

The center of rangoli has the first alphabet letter a, and the boundary has the Nth alphabet letter (in alphabetical order).

Function Description

Complete the rangoli function in the editor below.

Rangoli has the following parameters:

  • int size : the size of the rangoli

Returns

  • string: asingle string made up of each of the lines of the rangoli separated by a newline character (\n)

Sample Input

5

Sample Output

--------e--------
------e-d-e------
----e-d-c-d-e----
--e-d-c-b-c-d-e--
e-d-c-b-a-b-c-d-e
--e-d-c-b-c-d-e--
----e-d-c-d-e----
------e-d-e------
--------e--------

二、代码

def print_rangoli(size):
    column = 4 * size - 3
    letters = 'abcdefghijklmnopqrstuvwxyz'

    for i in range(size):
        str_list = list(letters[size - j - 1] for j in range(i + 1))
        str_list += list(letters[size - j] for j in range(i, 0, -1))
        string = '-'.join(str_list)
        print(string.center(column, '-'))

    for i in range(size - 1, 0, -1):
        str_list = list(letters[size - j - 1] for j in range(i))
        str_list += list(letters[size - j] for j in range(i - 1, 0, -1))
        string = '-'.join(str_list)
        print(string.center(column, '-'))


if __name__ == '__main__':
    n = int(input())
    print_rangoli(n)

三、解读

题目要求打印由字母组成的 rangoli 图案。

column = 4 * size - 3

计算 rangoli 每一行的总长度。由于是中心对称图案,总长度是 4 * size - 3。

for i in range(size):
    str_list = list(letters[size - j - 1] for j in range(i + 1))
    str_list += list(letters[size - j] for j in range(i, 0, -1))
    string = '-'.join(str_list)
    print(string.center(column, '-'))

1、使用 for 循环,从 0 到 size - 1 ,用于生成 rangoli 图案的上半部分。

2、使用列表推导式和 list() 函数创建一个包含从 letters 中选定字母的列表 str_list。这个列表包含从 letters[size - 1] 到 letters[0] 的字母,但只包含 i + 1 个元素。

3、将 str_list 与另一个列表推导式的结果连接起来,这个推导式从 letters[size - 2] 到 letters[0],步长为 -1, 创建了字母序列的下半部分。

4、使用 join() 方法将 str_list 中的字母用连字符 '-' 连接起来,形成 rangoli 图案的一行。

5、使用 center() 方法将 string 在总长度 column 的行中居中对齐,使用 '-' 填充空白位置,然后打印出来。

for i in range(size - 1, 0, -1):
    str_list = list(letters[size - j - 1] for j in range(i))
    str_list += list(letters[size - j] for j in range(i - 1, 0, -1))
    string = '-'.join(str_list)
    print(string.center(column, '-'))

1、另一个 for 循环,从 size - 1 递减到 1 ,用于生成 rangoli 图案的下半部分。

2、与第一个循环相同,创建字母行。

3、与第一个循环相同,将字母序列连接成一个字符串。

4、与第一个循环相同,打印图案。

if __name__ == '__main__':
    n = int(input())
    print_rangoli(n)

主程序入口。先读取用户输入的整数n,然后调用 print_rangoli 函数并传入 n 作为参数,打印字母 rangoli 图案。

;