Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでアルファベットのランゴーリーパターンを出力するプログラム


数値 n が与えられたとします。ここでは、n × n サイズの「アルファベット・ランゴリー」を出力するプログラムを作成します。ランゴリーとは、インドの伝統的な装飾模様のことで、床などに描かれる幾何学模様を指します。n は 1 以上 26 以下の範囲内である必要があり、n が 26 の場合は「a」から始まり「z」で終わる模様になります。

例えば、入力が 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--------

解法の考え方

この問題は、パターンを上半分(逆ピラミッド)下半分(正ピラミッド)の2つの部分に分けて考えると、実装がぐっとシンプルになります。各行は「左側のハイフン(余白)」「中央のアルファベット列」「右側のハイフン(余白)」という3つの要素で構成されています。

具体的な手順は以下の通りです。

  • 上半分の出力:i を n-1 から 0 まで 1 ずつ減らしながら、以下の処理を繰り返します。
    • j を 0 から i-1 までループし、「--」を出力します(左側の余白)。
    • j を n-1 から i+1 まで 1 ずつ減らしながら、ASCII コードが j+97 に対応する文字を出力し、末尾に「-」を付けます。
    • j を i から n-1 までループし、ASCII コードが j+97 に対応する文字を出力します。j が n-1 以外の場合は末尾に「-」も出力し、j が n-1 の場合(行の中心)は文字のみを出力します。
    • j を 0 から 2*i-1 までループし、「-」を出力します(右側の余白)。
    • 改行して次の行へ移ります。
  • 下半分の出力:i を 1 から n-1 まで 1 ずつ増やしながら、上半分とまったく同じ手順で各行を出力します。これにより、上下対称の美しい菱形模様が完成します。

実装例

理解を深めるために、実際の Python コードを見てみましょう。ここでは chr() 関数を使用しており、ASCII コード(97 が「a」に対応)から対応するアルファベット文字を取得しています。

def solve(n):
    for i in range(n-1,-1,-1):
        for j in range(i):
            print(end="--")
        for j in range(n-1,i,-1):
            print(chr(j+97),end="-")
        for j in range(i,n):
            if j != n-1:
                print(chr(j+97),end="-")
            else:
                print(chr(j+97),end="")
        for j in range(2*i):
            print(end="-")
        print()
    for i in range(1,n):
        for j in range(i):
            print(end="--")
        for j in range(n-1,i,-1):
            print(chr(j+97),end="-")
        for j in range(i,n):
            if j != n-1:
                print(chr(j+97),end="-")
            else:
                print(chr(j+97),end="")
        for j in range(2*i):
            print(end="-")
        print()

n = 8
solve(n)

入力

8

出力

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

このアルゴリズムの計算量は O(n²) であり、最も長い中央の行は 4n-3 文字になります。n は最大でも 26 であるため、非常に高速かつ効率的に動作します。

  1. Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例

    Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実

  2. 【Python】ループを使わずに数列を出力する方法:再帰呼び出しを活用した実装

    はじめに 本記事では、以下の問題に対する解決策について詳しく解説します。 問題の概要 2つの整数 N と K が与えられたとき、N が 0 より大きい間は N から K を引き続けます。そして N が 0 以下になったら、今度は元の値 N に戻るまで K を足していきます。 入力例 N = 10 K = 4 出力例 10 6 2 -2 2 6 10 アルゴリズムの考え方 N が 0 より大きい間、関数を再帰的に呼び出し続けます(各呼び出しごとに N から K を減算します)。 数値が 0 以下になったら、元の値に戻るまで各呼び出しごとに K を加算します。 加算と減算は同じ1つの関数