Pythonで完全平方数かつ桁の合計が10未満の数を範囲内から検索する方法
指定した範囲の中から、「完全平方数(ある整数の2乗になっている数)」であり、かつ「各桁の数字の合計が10未満」である数値をすべて検索したい場合、Pythonではリスト内包表記を使うことで簡潔に実装できます。
本記事では、その具体的なコード例と動作の仕組みをわかりやすく解説します。
サンプルコード
lower_limit = int(input("下限を入力してください: "))
upper_limit = int(input("上限を入力してください: "))
my_list = []
my_list = [x for x in range(lower_limit, upper_limit + 1) if (int(x**0.5))**2 == x and
sum(list(map(int, str(x)))) < 10]
print("結果は次の通りです: ")
print(my_list)実行結果
下限を入力してください: 5 上限を入力してください: 12 結果は次の通りです: [9]
この例では、5〜12の範囲内で条件を満たすのは 9 のみです。9は3の2乗という完全平方数であり、桁の合計も9(10未満)であるためです。
コードの解説
範囲の入力: ユーザーから検索対象となる下限と上限を入力として受け取ります。
空のリスト定義: 結果を格納するための空のリストを用意します。
リスト内包表記による反復処理:
range(lower_limit, upper_limit + 1)を使って、下限から上限までのすべての整数を順に走査します。完全平方数の判定:
(int(x**0.5))**2 == xにより、xの平方根を整数化して再び2乗し、元の値と一致するかどうかを確認します。一致すれば完全平方数です。桁の合計の計算:
str(x)で数値を文字列に変換し、map(int, ...)で各桁を整数に戻してからsum()で合計します。条件の絞り込み: 桁の合計が10未満である場合のみ、リストに要素を追加します。
結果の出力: 条件を満たした数値のリストをコンソールに表示します。
ポイントまとめ
このプログラムの核となるのは、以下の2つの条件を1つのリスト内包表記に組み合わせている点です。
- 平方根の切り捨て値を2乗して元の数と一致する → 完全平方数
map(int, str(x))による各桁の合計が10未満
リスト内包表記を活用することで、forループやif文を何行にも分けて書く必要がなく、処理内容を1行で簡潔かつ読みやすく表現できるのが大きなメリットです。
-
Pythonでリスト内の最小値を見つける方法を解説
この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。
-
Pythonでリスト内の最大値を見つける方法をわかりやすく解説
この記事では、Pythonを使ってリストの中から最大の要素(最大値)を見つける方法について解説します。初心者の方でも理解しやすいよう、複数のアプローチをコード例とともに紹介していきます。 問題の概要 問題文: 与えられたリストの中から、最も大きい要素を求めて出力してください。 Pythonには便利な組み込み関数が用意されているため、これらを活用することで短いコードで効率的に問題を解決できます。ここでは主に sort() メソッドと max() 関数の2つの方法を取り上げます。 方法1:sort() 関数を使う sort() メソッドはリストを昇順に並べ替えます。並べ替え後のリストの末尾(インデ