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