指定した範囲内の奇数かつ回文となる数をすべて見つけるPythonプログラム
指定された範囲内に存在する「奇数」かつ「回文」である数をすべて見つけたい場合、再帰処理を使わずに、リスト内包表記と「%」演算子を組み合わせることで簡単に実現できます。
回文とは、左から右に読んでも、右から左に読んでも同じになる文字列のことです。たとえば「121」や「55」などが該当します。
以下に具体的な実装例を示します。
サンプルコード
my_list = []
lower_limit = 5
upper_limit = 189
print("下限の値は : ")
print(lower_limit)
print("上限の値は : ")
print(upper_limit)
my_list = [x for x in range(lower_limit,upper_limit+1) if x%2!=0 and str(x)==str(x)[::-1]]
print(str(lower_limit) + " から " + str(upper_limit) + " の間で、奇数かつ回文である数は次の通りです : ")
print(my_list)出力結果
下限の値は : 5 上限の値は : 189 5 から 189 の間で、奇数かつ回文である数は次の通りです : [5, 7, 9, 11, 33, 55, 77, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181]
コードの解説
- まず空のリストと、範囲を示す下限値・上限値を定義します。
- 下限値と上限値をコンソールに表示します。
- リスト内包表記を使い、範囲内の各値について「2で割った余りが0でないか(=奇数かどうか)」を判定します。
- 次に、その数を文字列に変換し、スライス記法
[::-1]を使って反転させた文字列と元の文字列を比較することで、回文かどうかを確認します。 - 両方の条件を満たす要素だけが新しいリストに格納されます。
- 最終的なリストがコンソールに出力されます。
この方法のポイントは、str(x)[::-1] というスライス記法です。これは文字列を逆順にするPythonのイディオムであり、これにより数値を文字列として扱うだけで簡潔に回文判定が行えます。再帰関数を定義する必要がないため、コードがシンプルになり、可読性も高まります。
-
Pythonで二分探索木(BST)から指定範囲外のノードをすべて削除する方法
問題の概要二分探索木(BST)と2つの値 low、high が与えられたとき、[low, high] の範囲(境界値を含む)に該当しないノードをすべて木から削除するプログラムを作成します。例として、次のようなBSTを考えてみましょう。ここで low = 7、high = 10 とした場合、範囲外のノード(5 や 1 など)が削除され、出力は次のようになります。解法のアプローチこの問題は再帰を利用することで簡潔に解くことができます。手順は以下の通りです。関数 solve() を定義します。引数は root(現在のノード)、low、high の3つです。root が null(空)の場合は何もせず
-
指定した範囲内のすべての素数を出力するPythonプログラム
この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 ある区間が与えられたとき、その範囲内に含まれるすべての素数を求めて出力する必要があります。 ここでは、素数の基本的な定義に基づいた全探索(ブルートフォース)によるアプローチを紹介します。素数とは、「1とその数自身のみを約数として持ち、それ以外の数を約数に持たない自然数」のことです。 この定義に基づき、各数値が素数の条件を満たしているかどうかを判定し、条件が真(True)と評価されるたびに出力処理を行います。 それでは、実際の実装例を見ていきましょう。 実装例 start = 1 end = 37 for val in