2n-1行でダイヤモンドパターンを表示するPythonプログラム
数値 n が与えられたとき、アスタリスク(*)を使って 2n−1 行からなるダイヤモンド(ひし形)パターンを描くことを考えます。1 行目から n 行目まではアスタリスクの数が 1 個ずつ増えていき、その後は n−1 個から 1 個へと減少していきます。
たとえば、入力が n = 5 の場合、出力は次のようになります。
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
解き方のアプローチ
この問題は、次の手順で解くことができます。
- i を 1 から n まで 1 ずつ増やしながら繰り返します。
- 「* 」というブロックを i 回繰り返した文字列を作成し、各行全体が (2×n−1) 文字の幅になるように中央揃えで出力します。
- 続けて、i を n−1 から 1 まで 1 ずつ減らしながら繰り返します。
- 同じ要領で「* 」を i 回繰り返した文字列を中央揃えで出力します。
Pythonでの実装例
それでは、実際のコードを見てみましょう。
def solve(n):
for i in range(1, n+1):
print(('* '*i).center(2*n-1))
for i in range(n-1, 0, -1):
print(('* '*i).center(2*n-1))
n = 10
solve(n)
ポイント解説:center() メソッド
このコードの鍵となっているのは、Python の文字列メソッド str.center(width) です。このメソッドは、指定した幅の中で文字列を中央に配置し、余った左右のスペースを半角空白で自動的に埋めてくれます。そのため、空白の個数を手動で計算して追加する必要がなく、非常にシンプルなコードでダイヤモンド形状を実現できます。
また、'* '*i という記述は Python の文字列の繰り返し機能を利用したもので、「* 」を i 回連結した文字列を生成します。増加ループと減少ループの 2 つの for 文を組み合わせることで、上下対称の美しいダイヤモンドパターンが完成します。
入力
10
出力
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
* * *
* *
*
-
Pythonで指定されたインデックスに基づいて文字列をシャッフルする方法
文字列 s とインデックスのリスト ind が与えられ、両者は同じ長さであるとします。文字列 s は、位置 i にある文字が最終的な文字列内の ind[i] の位置へ移動するようにシャッフルされます。このとき、シャッフル後の最終的な文字列を求める必要があります。例えば、入力が s = ktoalak、ind = [0,5,1,6,2,4,3] の場合、出力は kolkata となります。解決手順この問題を解くには、以下の手順に従います。fin_str を s と同じサイズのリストとして作成し、0で初期化するs 内の各インデックス i と各文字 v に対して、次の操作を行うfin_str[ind
-
Pythonによるデータ分析と可視化入門!pandas・matplotlibの使い方を解説
このチュートリアルでは、Pythonのpandasやmatplotlibなどのモジュールを使ったデータ分析と可視化の方法を学びます。Pythonはデータ分析に非常によく適した言語です。まずは以下のコマンドでpandasとmatplotlibをインストールしましょう。 pip install pandas pip install matplotlib インストールが完了すると成功メッセージが表示されます。まずpandasについて学び、その後でmatplotlibを見ていきましょう。 pandasとは pandasはPythonのオープンソースライブラリで、データ分析のための豊富なツールを提供し