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

【Python入門】文字列が回文か対称かを判定するプログラムの書き方

文字列が回文(パリンドローム)であるか、あるいは左右対称であるかを判定したい場面は、プログラミング学習においてよくあります。本記事では、「while」文を使った回文判定用の関数と、「while」文および「if」文を組み合わせた対称性チェック用の関数をそれぞれ定義し、実際の動作を確認する方法を解説します。

回文と対称性の違い

回文とは、左から右に読んでも、右から左に読んでも同じ値になる数値や文字列のことです。つまり、文字列の先頭と末尾から順に対応するインデックスの値がすべて一致します。一方、対称性とは、文字列を中央で分割したときに、前半部分と後半部分が一致する性質を指します。

サンプルコード

以下に、回文判定と対称性判定を行うPythonプログラムの実装例を示します。

def check_palindrome(my_str):
    mid_val = (len(my_str)-1)//2
    start = 0
    end = len(my_str)-1
    flag = 0
    while(start<mid_val):
        if (my_str[start] == my_str[end]):
            start += 1
            end -= 1
        else:
            flag = 1
            break
    if flag == 0:
        print("The entered string is palindrome")
    else:
        print("The entered string is not palindrome")

def check_symmetry(my_str):
    n = len(my_str)
    flag = 0
    if n%2:
        mid_val = n//2 + 1
    else:
        mid_val = n//2
    start_1 = 0
    start_2 = mid_val
    while(start_1 < mid_val and start_2 < n):
        if (my_str[start_1] == my_str[start_2]):
            start_1 = start_1 + 1
            start_2 = start_2 + 1
        else:
            flag = 1
            break
    if flag == 0:
        print("The entered string is symmetrical")
    else:
        print("The entered string is not symmetrical")

my_string = 'phphhphp'
print("The method to check a palindrome is being called...")
check_palindrome(my_string)
print("The method to check symmetry is being called...")
check_symmetry(my_string)

実行結果

The method to check a palindrome is being called...
The entered string is palindrome
The method to check symmetry is being called...
The entered string is not symmetrical

コードの解説

回文判定:check_palindrome関数

  • 「check_palindrome」という名前の関数を定義し、引数として文字列を受け取ります。
  • 文字列の長さを2で切り捨て除算して、中間位置(mid_val)を算出します。
  • 比較用の開始位置「start」に0を、終了位置「end」に最後の要素のインデックスを代入します。
  • 判定結果を保持するための変数「flag」に0を設定します。
  • whileループの中で、start位置とend位置の文字が一致していれば、startを1増やし、endを1減らして次のペアへ進みます。
  • 文字が一致しなかった場合は、flagに1を代入してループを抜けます。
  • 最終的にflagが0のままなら回文、1なら回文ではないと判定して結果を出力します。

対称性判定:check_symmetry関数

  • 「check_symmetry」という名前の関数を定義し、引数として文字列を受け取ります。
  • 文字列の長さを変数nに格納します。
  • 長さnを2で割った余りが0でない(奇数の場合)は、中間位置mid_valを「n//2 + 1」に調整します。
  • 前半部分の開始位置start_1に0を、後半部分の開始位置start_2に中間位置を代入します。
  • もう一つのwhileループで、前半と後半の対応する文字を順番に比較し、一致すれば両方の位置を1ずつ進めます。
  • 不一致が見つかった場合はflagに1を代入してループを終了します。
  • flagが0であれば文字列は対称、そうでなければ非対称と判定します。

まとめ

このように、while文によるインデックス操作を活用することで、スライスなどの高度な機能を使わなくても、回文判定と対称性判定をシンプルに実装できます。文字列操作の基礎固めとして、ぜひご自身でもコードを書いて動作を確認してみてください。

  1. 文字列が空かどうかをチェックするPythonプログラム

    この記事では、与えられた文字列が空であるかどうかを判定するための解決策とアプローチについて解説します。 問題文 文字列が入力として与えられたとき、その文字列が空(空文字列)であるかどうかを判定する必要があります。 Pythonの文字列はイミュータブル(変更不可)な性質を持っているため、文字列に対して何らかの操作を行う際には注意して扱う必要があります。 ここでは、上記の問題を解決するための2つのアプローチを紹介します。 len()メソッドを使用する方法 等価演算子(==)を使用する方法 アプローチ1:len()メソッドを使う方法 len()関数で文字列の長さを取得し、その長さが0であれば空文

  2. Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法

    本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列