第 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}")
演習 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-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
演習 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)}")
演習 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: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 の場合):