本稿では、条件分岐・反復処理・乱数生成を活用した実用的な数値処理タスクを紹介します。各課題は、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}羽")