Pythonで浮動小数点数が偶数か奇数かを判定する方法
浮動小数点数が与えられたとき、その数が偶数か奇数かを判定する方法を解説します。整数の場合であれば、最後の桁が2で割り切れるかどうかを確認するだけで簡単に判定できます。しかし、浮動小数点数の場合はそう単純にはいきません。小数部分を持つ数値に対しては、単純に最後の桁を2で割って偶奇を判定することができないからです。
例えば、入力が n = 200.290 の場合を考えてみましょう。最後の桁は「0」で2で割り切れますが、正しい出力は「Odd(奇数)」になります。これは、小数点以下の末尾にある0が必ずしも数値の実質的な値を表していないためです。
解決のための手順
この問題を解決するには、以下の手順に従います。
- 数値を文字列 s に変換します。
- フラグ flag を False で初期化します。
- 文字列の末尾(右端)から先頭に向かって1文字ずつ走査します。
- s[i] が '0' であり、かつ flag が False の場合は、次の反復へ進みます(小数点より後ろの無意味な0をスキップ)。
- s[i] が '.'(小数点)と一致した場合は、flag を True に設定し、次の反復へ進みます。
- s[i] が偶数であれば、「Even」を返します。
- それ以外の場合は「Odd」を返します。
このアルゴリズムのポイントは、小数点以下の末尾の0を無視し、最初に現れる有効な桁の偶奇を判定するところにあります。これにより、200.290 のような数値でも、実質的に意味のある最後の桁「9」(奇数)に基づいて正しく判定できるのです。
それでは、実際の実装を見ながら理解を深めましょう。
サンプルコード
def solve(n):
s = str(n)
flag = False
for i in range(len(s) - 1, -1, -1):
# 小数点より後ろの末尾の0はスキップ
if s[i] == '0' and flag == False:
continue
# 小数点を見つけたらフラグを立てる
if s[i] == '.':
flag = True
continue
# 最初の有効な桁の偶奇を判定
if int(s[i]) % 2 == 0:
return "Even"
return "Odd"
n = 200.290
print(solve(n))入力
200.290
出力
Odd
コードの解説
このコードでは、まず数値を文字列に変換し、文字列の右端から左端に向かって走査を行います。変数 flag は「小数点を通過したかどうか」を追跡する役割を担っています。小数点より後ろにある0は、数値の値に影響しない装飾的なゼロである可能性があるため、それらをスキップします。そして、最初に見つかった有効な数字について偶奇判定を行い、その結果を返します。
この手法を使えば、整数だけでなく浮動小数点数に対しても、直感的かつ正確に偶数・奇数の判定を行うことができます。
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで数値が奇数か偶数かを判定する方法を解説
Pythonで数値が奇数か偶数かを判定する方法 Pythonでは、剰余演算子(%)を使うことで、数値が奇数か偶数かを簡単に判定できます。剰余演算子は「余り演算子」とも呼ばれ、ある数を別の数で割ったときの余りを求めるための演算子です。 判定の考え方はシンプルです。対象の数値を2で割り、その余りを確認します。余りが0であれば偶数、0以外(1)であれば奇数であると判断できます。 サンプルコード no = int(input(enter number)) if no % 2 == 0: print({} is even.format(no)) else: print({} is odd