Pythonで文字列内のミラー文字を検索する方法【初心者向け解説】
ユーザーが入力した文字列と位置(ポジション)が与えられたとき、その位置から文字列の末尾までの文字を、アルファベット順を反転させた「ミラー文字」に変換するプログラムを作成します。この操作では、「a」→「z」、「b」→「y」、「c」→「x」、「d」→「w」のように、アルファベットの最初の文字が最後の文字に対応する形で置き換えを行います。
入力: p = 3 入力文字列 = python 出力: pygslm
上記の例では、3番目の位置以降の文字「t」「h」「o」「n」が、それぞれ逆順のアルファベット「g」「s」「l」「m」に変換されていることがわかります。先頭から指定位置までは元の文字列がそのまま維持されます。
アルゴリズム
ステップ1: 文字列と、ミラー変換を開始する位置を入力として受け取る。 ステップ2: アルファベットを逆順に並べた文字列を作成する。 ステップ3: 結果を格納するための空の文字列を用意する。 ステップ4: 指定された位置までの各文字を走査し、この部分は元の文字列のまま変更しない。 ステップ5: その位置から文字列の末尾まで、アルファベットを逆順に対応させて変換する。 ステップ6: 変換後の文字列を返す。
サンプルコード
# Python program to find mirror characters in string
def mirror(str1, n):
# アルファベットを逆順に並べた文字列を作成
alphaset = "zyxwvutsrqponmlkjihgfedcba"
l = len(str1)
# 指定位置までは元の文字列を維持し、
# それ以降はアルファベットを逆順に対応させて変換
result = ""
for i in range(0, n):
result = result + str1[i];
for i in range(n, l):
result = (result +
alphaset[ord(str1[i]) - ord('a')]);
return result;
# ドライバー関数
str1 = input("Enter the string ::>")
n = int(input("Enter the position ::>"))
result = mirror(str1, n - 1)
print("The Result ::>",result)
コードのポイント解説
このプログラムの核となるのは、逆順のアルファベット文字列 alphaset を活用する部分です。ord(str1[i]) - ord('a') という計算により、対象の文字がアルファベットの何番目かを求め、そのインデックスを使って alphaset から対応するミラー文字を取得しています。例えば「a」ならインデックス0となり、「z」が対応します。
なお、ユーザー入力の位置は1始まりで受け付けるため、関数呼び出し時に n - 1 として0始まりのインデックスに変換している点にも注目してください。
実行結果
Enter the string ::> python Enter the position ::> 3 The Result ::> pygslm
-
Pythonで文字列内の重複文字をすべて検索する方法を解説
このチュートリアルでは、Pythonを使って文字列内に含まれるすべての重複文字を見つける方法を学びます。Pythonには複数のアプローチがあるので、それぞれ順番に見ていきましょう。 今回作成するプログラムの目的は、文字列の中に存在する重複した文字を抽出することです。例えば、文字列 tutorialspoint を入力すると、プログラムは t o i を出力します。つまり、文字列内で出現回数が2回以上の文字をすべて見つける、という処理になります。それでは始めましょう。 モジュールを使わずに書くプログラム 外部モジュールを一切使わず、Python標準の機能だけで目的を達成する方法を紹介します。まず
-
Pythonで文字のリストを文字列に変換する方法を解説
Pythonでは、リスト内の個々の要素をひとつの文字列にまとめたい場面がよくあります。たとえば、データを保存したり送信したりする際に必要となるシリアライズ(直列化)の処理では、このような変換が非常に役立ちます。具体的には、次のような変換を指します。[h, e, l, l, o, , w, o, r, l, d] → hello worldjoinメソッドを使った変換Pythonには、このような変換を実現するためのjoin()メソッドが標準で用意されています。joinメソッドは、区切り文字(デリミタ)として使う文字列に対して呼び出し、引数に渡したリストの各要素を連結します。今回は各文字をつなげ