Skip to content

第 2 章 演習解答

第 2 章「Python入門」の演習問題の解答例です。問題は 第 2 章 の各節末(演習 2-1〜2-5)と章末の 2.8 演習問題 を参照してください。

演習 2-1: 変数と演算

問題を見る

# 円の面積を計算
pi = 3.14159
r = 5
area = pi * r ** 2
print(f"半径{r}の円の面積: {area}")

# 除算、整数除算、剰余の計算
a = 17
b = 5
print(f"除算 {a} / {b} = {a / b}")
print(f"整数除算 {a} // {b} = {a // b}")
print(f"剰余 {a} % {b} = {a % b}")
半径5の円の面積: 78.53975
除算 17 / 5 = 3.4
整数除算 17 // 5 = 3
剰余 17 % 5 = 2

演習 2-2: リストと辞書

問題を見る

# リストの操作
fruits = ["りんご", "バナナ", "オレンジ"]
print(f"初期リスト: {fruits}")

# "ぶどう"を追加
fruits.append("ぶどう")
print(f"追加後: {fruits}")

# 2番目の要素を出力(インデックスは0から始まるので1)
print(f"2番目の要素: {fruits[1]}")

# 要素数を出力
print(f"要素数: {len(fruits)}")

# 辞書の作成
my_info = {
    "name": "ちくわ",
    "age": 20,
    "city": "水戸",
    "major": "機械システム"
}

# 名前を出力
print(f"名前: {my_info['name']}")
初期リスト: ['りんご', 'バナナ', 'オレンジ']
追加後: ['りんご', 'バナナ', 'オレンジ', 'ぶどう']
2番目の要素: バナナ
要素数: 4
名前: ちくわ

演習 2-3: 条件分岐

問題を見る

# 気温と湿度の設定(いろいろな値で試してみてください)
temperature = 25
humidity = 60

if temperature >= 20 and temperature < 30 and humidity < 70:
    print("快適")
elif temperature < 20:
    print("寒いです")
elif temperature >= 30:
    print("暑いです")
else:
    print("湿度が高いです")
快適

演習 2-4: 繰り返し処理

問題を見る

# 1. 1から10までの合計を計算
total = 0
for i in range(1, 11):  # 1から10まで(11は含まない)
    total += i
print(f"1から10までの合計: {total}")

# 2. 10以上の数だけを出力
numbers = [12, 7, 23, 8, 15, 4, 19]
print("10以上の数:")
for num in numbers:
    if num >= 10:
        print(num)

# 3. 1000以下の値だけを表示し、2倍ずつ増やす
value = 1
print("2倍ずつ増やす:")
while value <= 1000:
    print(value)
    value *= 2
1から10までの合計: 55
10以上の数:
12
23
15
19
2倍ずつ増やす:
1
2
4
8
16
32
64
128
256
512

演習 2-5: 関数

問題を見る

# 1. 最大値を返す関数
def max_value(a, b):
    if a > b:
        return a
    else:
        return b

print(max_value(10, 25))
print(max_value(100, 50))

# 2. 偶数の個数を数える関数
def count_even(numbers):
    count = 0
    for num in numbers:
        if num % 2 == 0:
            count += 1
    return count

test_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(f"偶数の個数: {count_even(test_numbers)}")

# 3. 階乗を計算する関数
def factorial(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

print(f"5の階乗: {factorial(5)}")
print(f"10の階乗: {factorial(10)}")
25
100
偶数の個数: 5
5の階乗: 120
10の階乗: 3628800

演習 2-6: 倍数チェッカー

問題を見る

for i in range(1, 51):  # 1から50まで
    if i % 3 == 0 and i % 5 == 0:
        print(f"{i}!?")
    elif i % 3 == 0:
        print(f"{i}!")
    elif i % 5 == 0:
        print(f"{i}?")
    else:
        print(i)

出力(最初の 20 行):

1
2
3!
4
5?
6!
7
8
9!
10?
11
12!
13
14
15!?
16
17
18!
19
20?

別解 1:3 と 5 の両方の倍数は 15 の倍数なので、次のようにも書けます。

for i in range(1, 51):
    if i % 15 == 0:  # 3と5の最小公倍数
        print(f"{i}!?")
    elif i % 3 == 0:
        print(f"{i}!")
    elif i % 5 == 0:
        print(f"{i}?")
    else:
        print(i)

別解 2:数字の後ろに記号を付け足していく方法もあります。条件の順序を気にする必要がなく、倍数の種類が増えても if を 1 つ追加するだけで対応できます。

for i in range(1, 51):
    output = str(i)
    if i % 3 == 0:
        output += "!"
    if i % 5 == 0:
        output += "?"
    print(output)

発展課題: 数当てゲーム

問題を見る

import random

# 1から100までのランダムな整数を生成
answer = random.randint(1, 100)
attempts = 0

print("数当てゲーム")
print("1から100までの数を当ててください!")

while True:
    # ユーザーからの入力を受け取る
    try:
        guess = int(input("数字を入力: "))
        attempts += 1

        # 予想と正解を比較
        if guess < answer:
            print("もっと大きい数です")
        elif guess > answer:
            print("もっと小さい数です")
        else:
            print(f"正解です!{attempts}回で当たりました!")
            break

    except ValueError:
        print("エラー: 整数を入力してください")

# ゲーム終了後のメッセージ
if attempts <= 5:
    print("素晴らしい!")
elif attempts <= 10:
    print("まぁまぁの結果です!")
else:
    print("もう少し頑張りましょう!")

実行例(正解が 34 の場合):

数当てゲーム
1から100までの数を当ててください!
数字を入力: 50
もっと小さい数です
数字を入力: 25
もっと大きい数です
数字を入力: 37
もっと小さい数です
数字を入力: 31
もっと大きい数です
数字を入力: 34
正解です!5回で当たりました!
素晴らしい!