Python練習問題総まとめ|全レッスンの確認問題だけを集めました

Pythonを独学していて、「とにかくたくさん練習問題を解いて実力をつけたい」と感じたことはありませんか?
このページは、Python初心者〜初級者向けの無料練習問題集です。
変数・データ型・条件分岐・ループ・関数・データ構造・オブジェクト指向など、Pythonの基礎を中心に、さまざまな分野の問題をまとめて解けるようになっています。
「まずは自分で手を動かして考える → 分からないところは解説記事へ飛ぶ」という学び方ができるように設計しています。
レベル1:基礎文法編(全7問)
レベル2:制御構造編(全8問)
レベル3:関数とスコープ編(全5問)
レベル4:データ構造編(全13問)
レベル5:オブジェクト指向編(全13問)
おまけ:あなたは何のためにPythonを勉強しますか?
Pythonの基礎文法を一気に復習したい人も、学習の合間に腕試しをしたい人も、このページを「Python基礎の総合問題集」としてガンガン活用してみてください。
レベル1:基礎文法編の練習問題
レッスン1:基礎文法編 の7本の記事内に搭載している練習問題をまとめて紹介します。
レッスン1で学習するPythonの知識は以下の通りです。
入力と出力の基本、コメントの書き方、変数の宣言と代入、基本データ型と算術演算子、文字列の操作、乱数生成
| 基礎文法編の問題一覧 | 各レベルへのリンク |
|---|---|
| 第1問:print関数とinput関数を使ってみよう 第2問:変数を使った簡単な数値・文字列プログラム 第3問:ユーザー入力を使った算術演算プログラム 第4問:文字列操作を使ってみよう 第5問:フォーマット文字列を使ってみよう 第6問:1から100までのランダムな数字を表示しよう 第7問:基礎文法を総復習しよう | レベル1:基礎文法編の練習問題 レベル2:制御構造編の練習問題 レベル3:関数とスコープ編の練習問題 レベル4:データ構造編の練習問題 レベル5:オブジェクト指向編の練習問題 おまけ:何のためにPythonを勉強するのか? |
2026年現在、急速に需要が拡大しており、今後も多くの活躍の場が訪れるであろうPythonの技術を知っていますか?
それは 生成AIエンジニアリング です。
今からPythonで稼ぐなら、これが一番おすすめですよ↓↓

第1問:print関数とinput関数を使ってみよう
簡単な自己紹介プログラムを作成しましょう。また、プログラム内にコメントを書いてみましょう。
以下の要件に従ってコードを完成させてください。
- ユーザーに名前を尋ね、その入力を受け取ること。
- 入力された名前を使って、「こんにちは、○○さん!」と表示すること。
- コード内には、何をしているかを説明するコメントを適切に追加すること。
ただし、以下のような実行結果となるコードを書くこと。
あなたの名前を教えてください: 太郎 こんにちは、 太郎 さん!
- 正解コードはこちら
-
# ユーザーに名前を入力してもらう name = input("あなたの名前を教えてください: ") # 入力された名前を使ってメッセージを表示する print("こんにちは、") print(name) print("さん!")
この問題は↓↓の記事で詳細に解説しています。

第2問:変数を使った簡単な数値・文字列プログラム
変数への代入・表示と、ユーザー入力の基本を練習します。
2つの数値を変数に保持して順に表示し、その後、名前を入力してもらい、挨拶を表示するプログラムを作成してください。
以下の要件に従ってコードを完成させてください。
- 変数 x と y に、それぞれ 10 と 5 を代入する。
- print 関数で x・y を表示する。
- input 関数で名前を受け取る(プロンプトは「あなたの名前を入力してください: 」)。
- 受け取った名前で挨拶を表示する。
ただし、以下のような実行結果となるコードを書くこと。
変数xの値は: 10 変数yの値は: 5 あなたの名前を入力してください: 太郎 こんにちは、 太郎
- 正解コードはこちら
-
# 数値を代入する変数 x = 10 # 変数xを宣言し、10を代入 y = 5 # 変数yを宣言し、5を代入 # 変数の値を出力 print("変数xの値は:") print(x) # 変数xの値をそのまま出力 print("変数yの値は:") print(y) # 変数yの値をそのまま出力 # 文字列を代入する変数 name = input("あなたの名前を入力してください: ") # ユーザーに名前の入力を促します # 入力された名前を表示します print("こんにちは、") print(name)
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第3問:ユーザー入力を使った算術演算プログラムを作ろう
以下の要件に従ってコードを完成させてください。
- ユーザーに2つの数値を入力させ、整数として受け取ること
- 7種類の算術演算(加算・減算・乗算・除算・整数除算・剰余・べき乗)を行うこと
- 各計算結果を画面に表示すること
ただし、以下のような実行結果となるコードを書くこと。
1つ目の数値を入力してください: 10 2つ目の数値を入力してください: 3 加算結果: 10 + 3 = 13 減算結果: 10 - 3 = 7 乗算結果: 10 * 3 = 30 除算結果: 10 / 3 = 3.333... 整数除算結果: 10 // 3 = 3 剰余結果: 10 % 3 = 1 べき乗結果: 10 ** 3 = 1000
- 正解コードはこちら
-
# ユーザーに2つの数値を入力してもらいます。 a = int(input("1つ目の数値を入力してください: ")) b = int(input("2つ目の数値を入力してください: ")) # 算術演算子を使った計算 # 加算 加算結果 = a + b print(f"加算結果: {a} + {b} = {加算結果}") # 減算 減算結果 = a - b print(f"減算結果: {a} - {b} = {減算結果}") # 乗算 乗算結果 = a * b print(f"乗算結果: {a} * {b} = {乗算結果}") # 除算 除算結果 = a / b print(f"除算結果: {a} / {b} = {除算結果}") # 整数除算 整数除算結果 = a // b print(f"整数除算結果: {a} // {b} = {整数除算結果}") # 剰余(余り) 剰余結果 = a % b print(f"剰余結果: {a} % {b} = {剰余結果}") # べき乗 べき乗結果 = a ** b print(f"べき乗結果: {a} ** {b} = {べき乗結果}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第4問:文字列操作を使ってみよう
挨拶文を作成するプログラムを作成し、文字列操作を勉強しましょう。
まず「こんにちは、世界!」という基本的な挨拶を表示し、その後その挨拶文の一部を他の単語に置き換えたり、文字列の長さを取得したりします。
さらに、指定された名前を使って個別の挨拶を作成し、特定の単語が含まれているかを確認します。
以下の要件に従ってコードを完成させてください。
- 変数
greetingに「こんにちは、世界!」を代入し、表示すること。 - 文字列の長さを取得して表示すること。
- 「世界」を「Python」に置き換え、新しい文字列を作成して表示すること。
- 作成した文字列に「Python」が含まれているか確認し、その結果を表示すること。
- 変数
nameに任意の名前を代入し、「こんにちは、○○さん!」という文字列を作成して表示すること。 - その挨拶文に「Python」が含まれているか確認し、結果を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
こんにちは、世界! 文字列の長さ:9 こんにちは、Python! 'Python' が含まれているか: True こんにちは、太郎さん! 'Python' が含まれているか: False
- 正解コードはこちら
-
# 文字列の宣言 greeting = "こんにちは、世界!" print(greeting) # 元の挨拶を表示 # 文字列の長さを取得 print(f"文字列の長さ:{len(greeting)}") # 文字列の長さを取得し表示 # 文字列の一部を置き換える new_greeting = greeting.replace("世界", "Python") # 'replace' で "世界" を "Python" に置き換え print(new_greeting) # 置き換えた結果を出力 # 文字列に "Python" が含まれているか確認 contains_python = "Python" in new_greeting # 'in' 演算子で "Python" が含まれているか確認 print(f"'Python' が含まれているか: {contains_python}") # 名前を別のものにして挨拶を表示 name = "太郎" # 新しい名前を設定 personalized_greeting = f"こんにちは、{name}さん!" # 名前を使った挨拶を作成 print(personalized_greeting) # 文字列に "Python" が含まれているか確認(再度) contains_python = "Python" in personalized_greeting # 'in' 演算子で "Python" が含まれているか確認 print(f"'Python' が含まれているか: {contains_python}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第5問:フォーマット文字列を使ってみよう
ユーザーから名前と年齢を入力してもらい、それをフォーマット文字列を使って表示するプログラムを作成しましょう。
以下の要件に従ってコードを完成させてください。
input関数を使って、ユーザーから名前と年齢を入力してもらうこと。- 変数
nameに名前、変数ageに年齢を代入すること。 - f-stringを使って「こんにちは、○○さん。あなたは○○歳ですね。」という形式で表示すること。
ただし、以下のような実行結果となるコードを書くこと。
名前を入力してください: 佐藤 年齢を入力してください: 25 こんにちは、佐藤さん。あなたは25歳ですね。
- 正解コードはこちら
-
# 名前を入力する name = input("名前を入力してください: ") # 年齢を入力する age = input("年齢を入力してください: ") # フォーマット文字列を使って、入力された名前と年齢を表示する # ここでf-stringを使って、フォーマット文字列を活用しています print(f"こんにちは、{name}さん。あなたは{age}歳ですね。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第6問:1から100までのランダムな数字を表示しよう
プログラムでランダムに1から100までの間の整数を生成し、その数を表示するプログラムを作成しましょう。
さらに、フォーマット文字列を使って「あなたの番号は○○番です」と表示してください。
以下の要件に従ってコードを完成させてください。
- ランダムな数を生成する機能を使って、1から100までの範囲の整数をランダムに生成すること。
- 生成されたランダムな数値を「あなたの番号は○○番です」という形式で表示すること。
- 生成された数値が毎回異なること。
ただし、以下のような実行結果となるコードを書くこと。
あなたの番号は 57 番です
- 正解コードはこちら
-
import random # 1から100までのランダムな整数を生成 random_number = random.randint(1, 100) # 結果を表示 print(f"あなたの番号は {random_number} 番です")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第7問:基礎文法を総復習しよう
レッスン1で学習した内容が身に付いているか確認しましょう。
以下のコードをコピーして、コメントに従ってコードを完成させてください。
# 必要なモジュールをインポートする
import random
# 挨拶を表示
"""【穴埋め問題1】
ここにユーザーに名前を入力してもらい、変数nameに代入するコードを書いてください。
"""
print(f"こんにちは、{name}さん!")
# ユーザーに2つの数値を入力してもらい、計算して出力します。
print("簡単な計算をしましょう!")
"""【穴埋め問題2】
ここにnum1に最初の数値を入力してもらうコードを書いてください。
"""
"""【穴埋め問題3】
ここにnum2に次の数値を入力してもらうコードを書いてください。
"""
# 足し算と掛け算を行う
"""【穴埋め問題4】
ここにnum1とnum2を使って足し算と掛け算を行うコードを書いてください。
"""
# 結果を表示する
"""【穴埋め問題5】
ここに足し算と掛け算の結果を表示するコードを書いてください。
その際f文字列を使い、「○○と△△を足すと□□になります。」といった表示をすること。
"""
"""【穴埋め問題6】
ここに今日のラッキーナンバーを生成して表示するコードを書いてください。
randomモジュールを使って1から10までの乱数を生成し、「今日のあなたのラッキーナンバーは○○です!」と表示すること
"""
# 終了メッセージ
print("これでレッスン1の総復習は終わりです。お疲れさまでした!")- 正解コードはこちら
-
# 必要なモジュールをインポートする import random # 挨拶を表示 name = input("あなたの名前を教えてください: ") print(f"こんにちは、{name}さん!") # ユーザーに2つの数値を入力してもらう print("簡単な計算をしましょう!") num1 = int(input("最初の数を入力してください: ")) num2 = int(input("次の数を入力してください: ")) # 足し算と掛け算を行う addition = num1 + num2 multiplication = num1 * num2 # 結果を表示する print(f"{num1} と {num2} を足すと {addition} になります。") print(f"{num1} と {num2} を掛けると {multiplication} になります。") # 今日のラッキーナンバーを決める random_number = random.randint(1, 10) print(f"今日のあなたのラッキーナンバーは {random_number} です!") # 終了メッセージ print("これでレッスン1の総復習は終わりです。お疲れさまでした!")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

レベル2:制御構造編の練習問題
レッスン2:制御構造編 の9本の記事内に搭載している練習問題をまとめて紹介します。
レッスン2で学習するPythonの知識は以下の通りです。
比較演算子と論理演算子、条件分岐、繰り返し処理、エラーメッセージ、例外処理の基礎
| 制御構造編の問題一覧 | 各レベルへのリンク |
|---|---|
| 第8問:年齢判定プログラムを作ろう 第9問:elif文を使ってみよう 第10問: matchを使ってみよう第11問:for文を使ってみよう 第12問:while文を使ってみよう 第13問:breakとcontinueを使ってみよう 第14問:エラーメッセージを読んでエラーを修正しよう 第15問:例外処理を使ってみよう | レベル1:基礎文法編の練習問題 レベル2:制御構造編の練習問題 レベル3:関数とスコープ編の練習問題 レベル4:データ構造編の練習問題 レベル5:オブジェクト指向編の練習問題 おまけ:何のためにPythonを勉強するのか? |
2026年現在、急速に需要が拡大しており、今後も多くの活躍の場が訪れるであろうPythonの技術を知っていますか?
それは 生成AIエンジニアリング です。
今からPythonで稼ぐなら、これが一番おすすめですよ↓↓

第8問:年齢判定プログラムを作ろう
ユーザーの年齢を入力してもらい、年齢が20歳以上かどうかを判定するプログラムを作成しましょう。
年齢が20歳以上の場合には「あなたは成人です。」と表示し、20歳未満の場合には「あなたは未成年です。」と表示するプログラムを作成してください。
以下の要件に従ってコードを完成させてください。
input関数を使用して、ユーザーに年齢を入力してもらうこと。- 入力された年齢を整数型に変換すること。
if-else文を使って、年齢が20歳以上かどうかを判定すること。- 20歳以上の場合は「あなたは成人です。」、それ以外の場合は「あなたは未成年です。」と表示すること。
ただし、以下のような実行結果となるコードを書くこと。
年齢を入力してください: 25 あなたは成人です。
年齢を入力してください: 18 あなたは未成年です。
- 正解コードはこちら
-
# 年齢を入力してもらう age = int(input("年齢を入力してください: ")) # 条件分岐: 入力された年齢が20歳以上かどうかを確認する if age >= 20: # 条件が真(True)の場合、このブロックのコードが実行される print("あなたは成人です。") else: # 条件が偽(False)の場合、このブロックのコードが実行される print("あなたは未成年です。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第9問:elif文を使ってみよう
ユーザーから天気を入力してもらい、その内容に応じた行動を表示するプログラムを作成しましょう。
以下の要件に従ってコードを完成させてください。
input関数を使って天気を入力してもらうことif-elif-else文を使って条件分岐を行うこと- 入力内容に応じて異なるメッセージを表示すること
ただし、以下のような実行結果となるコードを書くこと。
今日の天気はどうですか(晴れ/雨/曇り)?: 晴れ 外出しましょう!
今日の天気はどうですか(晴れ/雨/曇り)?: 雨 家にいましょう。
今日の天気はどうですか(晴れ/雨/曇り)?: 曇り 軽く散歩でもしましょう。
今日の天気はどうですか(晴れ/雨/曇り)?: こんにちは 指定された言葉は天気ではありません。
- 正解コードはこちら
-
# ユーザーから天気を入力してもらう weather = input("今日の天気はどうですか(晴れ/雨/曇り)?: ") # 条件分岐を使って天気に応じた行動を表示する if weather == "晴れ": print("外出しましょう!") elif weather == "雨": print("家にいましょう。") elif weather == "曇り": print("軽く散歩でもしましょう。") else: print("指定された言葉は天気ではありません。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第10問:matchを使ってみよう
ユーザーが入力した動物名に応じて、対応する鳴き声を表示するプログラムを作成してください。
分岐には match/case 構文を用います。
以下の要件に従ってコードを完成させてください。
input関数を使って、ユーザーから動物の名前(「犬」「猫」「鳥」)を入力してもらうこと。match文を使用し、入力された動物の名前に応じて異なる鳴き声を表示すること。- 「犬」が入力された場合は「ワンワン」と表示すること。
- 「猫」が入力された場合は「ニャーニャー」と表示すること。
- 「鳥」が入力された場合は「ピーピー」と表示すること。
- その他の動物が入力された場合は「その動物は記録されていません。」と表示すること。
ただし、以下のような実行結果となるコードを書くこと。
動物の名前を入力してください(犬/猫/鳥): 犬 ワンワン
動物の名前を入力してください(犬/猫/鳥): ライオン その動物は記録されていません。
- 正解コードはこちら
-
# ユーザーに動物の名前を入力してもらう animal = input("動物の名前を入力してください(犬/猫/鳥): ") # 条件分岐(match文)を使って入力された動物に応じた鳴き声を表示する match animal: case "犬": print("ワンワン") case "猫": print("ニャーニャー") case "鳥": print("ピーピー") case _: print("その動物は記録されていません。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第11問:for文を使ってみよう
指定された回数だけメッセージを表示するプログラムを作成してください。
今回は5回のループを行います。
以下の要件に従ってコードを完成させてください。
- for文を使用して、指定された範囲(0から4)を繰り返し処理すること。
- 各繰り返しごとにフォーマット文字列を使用して「1回目の表示: Pythonを勉強しましょう!」の形式でメッセージを出力すること。
- 出力されるメッセージは、回数(1, 2, 3…)に応じて変化させること。
ただし、以下のような実行結果となるコードを書くこと。
1回目の表示: Pythonを勉強しましょう! 2回目の表示: Pythonを勉強しましょう! 3回目の表示: Pythonを勉強しましょう! 4回目の表示: Pythonを勉強しましょう! 5回目の表示: Pythonを勉強しましょう!
- 正解コードはこちら
-
# for文を使って0から4までの数を繰り返し処理する for i in range(5): # ループの回数を出力する(iは0から始まるので、i+1で回数を1から表示する) print(f"{i+1}回目の表示: Pythonを勉強しましょう!") # range(5)は0から4までの数を生成し、for文でその数を順番に処理する
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第12問:while文を使ってみよう
while文を使ってユーザーからの入力を繰り返し表示するプログラムを作成してください。ユーザーが「終了」と入力するまで、入力された内容を表示するプログラムです。
ユーザーが「終了」と入力したら、ループを終了しプログラムを停止させます。
以下の要件に従ってコードを完成させてください。
- while文を使用して、ユーザーの入力が「終了」でない限りループを繰り返すこと。
- ユーザーからの入力を受け取り、その内容を画面に表示すること。
- 入力が「終了」であればループを抜け、プログラム終了のメッセージを表示すること。
ただし、以下のような実行結果となるコードを書くこと。
何か入力してください(終了で停止): こんにちは あなたの入力: こんにちは 何か入力してください(終了で停止): あいうえお あなたの入力: あいうえお 何か入力してください(終了で停止): 終了 プログラムを終了します
- 正解コードはこちら
-
# ユーザーの入力を初期化 user_input = "" # while文でユーザーが「終了」と入力するまで繰り返す while user_input != "終了": # ユーザーに文字列の入力を求める user_input = input("何か入力してください(終了で停止): ") # 入力が「終了」でない場合はその入力内容を表示 if user_input != "終了": print(f"あなたの入力: {user_input}") # 「終了」と入力されたらループを抜けて終了メッセージを表示 print("プログラムを終了します")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第13問:breakとcontinueを使ってみよう
1から10までの数字を順番に処理するプログラムを作成してください。
ただし3の倍数は全てスキップし、かつ数字が8に達したらループを終了するように制御しましょう。
breakとcontinueを使って、繰り返し処理の流れを制御する方法を学びましょう。
以下の要件に従ってコードを完成させてください。
- for文を使用して、1から10までの数値を処理すること。
- 数字が8になったらbreakを使ってループを終了すること。
- 3の倍数の場合はcontinueを使ってその回のループをスキップすること。
- ループ終了時に「ループが終了しました」と表示すること。
ただし、以下のような実行結果となるコードを書くこと。
現在の数字: 1 現在の数字: 2 3は3の倍数なのでスキップします。 現在の数字: 4 現在の数字:5 6は3の倍数なのでスキップします。 現在の数字:7 8に達したのでループを終了します。 ループが終了しました。
- 正解コードはこちら
-
# 1から10までの数字を繰り返し処理 for i in range(1, 11): # 数字が8の場合はループを途中で終了 if i == 8: print("8に達したのでループを終了します。") break # ここでループを終了 # 3の倍数の場合はその回の処理をスキップ if i % 3 == 0: print(f"{i}は3の倍数なのでスキップします。") continue # ここで次の繰り返しに進む print(f"現在の数字: {i}") # プログラム終了時のメッセージ print("ループが終了しました。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第14問:エラーメッセージを読んでエラーを修正しよう
以下のコードをコピーして実行してみましょう。
そうすると複数のエラーが発生しますので、表示されるエラーメッセージを参考にしてエラー箇所を特定し、正しいコードを書きましょう。
print("Hello World
print(helloworld)
age = 20
message = "I am " + age + " years old"
print(message)
# まだリストを勉強していない人は、以下の2行は無視してください。
my_list = [1, 2, 3]
print(my_list[ 3])
number = int("hello")
print(number)- 正解コードはこちら
-
# 1. SyntaxError - クォーテーションを閉じる print("Hello World") # 2. NameError - 変数を定義 helloworld = "Hello World" print(helloworld) # 3. TypeError - 整数を文字列に変換して結合 age = 20 message = "I am " + str(age) + " years old" print(message) # 4. IndexError - 有効なインデックスを使用 my_list = [1, 2, 3] print(my_list[ 2]) # インデックスは0から始まるので、最大は2 # 5. ValueError - 整数として解釈可能な文字列を使用 number = int("10") print(number)
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第15問:例外処理を使ってみよう
ユーザーから2つの数値を受け取り、割り算を行うプログラムを作成してください。
発生しうるエラーを例外処理(try/except)で扱い、最後に処理が終わったことを知らせるメッセージを表示しましょう。
以下の要件に従ってコードを完成させてください。
input()で2つの整数を受け取り、num1とnum2に代入すること。num1 / num2を実行し、成功時は結果を表示すること。ZeroDivisionErrorを捕捉して、0で割ろうとした場合のエラーメッセージを表示すること。ValueErrorを捕捉して、数値以外の入力時のエラーメッセージを表示すること。- 必ず実行する終了メッセージを
finallyで出力すること。
ただし、以下のような実行結果となるコードを書くこと。
1つ目の数字を入力してください: 10 2つ目の数字を入力してください: 0 エラー: 0で割ることはできません。 処理を終了しました。
- 正解コードはこちら
-
try: # ユーザーに数値の入力を求める num1 = int(input("1つ目の数字を入力してください: ")) num2 = int(input("2つ目の数字を入力してください: ")) # 例外処理を使ってゼロ除算を防ぐ result = num1 / num2 print(f"結果: {result}") # ZeroDivisionError の例外処理 except ZeroDivisionError: print("エラー: 0で割ることはできません。") # ValueError の例外処理(整数以外が入力された場合) except ValueError: print("エラー: 有効な整数を入力してください。") # 最後に必ず実行されるブロック(今回は簡単な終了メッセージ) finally: print("処理を終了しました。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

レベル3:関数とスコープ編の練習問題
レッスン3:関数とスコープ編 の5本の記事内に搭載している練習問題をまとめて紹介します。
レッスン3で学習するPythonの知識は以下の通りです。
関数の定義と使用、戻り値とデフォルト引数、スコープの概念、高階関数、無名関数(lambda式)
| 関数とスコープ編の問題一覧 | 各レベルへのリンク |
|---|---|
| 第16問:関数を使ってみよう 第17問:戻り値とデフォルト引数を使ってみよう 第18問:グローバル変数とローカル変数を使ってみよう 第19問:高階関数を使ってみよう 第20問:無名関数(lambda関数)を使ってみよう | レベル1:基礎文法編の練習問題 レベル2:制御構造編の練習問題 レベル3:関数とスコープ編の練習問題 レベル4:データ構造編の練習問題 レベル5:オブジェクト指向編の練習問題 おまけ:何のためにPythonを勉強するのか? |
2026年現在、急速に需要が拡大しており、今後も多くの活躍の場が訪れるであろうPythonの技術を知っていますか?
それは 生成AIエンジニアリング です。
今からPythonで稼ぐなら、これが一番おすすめですよ↓↓

第16問:関数を使ってみよう
銀行にお金を預けた際、年利を考慮して預けた元金が数年後にどれだけ増えるかを計算するプログラムを作成しましょう。
元金、年利、預ける年数を入力して、関数を使ってその計算結果を画面に表示します。
以下の要件に従ってコードを完成させてください。
- 関数
calculate_and_print_interestを定義し、元金、年利、預ける年数を引数として受け取ること。 - 関数内で、以下の複利計算式を使って最終的な金額を計算し、乗示すること。
計算式: 最終金額 = 元金 × (1 + 年利 / 100) の (預けた年数)乗 - ユーザーから元金、年利(%)、預ける年数を
input関数を使って入力させること。 - ユーザーが入力した値を使って、関数を呼び出し、最終的な金額を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
元金を入力してください: 100000 年利(%)を入力してください: 5 預ける年数を入力してください: 10 10年後の預金額は: 162889.46円です。
- 正解コードはこちら
-
def calculate_and_print_interest(principal, rate, years): # 最終金額 = 元金 * (1 + 年利) ** 年数 final_amount = principal * (1 + rate / 100) ** years # 計算結果を直接表示 print(f"{years}年後の預金額は: {final_amount:.2f}円です。") # メイン部分 # ユーザーから元金、年利、年数を入力してもらう principal = float(input("元金を入力してください: ")) rate = float(input("年利(%)を入力してください: ")) years = int(input("預ける年数を入力してください: ")) # 関数を呼び出して最終的な金額を計算し、表示する calculate_and_print_interest(principal, rate, years)
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第17問:戻り値とデフォルト引数を使ってみよう
商品価格と数量を入力し、合計金額を計算するプログラムを作成します。
数量の未入力時の扱いを通じて、戻り値とデフォルト引数の基本を確認しましょう。
以下の要件に従ってコードを完成させてください。
- 関数
calculate_total(price, quantity=1)を定義し、price * quantityを戻り値として返すこと。 - ユーザーから価格(整数)と数量の入力を受け取ること。
- 数量の入力は前後の空白を除去して判定し、未入力(空文字)ならデフォルト値 1 を用いること。
- 計算した合計金額を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
商品の価格を入力してください(円): 500 商品の数量を入力してください(省略すると1になります): 3 合計金額は 1500 円です。 商品の価格を入力してください(円): 500 商品の数量を入力してください(省略すると1になります): 合計金額は 500 円です。
- 正解コードはこちら
-
# 合計金額を計算する関数 def calculate_total(price, quantity=1): # 合計金額を計算して戻り値として返す return price * quantity # メイン部分 price = int(input("商品の価格を入力してください(円): ")) quantity_input = input("商品の数量を入力してください(省略すると1になります): ").strip() if quantity_input == "": total = calculate_total(price) else: quantity = int(quantity_input) total = calculate_total(price, quantity) # 結果を表示 print(f"合計金額は {total} 円です。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第18問:グローバル変数とローカル変数を使ってみよう
グローバルスコープとローカルスコープの違いを学ぶためのプログラムを作成しましょう。
グローバル変数として「greeting」という文字列を定義し、関数内でその変数を表示します。また関数内で別のローカル変数を定義し、その値も表示しましょう。
さらに、グローバル変数の値を関数内で変更する処理を作成し、変更後の値が関数外でも反映されることを確認します。
以下の要件に従ってコードを完成させてください。
- グローバル変数
greetingに「こんにちは」という文字列を格納し、関数の外と内でこの変数を表示すること。 - 関数
local_scope_function()を定義し、ローカル変数messageに「これはローカル変数です」という文字列を代入し、それを表示すること。 - グローバル変数
greetingの値を関数modify_global_variable()の中で「こんにちは、世界!」に変更すること。 - 関数の外で変更後の
greetingの値を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
ローカル変数 message の値: これはローカル変数です グローバル変数 greeting の値: こんにちは グローバル変数 greeting が関数内で変更されました: こんにちは、世界! 関数外のグローバル変数 greeting の値: こんにちは、世界!
- 正解コードはこちら
-
greeting = "こんにちは" # グローバル変数greetingを宣言 def local_scope_function(): message = "これはローカル変数です" # ローカル変数messageの宣言 print(f"ローカル変数 message の値: {message}") print(f"グローバル変数 greeting の値: {greeting}") def modify_global_variable(): global greeting # グローバル変数greetingを使用するためにglobalキーワードを使用 greeting = "こんにちは、世界!" # グローバル変数を新しい値に変更 print(f"グローバル変数 greeting が関数内で変更されました: {greeting}") # 関数の実行 local_scope_function() # ローカル変数とグローバル変数の表示 modify_global_variable() # グローバル変数の値を変更 # グローバル変数の変更を確認 print(f"関数外のグローバル変数 greeting の値: {greeting}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第19問:高階関数を使ってみよう
2つの数を加算する関数を変数に代入し、その変数を使って関数を呼び出してみましょう。
さらに、その関数を別の関数の引数として渡して、関数を動的に実行するようにしましょう。
以下の要件に従ってコードを完成させてください。
- 関数
add_numbers(a, b)を定義し、2つの数の和を返す。 add_numbersをadd_varという変数に代入し、add_varを通して関数を呼び出して結果を表示する。- 関数
call_function(func, a, b)を定義し、受け取ったfuncをaとbで呼び出して結果を返す。 call_functionにadd_varを渡し、結果を表示する。
ただし、以下のような実行結果となるコードを書くこと。
30 40
- 正解コードはこちら
-
# 関数の定義。2つの数の和を計算する関数 def add_numbers(a, b): return a + b # 関数を変数に代入する(関数の受け渡しの例) add_var = add_numbers # 変数に代入された関数を使って2つの数を加算して表示 print(add_var(10, 20)) # 実行結果: 30 # 関数を引数として別の関数に渡す例 def call_function(func, a, b): # 渡された関数を呼び出し、その結果を返す return func(a, b) # call_functionを使って、add_var関数を引数として渡す print(call_function(add_var, 15, 25)) # 実行結果: 40
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第20問:無名関数(lambda関数)を使ってみよう
無名関数(lambda式)を使って、年齢に応じたメッセージを出力するプログラムを作成しましょう。
18歳以上であれば「大人です」、それ以下であれば「未成年です」と表示します。年齢は変数として与えられ、その値に基づいて判定が行われます。
以下の要件に従ってコードを完成させてください。
- 無名関数(lambda式)を使って、年齢を判定する関数を定義すること。
- 入力された年齢が18歳以上の場合は「大人です」、それ以下の場合は「未成年です」と表示すること。
- 年齢は変数
ageに格納すること。 - 年齢に応じた結果を出力するメッセージを
messageという変数に格納すること。 - 結果を「年齢が○○歳の場合: ○○です」の形式で表示すること。
ただし、以下のような実行結果となるコードを書くこと。
年齢が20歳の場合: 大人です。
年齢が16歳の場合: 未成年です。
- 正解コードはこちら
-
age_check = lambda age: "大人です" if age >= 18 else "未成年です" # 条件分岐を使った無名関数 age = 20 # 例として20歳を設定 message = age_check(age) # 無名関数で年齢を判断 print(f"年齢が{age}歳の場合: {message}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

レベル4:データ構造編の練習問題
レッスン4:データ構造編 の14本の記事内に搭載している練習問題をまとめて紹介します。
レッスン4で学習するPythonの知識は以下の通りです。
リスト、タプル、辞書、集合(セット)
| データ構造編の問題一覧 | 各レベルへのリンク |
|---|---|
| 第21問:リストの要素追加や挿入操作を練習しよう 第22問:リストの要素削除操作をマスターしよう 第23問:リストの情報出力を体験しよう 第24問:リストの集計・並べ替えを体験しよう 第25問:リストのスライスを使ってみよう 第26問:リストのループ処理を使ってみよう 第27問:リストの内包表記を使ってみよう 第28問:タプルを使ってみよう 第29問:タプルのアンパックを使ってみよう 第30問:辞書を使ってみよう 第31問:辞書のループ処理を使ってみよう 第32問:辞書の内包表記を使ってみよう 第33問:集合(セット)を使ってみよう | レベル1:基礎文法編の練習問題 レベル2:制御構造編の練習問題 レベル3:関数とスコープ編の練習問題 レベル4:データ構造編の練習問題 レベル5:オブジェクト指向編の練習問題 おまけ:何のためにPythonを勉強するのか? |
第21問:リストの要素追加や挿入操作を練習しよう
指定されたリストに対して append、extend、insert メソッドを使って、要素を追加・挿入してください。
以下の要件に従ってコードを完成させてください。
- 初期リスト
my_listを[1, 2, 4]として定義すること。 appendメソッドを使い、リストの末尾に5を追加すること。extendメソッドを使い、リストの末尾に6と7を追加すること。insertメソッドを使い、リストの2と4の間に3を挿入すること。- リストの各操作の結果を
print文で出力すること。
ただし、以下のような実行結果となるコードを書くこと。
append後のリスト: [1, 2, 4, 5] extend後のリスト: [1, 2, 4, 5, 6, 7] insert後のリスト: [1, 2, 3, 4, 5, 6, 7]
- 正解コードはこちら
-
# リストの定義 my_list = [1, 2, 4] # 初期のリスト my_list.append(5) # リストの末尾に5を追加 print(f"append後のリスト: {my_list}") my_list.extend([6, 7]) # リストに別のリスト[6, 7]を追加 print(f"extend後のリスト: {my_list}") my_list.insert(2, 3) # インデックス2の位置に3を挿入 print(f"insert後のリスト: {my_list}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第22問:リストの要素削除操作をマスターしよう
リストから要素を削除する方法を学習するためのプログラムを作成しましょう。
まず果物の名前をリストに格納し、そのリストから要素を削除する操作を行います。
clear、remove、pop メソッドや del ステートメントを使用して、リストの要素をさまざまな方法で削除しましょう。
以下の要件に従ってコードを完成させてください。
- 変数
fruitsに["りんご", "バナナ", "みかん", "いちご", "ぶどう"]というリストを格納すること。 clearメソッドを使用してリストの全ての要素を削除し、その結果を表示すること。- 変数
fruitsに再び["りんご", "バナナ", "みかん", "いちご", "ぶどう"]を格納すること。 removeメソッドを使用してリストからバナナを削除し、その結果を表示すること。popメソッドを使用してリストからいちごを削除し、その要素とリストの状態を表示すること。delステートメントを使用してインデックス1の要素を削除し、その結果を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
リストを clear した結果: [] バナナを remove した結果: ['りんご', 'みかん', 'いちご', 'ぶどう'] いちごを pop した結果: ['りんご', 'みかん', 'ぶどう'] 削除された要素: いちご インデックス1の要素を del した結果: ['りんご', 'ぶどう']
- 正解コードはこちら
-
# リストを作成 fruits = ["りんご", "バナナ", "みかん", "いちご", "ぶどう"] # リストの全ての要素を削除する場合は clear メソッドを使います fruits.clear() print("リストを clear した結果:", fruits) # 再びリストを作成 fruits = ["りんご", "バナナ", "みかん", "いちご", "ぶどう"] # remove メソッドを使って、特定の要素(バナナ)を削除します fruits.remove("バナナ") print("バナナを remove した結果:", fruits) # pop メソッドを使って、インデックス2の要素(いちご)を削除し、その要素を返します removed_fruit = fruits.pop(2) print("インデックス2の要素を pop した結果:", fruits) print("削除された要素:", removed_fruit) # del ステートメントを使って、インデックス1の要素を削除します del fruits[ 1] print("インデックス1の要素を del した結果:", fruits)
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第23問:リストの情報出力を体験しよう
Pythonのリストから情報を取得するためのプログラムを作成しましょう。
リストのサイズを確認したり、特定の要素がいくつ含まれているかを調べたり、特定の要素がどの位置にあるかを検索します。
さらに、リスト内に特定の要素が存在するかを確認するコードを書きましょう。
以下の要件に従ってコードを完成させてください。
numbersという名前のリストに[10, 20, 30, 40, 50]を格納すること。len()関数を使ってリストのサイズを表示すること。count()メソッドを使ってリスト内にある20の数を表示すること。index()メソッドを使ってリスト内の30の位置を表示すること。in演算子を使ってリスト内に50が存在するかを確認し、その結果を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
リストのサイズは 5 です。 リストに含まれている20の数は 1 です。 30はリストのインデックス 2 にあります。 50がリストに含まれているか: True
- 正解コードはこちら
-
# リストを作成(数字のリスト) numbers = [10, 20, 30, 40, 50] # lenメソッドでリストのサイズを確認する print("リストのサイズは", len(numbers), "です。") # countメソッドで特定の要素がいくつ含まれているかを確認する twenty_count = numbers.count(20) print("リストに含まれている20の数は", twenty_count, "です。") # indexメソッドで特定の要素がどの位置にあるかを確認する thirty_index = numbers.index(30) print("30はリストのインデックス", thirty_index, "にあります。") # in 演算子を使ってリスト内に要素が存在するか確認する is_fifty_in_list = 50 in numbers print("50がリストに含まれているか:", is_fifty_in_list)
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第24問:リストの集計・並べ替えを体験しよう
テストの点数(100点満点)をリストに格納し、以下の操作を行うプログラムを作成してください。
プログラムではリスト内の点数を集計し、最小値・最大値・合計・平均点を出力します。
その後、点数を昇順に並べ替え、さらに逆順に並べ替えた結果も表示します。
以下の要件に従ってコードを完成させてください。
scoresという名前のリストに、テストの点数を5つ格納すること(例:[88, 74, 95, 62, 80])。min()関数を使って、最小点を取得し表示すること。max()関数を使って、最大点を取得し表示すること。sum()関数を使って、全ての点数の合計を表示すること。- 平均点を計算し、少数第2位まで表示すること。
sort()メソッドを使って、点数を昇順に並べ替え、表示すること。reverse()メソッドを使って、点数を逆順に並べ替え、表示すること。
ただし、以下のような実行結果となるコードを書くこと。
最も低い点数: 62点 最も高い点数: 95点 合計点数: 399点 平均点: 79.80点 昇順に並べ替えた点数: [62, 74, 80, 88, 95] 逆順に並べ替えた点数: [95, 88, 80, 74, 62]
- 正解コードはこちら
-
# テストの点数(100点満点)のリストを定義します scores = [88, 74, 95, 62, 80] # リストの集計 min_score = min(scores) # リスト内の最も低い点数を取得 max_score = max(scores) # リスト内の最も高い点数を取得 sum_scores = sum(scores) # リスト内の全ての点数の合計を取得 average_score = sum_scores / len(scores) # 平均点を計算 # 集計結果を表示 print(f"最も低い点数: {min_score}点") print(f"最も高い点数: {max_score}点") print(f"合計点数: {sum_scores}点") print(f"平均点: {average_score:.2f}点") # 小数点以下2桁まで表示 # リストを昇順に並べ替え scores.sort() # リストを昇順に並べ替え print(f"昇順に並べ替えた点数: {scores}") # リストを逆順に並べ替え scores.reverse() # リストを逆順に並べ替え print(f"逆順に並べ替えた点数: {scores}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第25問:リストのスライスを使ってみよう
リストを使って特定の範囲の要素を取り出すスライス操作を学びましょう。
リスト中の指定された範囲のデータを取得し、それを表示するプログラムを作成してください。
以下の要件に従ってコードを完成させてください。
numbersという名前のリストに0から9までの数字を格納すること。- リストの2番目から4番目の要素をスライスして取り出し、それを表示すること。
- 最初から4番目までの要素をスライスして取り出し、それを表示すること。
- 5番目から最後までの要素をスライスして取り出し、それを表示すること。
- リスト全体から2つ飛ばしで要素をスライスして取り出し、それを表示すること。
- リストを逆順にスライスして取り出し、それを表示すること。
ただし、以下のような実行結果となるコードを書くこと。
2番目から4番目までの要素: [2, 3, 4] 最初から4番目までの要素: [0, 1, 2, 3] 5番目から最後までの要素: [5, 6, 7, 8, 9] 2つ飛ばしで取得: [0, 2, 4, 6, 8] 逆順に取得: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
- 正解コードはこちら
-
# 数字のリストを定義 numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # リストの一部をスライスで取り出す subset1 = numbers[2:5] # 2番目から4番目までの要素を取得 print(f"2番目から4番目までの要素: {subset1}") # スライスの応用(開始位置省略) subset2 = numbers[:4] # 最初から4番目までの要素を取得 print(f"最初から4番目までの要素: {subset2}") # スライスの応用(終了位置省略) subset3 = numbers[5:] # 5番目から最後までの要素を取得 print(f"5番目から最後までの要素: {subset3}") # スライスの応用(ステップを指定) subset4 = numbers[::2] # 2つ飛ばしで要素を取得 print(f"2つ飛ばしで取得: {subset4}") # リストを逆順にスライス reverse_list = numbers[::-1] # リストを逆順に取得 print(f"逆順に取得: {reverse_list}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第26問:リストのループ処理を使ってみよう
1から9までの数字をリストに格納し、その各要素を2乗した値を計算して、3つずつカンマで区切って表示するプログラムを作成してください。
Pythonのリストとループ処理を使って、繰り返し操作とリストの扱い方を学びましょう。
以下の要件に従ってコードを完成させてください。
- リスト
numbersに1から9までの数を格納すること。 - ループ処理を使って、リスト内の各要素を2乗し、それを新しいリスト
squared_numbersに格納すること。 squared_numbersを3つずつ取り出し、カンマで区切って表示すること。
ただし、以下のような実行結果となるコードを書くこと。
1,4,9 16,25,36 49,64,81
- 正解コードはこちら
-
# 1から9までの数をリストに格納 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 空のリストに各数値の2乗を格納 squared_numbers = [] # ループ処理で各数値の2乗を計算し、リストに追加 for number in numbers: squared_numbers.append(number ** 2) # 3つずつ出力するためのループ for i in range(0, len(squared_numbers), 3): # リストを3つずつ表示 print(f"{squared_numbers[i]},{squared_numbers[i+1]},{squared_numbers[i+2]}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第27問:リストの内包表記を使ってみよう
1から10までの自然数を含むリストを作成し、その中から奇数だけを取り出して、さらにそれぞれを2倍にするプログラムを作成しましょう。
内包表記を使用しない方法と内包表記を使用した方法の2つの方法で実装してください。
以下の要件に従ってコードを完成させてください。
numbersというリストに1から10までの自然数を格納すること。- 内包表記を使わずに、
numbersから奇数を取り出して2倍にしたリストを作成すること。 - 内包表記を使って、
numbersから奇数を取り出して2倍にしたリストを作成すること。 - 作成した3つのリストを全て出力すること。
ただし、以下のような実行結果となるコードを書くこと。
元のリスト: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 内包表記を使わずに2倍にしたリスト: [2, 6, 10, 14, 18] 内包表記を使って2倍にしたリスト: [2, 6, 10, 14, 18]
- 正解コードはこちら
-
# 1から10までの数をリストに格納します numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 内包表記を使わない書き方 doubled_numbers1 = [] for number in numbers: if number % 2 != 0: doubled_numbers1.append(number * 2) # 内包表記を使う書き方 doubled_numbers2 = [number * 2 for number in numbers if number % 2 != 0] # 結果を表示します print(f"元のリスト: {numbers}") print(f"内包表記を使わずに2倍にしたリスト: {doubled_numbers1}") print(f"内包表記を使って2倍にしたリスト: {doubled_numbers2}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第28問:タプルを使ってみよう
タプルを使って国名を扱うプログラムを作成しましょう。
最初にいくつかの国名を含むタプルを定義します。その後、タプルをカンマで区切った文字列に変換し、再びタプルに戻す操作を行ってください。
以下の要件に従ってコードを完成させてください。
- 3つの国名を含むタプル
countriesを定義すること。 - タプルを
joinメソッドを使ってカンマ区切りの文字列に変換し、それを表示すること。 - 変換した文字列を
splitメソッドを使ってリストに分割し、それを表示すること。 - 分割したリストを
tuple関数を使って再びタプルに変換し、それを表示すること。
ただし、以下のような実行結果となるコードを書くこと。
タプルの内容: ('Japan', 'USA', 'France')
タプルを文字列に変換: Japan, USA, France
文字列をリストに分割: ['Japan', 'USA', 'France']
リストをタプルに戻す: ('Japan', 'USA', 'France')- 正解コードはこちら
-
countries = ("Japan", "USA", "France") # タプルの内容を表示 print("タプルの内容:", countries) # joinメソッドを使って、タプルの要素をカンマ区切りの文字列に変換 countries_str = ", ".join(countries) print("タプルを文字列に変換:", countries_str) # splitメソッドを使って、文字列を再びリストに変換 countries_list = countries_str.split(", ") print("文字列をリストに分割:", countries_list) # 文字列をタプルに再変換 countries_tuple_again = tuple(countries_list) print("リストをタプルに戻す:", countries_tuple_again)
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第29問:タプルのアンパックを使ってみよう
タプルを使って名前、年齢、職業をまとめたデータを管理するプログラムを作成しましょう。
まず、名前、年齢、職業をそれぞれ1つのタプルにまとめて表示します。
その後、複数のタプルをネストして管理し、タプル内の各要素を順に表示するコードを作成してください。
以下の要件に従ってコードを完成させてください。
- タプル
personを定義し、「佐藤」という名前、30歳、「エンジニア」という職業を含めること。 - タプル
personの各要素をアンパックし、それぞれの変数に展開すること。 print関数を使って、展開した名前、年齢、職業を表示すること。- 複数のタプルをネストした
nested_tupleを定義し、以下の3人のデータを含めること:- 「田中」 28歳 「デザイナー」
- 「鈴木」 25歳 「プログラマー」
- 「高橋」 32歳 「マネージャー」
for文を使って、ネストされたタプルの各要素をアンパックし、名前、年齢、職業を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
名前: 佐藤, 年齢: 30, 職業: エンジニア 名前: 田中, 年齢: 28, 職業: デザイナー 名前: 鈴木, 年齢: 25, 職業: プログラマー 名前: 高橋, 年齢: 32, 職業: マネージャー
- 正解コードはこちら
-
# タプルの定義 person = ("佐藤", 30, "エンジニア") # タプルのアンパック(タプルの要素を変数に展開) name, age, profession = person # アンパックされた値を出力 print(f"名前: {name}, 年齢: {age}, 職業: {profession}") # ネストされたタプルの定義(名前、年齢、職業) nested_tuple = (("田中", 28, "デザイナー"), ("鈴木", 25, "プログラマー"), ("高橋", 32, "マネージャー")) # ネストされたタプルのアンパック(3つの要素を展開して出力) for name, age, profession in nested_tuple: print(f"名前: {name}, 年齢: {age}, 職業: {profession}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第30問:辞書を使ってみよう
商品在庫を管理するプログラムを作成して、辞書の基本操作を学びましょう。
このプログラムでは商品の価格や在庫数を管理します。新しい商品を追加したり、在庫を更新したり、不要な商品を削除する機能を実装します。
以下の要件に従ってコードを完成させてください。
- 商品の在庫管理をするための辞書
inventoryを作成し、商品名、価格、在庫数を設定すること。商品は「りんご、バナナ、みかん」とする。 - 新しい商品「ぶどう」を追加し、価格と在庫数を設定すること。
- 既存の商品「りんご」の在庫数を40に更新すること。
- 商品「バナナ」を在庫から削除すること。
- 最後に、すべての商品の名前、価格、在庫数を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
初期の在庫: {'りんご': {'価格': 100, '在庫数': 50}, 'バナナ': {'価格': 80, '在庫数': 30}, 'みかん': {'価格': 60, '在庫数': 100}}
ぶどうを追加した後の在庫: {'りんご': {'価格': 100, '在庫数': 50}, 'バナナ': {'価格': 80, '在庫数': 30}, 'みかん': {'価格': 60, '在庫数': 100}, 'ぶどう': {'価格': 120, '在庫数': 25}}
りんごの在庫数を更新した後の在庫: {'りんご': {'価格': 100, '在庫数': 40}, 'バナナ': {'価格': 80, '在庫数': 30}, 'みかん': {'価格': 60, '在庫数': 100}, 'ぶどう': {'価格': 120, '在庫数': 25}}
バナナを削除した後の在庫: {'りんご': {'価格': 100, '在庫数': 40}, 'みかん': {'価格': 60, '在庫数': 100}, 'ぶどう': {'価格': 120, '在庫数': 25}}
最終的な在庫状況:
りんご: 価格 = 100円, 在庫数 = 40個
みかん: 価格 = 60円, 在庫数 = 100個
ぶどう: 価格 = 120円, 在庫数 = 25個- 正解コードはこちら
-
# 商品の在庫を表す辞書 inventory = { 'りんご': {'価格': 100, '在庫数': 50}, 'バナナ': {'価格': 80, '在庫数': 30}, 'みかん': {'価格': 60, '在庫数': 100} } # 辞書の内容を表示 print("初期の在庫:", inventory) # 新しい商品を追加 inventory['ぶどう'] = {'価格': 120, '在庫数': 25} print("ぶどうを追加した後の在庫:", inventory) # 既存の商品(りんご)の在庫数を更新 inventory['りんご']['在庫数'] = 40 print("りんごの在庫数を更新した後の在庫:", inventory) # 商品(バナナ)を削除 del inventory['バナナ'] print("バナナを削除した後の在庫:", inventory) # 在庫の状態をループで表示 print("最終的な在庫状況:") for item, details in inventory.items(): print(f"{item}: 価格 = {details['価格']}円, 在庫数 = {details['在庫数']}個")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第31問:辞書のループ処理を使ってみよう
学生の名前とスコアを管理する辞書を作成し、辞書のループ処理を学習しましょう。
以下の要件に従ってコードを完成させてください。
- 辞書
student_scoresを作成し、以下の3人の学生とスコアを登録すること。- 山田: 85点
- 佐藤: 92点
- 鈴木: 78点
keys()を使用して、辞書に登録されている全ての学生の名前を順に表示すること。values()を使用して、辞書に登録されている全てのスコアを順に表示すること。items()とf文字列を使用して、各学生の名前とそのスコアを「〇〇 のスコアは △△ 点です」という形式で表示すること。
ただし、以下のような実行結果となるコードを書くこと。
学生の名前一覧: 山田 佐藤 鈴木 学生のスコア一覧: 85 92 78 学生の名前とスコア: 山田 のスコアは 85 点です 佐藤 のスコアは 92 点です 鈴木 のスコアは 78 点です
- 正解コードはこちら
-
# 辞書の定義 student_scores = { "山田": 85, "佐藤": 92, "鈴木": 78 } # keys() を使って辞書のキー(名前)をループ処理 print("学生の名前一覧:") for name in student_scores.keys(): print(name) # values() を使って辞書の値(スコア)をループ処理 print("\n学生のスコア一覧:") for score in student_scores.values(): print(score) # items() を使ってキーと値のペアをループ処理 print("\n学生の名前とスコア:") for name, score in student_scores.items(): print(f"{name} のスコアは {score} 点です")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第32問:辞書の内包表記を使ってみよう
zip()関数を使って2つのリストを結合し、辞書を作成するプログラムを作りましょう。
商品名のリストと価格のリストがあり、それぞれを辞書に変換して、商品の価格を管理できるようにします。
作成した辞書を使って、各商品の名前と価格を日本語で表示してください。
以下の要件に従ってコードを完成させてください。
- products というリストに「りんご」「バナナ」「みかん」「ぶどう」という商品名を格納すること。
- prices というリストにそれぞれの商品の価格「150」「100」「80」「200」を格納すること。
- zip()関数を使って、商品名と価格を組み合わせ、辞書 product_prices を作成すること。
- 辞書 product_prices を使い、各商品の価格を日本語で表示すること。
ただし、以下のような実行結果となるコードを書くこと。
商品の価格一覧: りんごの価格は 150 円です。 バナナの価格は 100 円です。 みかんの価格は 80 円です。 ぶどうの価格は 200 円です。
- 正解コードはこちら
-
products = ['りんご', 'バナナ', 'みかん', 'ぶどう'] # 商品名のリスト prices = [150, 100, 80, 200] # 価格のリスト # zip()を使って商品名と価格を組み合わせ、それを辞書に変換 product_prices = {product: price for product, price in zip(products, prices)} # 結果を日本語で表示 print("商品の価格一覧:") for product, price in product_prices.items(): print(f"{product}の価格は {price} 円です。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第33問:集合(セット)を使ってみよう
1から30までの数字の中からランダムに10個選んで、それを3つの集合として定義してください。
さらにそれぞれの集合に対して 和集合、積集合、差集合 を計算して表示するプログラムを作成しましょう。
以下の要件に従ってコードを完成させてください。
- 集合の作成:1〜30の範囲からランダムに10個の要素を選び、それぞれ独立に3つの集合(集合1・集合2・集合3)を作成すること。
- 集合演算:3集合に対して以下を計算すること(演算子を使用)。
- 和集合:
set1 | set2 | set3 - 積集合:
set1 & set2 & set3 - 差集合:
set1 - set2 - set3(集合1から集合2と集合3を順に差し引く)
- 和集合:
- 出力:3つの元の集合と、和集合・積集合・差集合の計算結果をそれぞれ表示すること。
ただし、以下のような実行結果となるコードを書くこと。
集合1: {2, 5, 7, 12, 15, 18, 19, 22, 26, 28}
集合2: {3, 7, 9, 12, 14, 16, 19, 24, 28, 30}
集合3: {1, 5, 7, 12, 16, 18, 19, 20, 23, 24}
和集合: {1, 2, 3, 5, 7, 9, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 26, 28, 30}
積集合: {7, 12, 19}
差集合: {2, 15, 22, 26}- 正解コードはこちら
-
import random # 1から30までの数字からランダムに10個の数字を選択して集合を作成 set1 = set(random.sample(range(1, 31), 10)) set2 = set(random.sample(range(1, 31), 10)) set3 = set(random.sample(range(1, 31), 10)) # それぞれの集合を表示 print("集合1:", set1) print("集合2:", set2) print("集合3:", set3) union_set = set1 | set2 | set3 # 和集合 intersection_set = set1 & set2 & set3 # 積集合 difference_set = set1 - set2 - set3 # 差集合 (集合1から集合2、集合3を差し引く) # 結果を表示 print("和集合:", union_set) print("積集合:", intersection_set) print("差集合:", difference_set)
この問題のヒントや詳細解説は↓↓の記事を参照してください。

レベル5:オブジェクト指向編の練習問題
レッスン5:オブジェクト指向編 の13本の記事内に搭載している練習問題をまとめて紹介します。
レッスン5で学習するPythonの知識は以下の通りです。
クラスの定義と使用、メソッドの定義と使用、カプセル化、プロパティ、クラスの継承、メソッドのオーバーライド、静的メソッド、モジュール、抽象クラス、ミックスイン、データクラス、可変長引数、デコレーター
| オブジェクト指向編の問題一覧 | 各レベルへのリンク |
|---|---|
| 第34問:クラスとインスタンスを使ってみよう 第35問:メソッドを使ってみよう 第36問:カプセル化を使ってみよう 第37問:プロパティを使ってみよう 第38問:クラスの継承を使ってみよう 第39問:オーバーライドを使ってみよう 第40問:静的メソッドを使ってみよう 第41問:モジュールを使ってみよう 第42問:抽象クラスを使ってみよう 第43問:ミックスインを使ってみよう 第44問:データクラスを使ってみよう 第45問:可変長引数を使ってみよう 第46問:デコレーターを使ってみよう | レベル1:基礎文法編の練習問題 レベル2:制御構造編の練習問題 レベル3:関数とスコープ編の練習問題 レベル4:データ構造編の練習問題 レベル5:オブジェクト指向編の練習問題 おまけ:何のためにPythonを勉強するのか? |
2026年現在、急速に需要が拡大しており、今後も多くの活躍の場が訪れるであろうPythonの技術を知っていますか?
それは 生成AIエンジニアリング です。
今からPythonで稼ぐなら、これが一番おすすめですよ↓↓

第34問:クラスとインスタンスを使ってみよう
動物が自己紹介をするプログラムを作成してください。
プログラムでは、動物の名前を設定し、自己紹介を行うメソッドを持つ「Animal」クラスを定義します。
その後、「ネコ」や「イヌ」といった具体的な動物のインスタンスを作成し、それぞれが自己紹介を行います。
以下の要件に従ってコードを完成させてください。
Animalというクラスを定義し、そのクラスには動物の名前を設定する__init__メソッドを持たせること。introduceメソッドを定義し、動物が「こんにちは!私は○○です。」と自己紹介できるようにすること。Animalクラスのインスタンスを作成し、introduceメソッドを呼び出して動物が自己紹介できること。- 「ネコ」と「イヌ」のインスタンスを作成し、それぞれが自己紹介を行うこと。
ただし、以下のような実行結果となるコードを書くこと。
こんにちは!私はネコです。 こんにちは!私はイヌです。
- 正解コードはこちら
-
# 動物クラスの定義 class Animal: def __init__(self, name): # インスタンス変数nameに動物の名前を設定する self.name = name def introduce(self): # 動物の自己紹介をするメソッド return f"こんにちは!私は{self.name}です。" # Animalクラスのインスタンスを作成 cat = Animal("ネコ") dog = Animal("イヌ") # インスタンスが持つメソッドを呼び出して、自己紹介を表示 print(cat.introduce()) # 出力: こんにちは!私はネコです。 print(dog.introduce()) # 出力: こんにちは!私はイヌです。
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第35問:メソッドを使ってみよう
家電製品の電源操作をシミュレートするプログラムを作成しましょう。
この問題ではクラスとメソッドを使って、複数の家電にそれぞれの動作(オン・オフ・状態確認)を定義し、個別に操作できるようにします。
以下の要件に従ってコードを完成させてください。
- クラス
Applianceを作成し、__init__メソッドでブランド、消費電力、電源の状態(デフォルトでオフ)を定義すること。 - メソッド
turn_onを作成し、電源がオフのときにオンにし、メッセージを表示すること。既にオンの場合はその旨を表示すること。 - メソッド
turn_offを作成し、電源がオンのときにオフにし、メッセージを表示すること。既にオフの場合はその旨を表示すること。 - メソッド
check_statusを作成し、現在の電源状態(オンかオフか)を表示すること。 - インスタンスを2つ作成し、それぞれの操作を行い、結果を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
テレビの電源状態はオフです テレビがオンになりました テレビの電源状態はオンです テレビがオフになりました 冷蔵庫がオンになりました 冷蔵庫の電源状態はオンです
- 正解コードはこちら
-
# 家電製品クラスを定義します class Appliance: def __init__(self, brand, power, is_on=False): # 家電製品のブランド、消費電力、電源の状態を定義 self.brand = brand self.power = power # 消費電力 (W) self.is_on = is_on # 電源がオンかオフかの状態 def turn_on(self): # 家電製品をオンにするメソッド if not self.is_on: self.is_on = True print(f"{self.brand}がオンになりました") else: print(f"{self.brand}は既にオンになっています") def turn_off(self): # 家電製品をオフにするメソッド if self.is_on: self.is_on = False print(f"{self.brand}がオフになりました") else: print(f"{self.brand}は既にオフになっています") def check_status(self): # 家電製品の電源状態を確認するメソッド status = "オン" if self.is_on else "オフ" print(f"{self.brand}の電源状態は{status}です") # Applianceクラスのインスタンスを作成します tv = Appliance("テレビ", 150) fridge = Appliance("冷蔵庫", 200) # テレビの操作 tv.check_status() # 初期状態ではオフのはずです tv.turn_on() # テレビをオンにします tv.check_status() # 電源がオンになったか確認します tv.turn_off() # テレビをオフにします # 冷蔵庫の操作 fridge.turn_on() # 冷蔵庫をオンにします fridge.check_status() # 冷蔵庫の電源状態を確認します
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第36問:カプセル化を使ってみよう
クラスを使って商品の名前と価格を管理するプログラムを作成しましょう。
クラスの初期化メソッドを使って、商品の名前と価格を設定し、プライベート属性を用いることでデータのカプセル化を実現します。
最後に商品価格を変更し、正しい価格管理ができていることを確認しましょう。
以下の要件に従ってコードを完成させてください。
- 商品を表現する「Product」クラスを作成し、名前と価格を初期化メソッドで設定すること。
- 名前はプライベート属性
_name、価格はプライベート属性_priceとして設定すること。 - 商品名を取得する
get_name()メソッドを定義し、名前を返すこと。 - 商品の価格を取得する
get_price()メソッドを定義し、価格を返すこと。 - 商品の価格を変更する
set_price()メソッドを定義し、価格が 0 以上の場合にのみ価格を更新すること。価格が0未満の場合は警告メッセージを表示すること。 - 商品のインスタンスを作成し、名前と価格を設定すること。
- 商品名と価格を表示し、価格の変更も確認すること。
ただし、以下のような実行結果となるコードを書くこと。
商品名: りんご 価格: 100円 新しい価格: 120円 価格は0より大きい値を設定してください。
- 正解コードはこちら
-
# クラスの定義: 「商品」を表現するクラス class Product: # 初期化メソッド (__init__) を使って、商品の名前と価格を設定 def __init__(self, name, price): # アンダーバー1つの変数は「慣習的にプライベート」属性として扱われます self._name = name # 商品名 self._price = price # 価格 # 商品名を取得するためのゲッターメソッド def get_name(self): return self._name # 商品の価格を取得するためのゲッターメソッド def get_price(self): return self._price # 商品の価格を設定するためのセッターメソッド def set_price(self, price): # 価格は0以上でなければならないという条件を設定 if price > 0: self._price = price else: print("価格は0より大きい値を設定してください。") # 商品のインスタンスを作成 product = Product("りんご", 100) # 商品名と価格を表示 print(f"商品名: {product.get_name()}") print(f"価格: {product.get_price()}円") # 価格を変更 product.set_price(120) print(f"新しい価格: {product.get_price()}円") # 無効な価格を設定しようとする product.set_price(-50) # この操作は失敗し、警告が表示される
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第37問:プロパティを使ってみよう
人の名前と年齢を管理する小さなクラスを作成しましょう。
プロパティのゲッター/セッターを用いて、見た目は属性アクセスのままバリデーション(値の検証)を挟む実装を練習しましょう。
以下の要件に従ってコードを完成させてください。
- クラス名は
Personとし、人物の名前と年齢を保持する。 - インスタンス変数は
_nameと_ageを用い、*頭アンダースコアでカプセル化(非公開扱い*とする。 nameとageのプロパティを定義し、各プロパティにゲッターとセッターを実装する。- セッターでは以下を検証し、満たさない場合は
ValueErrorを送出する。 name:文字列(str)のみ許可age:0以上の整数(int)のみ許可
ただし、以下のような実行結果となるコードを書くこと。
名前: 太郎 年齢: 25歳 新しい名前: 次郎 新しい年齢: 30歳
- 正解コードはこちら
-
class Person: def __init__(self, name, age): self._name = name self._age = age # name属性のゲッター @property def name(self): return self._name # name属性のセッター @name.setter def name(self, value): if not isinstance(value, str): raise ValueError("名前は文字列でなければなりません") self._name = value # age属性のゲッター @property def age(self): return self._age # age属性のセッター @age.setter def age(self, value): if not isinstance(value, int) or value < 0: raise ValueError("年齢は0以上の整数でなければなりません") self._age = value # インスタンスの作成 person = Person("太郎", 25) # プロパティを使って名前と年齢を取得 print(f"名前: {person.name}") print(f"年齢: {person.age}歳") # プロパティを使って名前と年齢を設定 person.name = "次郎" person.age = 30 # 設定後の名前と年齢を表示 print(f"新しい名前: {person.name}") print(f"新しい年齢: {person.age}歳")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第38問:クラスの継承を使ってみよう
クラス継承を使った車両管理プログラムを作成しましょう。
親クラス「Vehicle」を定義し、その子クラスとして「Car」と「Motorcycle」を作成します。
各クラスは共通のメソッドを持ちつつ、固有の動作を追加します。プログラムでは車両の名前を設定し、対応する動作を実行するようにしてください。
以下の要件に従ってコードを完成させてください。
- 親クラス「Vehicle」を定義し、名前を設定するコンストラクタと名前を表示するメソッドを作成すること。
- 子クラス「Car」を「Vehicle」から継承し、車が走るメソッドを追加すること。
- 子クラス「Motorcycle」を「Vehicle」から継承し、バイクが走るメソッドを追加すること。
- 「Car」と「Motorcycle」クラスのオブジェクトを生成し、それぞれの動作を実行すること。
ただし、以下のような実行結果となるコードを書くこと。
この乗り物はトヨタです。 この乗り物はハーレーです。 トヨタが道路を走っています。 ハーレーが高速道路を疾走しています。
- 正解コードはこちら
-
# 親クラス(Vehicle)の定義 class Vehicle: def __init__(self, name): # コンストラクタで車両の名前を設定 self.name = name def introduce(self): # 親クラスのメソッド: 車両の名前を表示 print(f"この乗り物は{self.name}です。") # 子クラス(Car)の定義、Vehicleクラスを継承 class Car(Vehicle): def drive(self): # Carクラス固有のメソッド: 車が走る動作 print(f"{self.name}が道路を走っています。") # 子クラス(Motorcycle)の定義、Vehicleクラスを継承 class Motorcycle(Vehicle): def ride(self): # Motorcycleクラス固有のメソッド: バイクが走る動作 print(f"{self.name}が高速道路を疾走しています。") # オブジェクトの生成 car = Car("トヨタ") motorcycle = Motorcycle("ハーレー") # 親クラスのメソッドを使って名前を表示 car.introduce() # ここではCarクラスがVehicleクラスからintroduceメソッドを継承している motorcycle.introduce() # Motorcycleクラスも同様に継承している # CarクラスとMotorcycleクラスそれぞれの固有メソッドを使用 car.drive() # Carクラスの固有メソッド motorcycle.ride() # Motorcycleクラスの固有メソッド
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第39問:オーバーライドを使ってみよう
クラスの継承とメソッドのオーバーライドを使った家電製品のシミュレーションプログラムを作成しましょう。
親クラスで基本的な家電の操作を定義し、洗濯機と冷蔵庫の子クラスでそれぞれの動作をカスタマイズします。
以下の要件に従ってコードを完成させてください。
- 親クラス
Applianceを定義し、名前を設定する__init__メソッドを作成すること。 - 親クラスで家電製品を操作する
operateメソッドを定義すること。 WashingMachineクラスとRefrigeratorクラスを親クラスから継承し、それぞれのoperateメソッドをオーバーライドすること。- 各家電の操作を順に出力すること。
ただし、以下のような実行結果となるコードを書くこと。
洗濯機で洗濯を開始します 冷蔵庫で冷蔵を開始します
- 正解コードはこちら
-
# 親クラスの定義 class Appliance: def __init__(self, name): self.name = name def operate(self): return f"{self.name}を操作しています" # 子クラスの定義(洗濯機) class WashingMachine(Appliance): def operate(self): return f"{self.name}で洗濯を開始します" # 子クラスの定義(冷蔵庫) class Refrigerator(Appliance): def operate(self): return f"{self.name}で冷蔵を開始します" # 家電製品のリストを作成し、それぞれの操作を出力します appliances = [WashingMachine("洗濯機"), Refrigerator("冷蔵庫")] # 各家電製品の操作を順に出力 for appliance in appliances: print(appliance.operate()) # 出力:洗濯機で洗濯を開始します, 冷蔵庫で冷蔵を開始します
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第40問:静的メソッドを使ってみよう
本の情報を扱うクラスを題材に、インスタンスメソッドと静的メソッドの役割分担を確認するミニプログラムを作成します。
書誌情報を整形して表示する処理はインスタンスメソッドに、出版年の妥当性チェックは静的メソッドに任せ、必要に応じてチェック結果を利用して本の生成と表示を行ってください。
以下の要件に従ってコードを完成させてください。
Bookクラスを定義し、コンストラクタで属性title,author,yearを保持する。- インスタンスメソッド
info(self)を定義し、「タイトル、出版年、著者」 を出力する。 - 静的メソッド
is_valid_year(year)を定義し、int型かつyear > 0のときにTrueを返す簡易チェックを行う。 - 実行例として次を行う:
ただし、以下のような実行結果となるコードを書くこと。
True False 『吾輩は猫である』 (1905) - 夏目漱石 『未来図書』 (2025) - AI研究者
- 正解コードはこちら
-
class Book: def __init__(self, title, author, year): self.title = title self.author = author self.year = year # インスタンスメソッド def info(self): return f"『{self.title}』 ({self.year}) - {self.author}" # 静的メソッド @staticmethod def is_valid_year(year): # 年が 0 より大きいかどうかをチェック return isinstance(year, int) and year > 0 # ===== 実行例 ===== print(Book.is_valid_year(2020)) # True print(Book.is_valid_year(-150)) # False # 正しい年で作成 book1 = Book("吾輩は猫である", "夏目漱石", 1905) print(book1.info()) # 『吾輩は猫である』 (1905) - 夏目漱石 # 静的メソッドで確認してから本を追加 year = 2025 if Book.is_valid_year(year): book2 = Book("未来図書", "AI研究者", year) print(book2.info()) else: print("無効な出版年です。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第41問:モジュールを使ってみよう
Pythonの標準モジュールmathを使用して、円の直径、面積、円周を計算するプログラムを作成してください。
このプログラムではユーザーから円の半径を入力してもらい、計算結果を画面に表示します。
以下の要件に従ってコードを完成させてください。
mathモジュールをインポートし、円周率にmath.piを使用すること。- 円の半径を入力として受け取ること。入力値が負の数や0の場合は、エラーメッセージを表示すること。
- 円の直径を計算すること(直径 = 半径 × 2)。
- 円の面積を計算すること(面積 = π × 半径²)。
- 円周を計算すること(円周 = 2 × π × 半径)。
- 計算結果を次のように表示すること:
- 「直径: ○○」
- 「面積: ○○」
- 「円周: ○○」
- 入力が数値以外の場合、エラーメッセージを表示すること。
ただし、以下のような実行結果となるコードを書くこと。
円の半径を入力してください(例: 5): 5 直径: 10.00 面積: 78.54 円周: 31.42
円の半径を入力してください(例: 5): -2 半径は正の数を入力してください。
円の半径を入力してください(例: 5): 文字 数値を入力してください!
- 正解コードはこちら
-
import math # 標準モジュール "math" をインポート def calculate_circle_properties(radius): """ 円の半径を受け取り、直径、面積、円周を計算する関数 - math モジュールを使用して数学的な計算を行う """ if radius <= 0: # 半径が0以下の場合、エラーメッセージを返す return "半径は正の数を入力してください。" # math モジュールを使用して計算 diameter = radius * 2 # 直径 area = math.pi * (radius ** 2) # 面積 circumference = 2 * math.pi * radius # 円周 # 結果を辞書形式で返す return { "直径": diameter, "面積": area, "円周": circumference } try: # ユーザーから半径を入力 radius = float(input("円の半径を入力してください(例: 5): ")) # 計算結果を取得 result = calculate_circle_properties(radius) # 結果を表示 if isinstance(result, str): # エラーメッセージが返ってきた場合 print(result) else: print(f"直径: {result['直径']:.2f}") print(f"面積: {result['面積']:.2f}") print(f"円周: {result['円周']:.2f}") except ValueError: # 数値以外が入力された場合のエラーメッセージ print("数値を入力してください!")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第42問:抽象クラスを使ってみよう
動物を表す抽象クラスを用意し、その契約(鳴き声・移動)の実装を犬と鳥のクラスに任せるミニプログラムを作成します。
最後に、生成したオブジェクトから鳴き声と移動方法を取得して表示してください。
以下の要件に従ってコードを完成させてください。
abcモジュールを用い、抽象クラスAnimalを定義する。AnimalはABCを継承し、make_sound(self)とmove(self)を@abstractmethodで宣言する(抽象メソッド)。DogクラスとBirdクラスをAnimalから継承し、各抽象メソッドを文字列を戻り値として実装する。Dog.make_sound()は「ワンワン!」、Dog.move()は「走り回る」。Bird.make_sound()は「ピヨピヨ!」、Bird.move()は「空を飛ぶ」。- スクリプト末尾で
DogとBirdのインスタンスを生成し、鳴き声と移動方法を表示する。
ただし、以下のような実行結果となるコードを書くこと。
犬の鳴き声: ワンワン! 犬の移動方法: 走り回る 鳥の鳴き声: ピヨピヨ! 鳥の移動方法: 空を飛ぶ
- 正解コードはこちら
-
from abc import ABC, abstractmethod # abcモジュールをインポート # 動物の基底クラス(抽象クラス) class Animal(ABC): @abstractmethod def make_sound(self): # 動物の鳴き声を出力する抽象メソッド pass @abstractmethod def move(self): # 動物がどのように移動するかを定義する抽象メソッド pass # 犬クラス(Animalを継承) class Dog(Animal): def make_sound(self): return "ワンワン!" def move(self): return "走り回る" # 鳥クラス(Animalを継承) class Bird(Animal): def make_sound(self): return "ピヨピヨ!" def move(self): return "空を飛ぶ" # 犬と鳥のインスタンスを生成 dog = Dog() bird = Bird() # 犬の鳴き声と動作 print("犬の鳴き声:", dog.make_sound()) print("犬の移動方法:", dog.move()) # 鳥の鳴き声と動作 print("鳥の鳴き声:", bird.make_sound()) print("鳥の移動方法:", bird.move())
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第43問:ミックスインを使ってみよう
ログ出力機能と入力検証機能をミックスインとして用意し、多重継承で合成したクラスでユーザー名を処理するミニプログラムを作成します。
ユーザーから名前を受け取り、検証して結果をログに記録する一連の流れを実装してください。
以下の要件に従ってコードを完成させてください。
LoggingMixinクラスを定義し、log(self, message)で[LOG]: {message}の形式でメッセージを出力する。ValidationMixinクラスを定義し、validate_input(self, data)で 入力が文字列かを判定し、判定結果を表示してTrue/Falseを返す。UserProcessorクラスをLoggingMixin,ValidationMixinから多重継承で作成し、process_user(self, username)を実装する。- 検証が
Trueのとき:"ユーザー名 '{username}' を正常に処理しました。"をlogで出力する。 - 検証が
Falseのとき:"処理に失敗しました。"をlogで出力する。 - スクリプト末尾で
UserProcessorのインスタンスを生成し、入力で受け取ったユーザー名をprocess_userに渡して処理する。
ただし、以下のような実行結果となるコードを書くこと。
ユーザー名を入力してください: PythonLearner 入力は有効です [LOG]: ユーザー名 'PythonLearner' を正常に処理しました。
- 正解コードはこちら
-
# ログ出力用のミックスインクラス class LoggingMixin: def log(self, message): # ログを出力するためのメソッド print(f"[LOG]: {message}") # 入力検証用のミックスインクラス class ValidationMixin: def validate_input(self, data): # 入力が文字列であることを検証するメソッド if isinstance(data, str): print("入力は有効です") return True else: print("入力は無効です。文字列を入力してください。") return False # メインクラスにミックスインを組み合わせて利用 class UserProcessor(LoggingMixin, ValidationMixin): def process_user(self, username): # ユーザー名を処理するメインメソッド if self.validate_input(username): # ミックスインの機能を使用 self.log(f"ユーザー名 '{username}' を正常に処理しました。") else: self.log("処理に失敗しました。") processor = UserProcessor() # ユーザー名の入力を受け取る username = input("ユーザー名を入力してください: ") processor.process_user(username)
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第44問:データクラスを使ってみよう
円と長方形を表すデータクラスを定義し、面積や外周(円は円周)をインスタンスメソッドで計算して表示するプログラムを作成します。
クラス設計(フィールドとメソッド)、@dataclassによる初期化の自動化、メソッドの戻り値の扱いを一通り確認できる練習です。
以下の要件に従ってコードを完成させてください。
- クラス定義
@dataclassを用いて、円を表すCircleと長方形を表すRectangleを定義する。Circleはradius: floatのフィールドを持つ。Rectangleはwidth: floatとheight: floatのフィールドを持つ。
- インスタンスメソッド
- 両クラスに面積を返す
area()メソッドを実装する。 Circleに円周を返すcircumference()メソッドを実装する。Rectangleに外周を返すperimeter()メソッドを実装する。- 各メソッドは数値(
float)を戻り値として返すこと。
- 両クラスに面積を返す
- 利用例の実装
- メインブロックで各クラスのインスタンスをサンプル値で生成する。
- フィールド値と、
area()/circumference()/perimeter()の計算結果を表示する。
ただし、以下のような実行結果となるコードを書くこと。
円の半径: 5 円の面積: 78.54 円周の長さ: 31.42 長方形の幅: 4, 高さ: 7 長方形の面積: 28 長方形の外周: 22
- 正解コードはこちら
-
from dataclasses import dataclass import math # 円を表すデータクラス @dataclass class Circle: radius: float def area(self) -> float: # 円の面積を返す return math.pi * self.radius ** 2 def circumference(self) -> float: # 円周を返す return 2 * math.pi * self.radius # 長方形を表すデータクラス @dataclass class Rectangle: width: float height: float def area(self) -> float: # 長方形の面積を返す return self.width * self.height def perimeter(self) -> float: # 長方形の外周を返す return 2 * (self.width + self.height) # --- 利用例 --- c = Circle(radius=5) print(f"円の半径: {c.radius}") print(f"円の面積: {c.area():.2f}") print(f"円周の長さ: {c.circumference():.2f}") r = Rectangle(width=4, height=7) print(f"\n長方形の幅: {r.width}, 高さ: {r.height}") print(f"長方形の面積: {r.area()}") print(f"長方形の外周: {r.perimeter()}")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第45問:可変長引数を使ってみよう
買い物リストの品目と、商品価格の合計を表示するプログラムを作成しましょう。
品目の名前や価格の数は毎回変わる可能性があります。
そこで、可変長引数を使って関数に複数の値を柔軟に渡せるようにすることが今回の学習目標です。
以下の要件に従ってコードを完成させてください。
- 品目の表示
関数show_shopping_list(*items)を定義し、可変個の文字列(品目名)を受け取り、見出し行のあとに各品目を1行ずつ表示すること。 - 合計金額の計算
関数calculate_total_price(*prices)を定義し、可変個の整数(価格)を受け取り、合計値を戻り値として返すこと。 - 利用例の実行
show_shopping_list("たまご", "パン", "牛乳")を呼び出してリストを表示し、total = calculate_total_price(120, 350, 220)の戻り値をtotalに代入して、合計金額をメッセージ付きで出力すること。
ただし、以下のような実行結果となるコードを書くこと。
買い物リストを表示します: - たまご - パン - 牛乳 合計金額は 690 円です。
- 正解コードはこちら
-
# 可変長引数 *items を使って、いくつでも値を受け取れるようにする def show_shopping_list(*items): # items には渡されたすべての値がまとまって入ってくる print("買い物リストを表示します:") for item in items: print("- " + item) # 複数の価格(整数)を受け取り、合計を計算する関数 def calculate_total_price(*prices): # prices も可変長引数として受け取り、合計を出す total = 0 for price in prices: total += price return total # 実行例①:文字列を複数渡して表示する show_shopping_list("たまご", "パン", "牛乳") # 実行例②:価格を複数渡して合計を計算する total = calculate_total_price(120, 350, 220) print("合計金額は", total, "円です。")
この問題のヒントや詳細解説は↓↓の記事を参照してください。

第46問:デコレーターを使ってみよう
関数の前後にメッセージを表示することで、処理の流れをわかりやすくするプログラムを作成しましょう。
このプログラムでは「デコレーター」を使って、関数の処理前と処理後にメッセージを出力し、さらに処理にかかった時間を表示します。
その上でユーザーから名前を入力してもらい、個別のあいさつを表示します。デコレーターの基本構文と効果を理解しながら実装してみましょう。
以下の要件に従ってコードを完成させてください。
- time モジュールをインポートすること。
- デコレーター関数
greeting_logger(func)を定義すること。 greeting_loggerの中に、処理の前に「=== 処理を開始します ===」、後に「=== 処理が終了しました ===」と出力する処理を記述すること。time.time()を使って、処理の前後で時間を取得し、その差を「実行時間: ◯◯秒」の形式で表示すること(小数点第2位まで)。@greeting_loggerを使用して、greet_user()関数にデコレーターを適用すること。greet_user()関数の中では、input()を使ってユーザーから名前を入力してもらい、「こんにちは、◯◯さん!ようこそ!」と表示すること。- 関数
greet_user()を最後に呼び出すこと。
ただし、以下のような実行結果となるコードを書くこと。
=== 処理を開始します === あなたの名前を入力してください:さくら こんにちは、さくらさん!ようこそ! === 処理が終了しました === 実行時間: 2.01秒
- 正解コードはこちら
-
import time # デコレーター関数:関数の前後でメッセージを表示する def greeting_logger(func): # 内部関数(ラッパー関数)を定義 def wrapper(): print("=== 処理を開始します ===") # 前処理の表示 start = time.time() # 開始時間を記録 func() # 本体関数の実行 end = time.time() # 終了時間を記録 print("=== 処理が終了しました ===") # 後処理の表示 print(f"実行時間: {end - start:.2f}秒") # 実行時間の出力 return wrapper # ラッパー関数を返す # デコレーターを使って関数に機能を追加 @greeting_logger def greet_user(): """ユーザーの名前を聞いて、あいさつをする関数""" name = input("あなたの名前を入力してください:") # 入力の取得 print(f"こんにちは、{name}さん!ようこそ!") # あいさつメッセージ # 関数を実行 greet_user()
この問題のヒントや詳細解説は↓↓の記事を参照してください。

あなたは何のためにPythonを勉強していますか?
Pythonは様々な分野で利用される、非常に万能な言語です。しかしPythonの基礎を覚えただけでは、業務や副業には直結しません。
Pythonはあくまでも基礎。それを応用する方法を考えないといけません。
2026年現在、最もお勧めなのは生成AIエンジニア になる道。
ChatGPTなどのAIを理解し、それをPythonで動かせるエンジニアになれば、そのスキルだけで当面は安泰でしょう。

その方向へ進む場合は、経済産業省のお墨付きもある DMM 生成AI CAMP で学ぶことが最も確実で近い道です。
Pythonの基礎も含めて学習できますので、興味のある方はぜひ↓↓のレビュー記事を参考にしてください。

もしくは、生成AIが誕生するよりも以前からあり、今後も根強い需要があると思われる、汎用的なPythonエンジニアになるのもお勧めです。
Excelの自動化技術 を覚えれば、副業でコツコツ稼ぐこともできるでしょう。
2026年現在、Pythonを用いてどのようにお金を稼ぐのが効率的なのか。
是非↓↓の記事を参考にしてください。
