【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 图案。

  • 31
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值