Python制御構造による数値解析と古典的算術問題の実装

本稿では、条件分岐・反復処理・乱数生成を活用した実用的な数値処理タスクを紹介します。各課題は、Pythonの基本構文を用いて明確なロジックで解決可能です。

10個の乱数から統計量を抽出

0〜100の整数範囲内で10個の乱数を生成し、最大値と算術平均を計算します。

import random

values = [random.randrange(0, 101) for _ in range(10)]
print(f"サンプル列: {values}")
print(f"最大値: {max(values)}")
print(f"平均値: {sum(values) / len(values):.2f}")

条件付き三位数の列挙

下1桁が6かつ3で割り切れる3桁の整数(100〜999)を検出し、7個ずつ改行して表示します。

results = []
for n in range(100, 1000):
    if n % 10 == 6 and n % 3 == 0:
        results.append(n)

for idx, num in enumerate(results):
    print(num, end=" ")
    if (idx + 1) % 7 == 0:
        print()
if len(results) % 7 != 0:
    print()

print(f"\n該当する数の総数: {len(results)}")

動的終了条件付き寄付集計

最大50人の寄付者から合計1000円に達するまで金額を収集し、最終的な参加者数と1人当たり平均額を出力します。

funds = 0.0
contributors = 0

while funds < 1000.0 and contributors < 50:
    try:
        amount = float(input("寄付金額を入力してください: "))
        if amount > 0:
            funds += amount
            contributors += 1
    except ValueError:
        print("無効な入力です。数値を入力してください。")

avg_per_person = funds / contributors if contributors else 0.0
print(f"総寄付額: ¥{funds:.2f}")
print(f"寄付者数: {contributors}")
print(f"1人平均: ¥{avg_per_person:.2f}")

2〜1000までの素数リスト生成

効率的な試行除算法で素数判定を行い、10個ごとに改行して表示します。

def is_prime(x):
    if x < 2:
        return False
    if x == 2:
        return True
    if x % 2 == 0:
        return False
    for d in range(3, int(x ** 0.5) + 1, 2):
        if x % d == 0:
            return False
    return True

primes = [n for n in range(2, 1001) if is_prime(n)]
for i, p in enumerate(primes):
    print(f"{p:4d}", end="")
    if (i + 1) % 10 == 0:
        print()
if len(primes) % 10 != 0:
    print()

print(f"\n合計: {len(primes)} 個の素数")

「百鶏問題」の全解探索

公鶏(5文)、母鶏(3文)、雛鶏(3羽で1文)の組み合わせで、合計100羽・100文を満たす解を網羅的に求めます。

solutions = []
for rooster in range(0, 21):           # 公鶏: 最大20羽(5×20=100)
    for hen in range(0, 34):           # 母鶏: 最大33羽(3×33=99)
        chick = 100 - rooster - hen
        if chick >= 0 and chick % 3 == 0:
            total_cost = 5 * rooster + 3 * hen + chick // 3
            if total_cost == 100:
                solutions.append((rooster, hen, chick))

for r, h, c in solutions:
    print(f"公鶏: {r}羽, 母鶏: {h}羽, 雛鶏: {c}羽")

タグ: Python control-structures prime-numbers brute-force mathematical-problems

8月5日 22:17 投稿