チュートリアルを終え、すべてのコードを打ち込み、すべてのサンプルを実行し、すべてがうまく動くのを確認した。そして、いざ自分だけのものを作ろうと真っ白なエディタを開く――しかし、何も思い浮かばない。アイデアが一つも出てこない。
ほぼすべての初心者が、この**「チュートリアルの罠」**に陥ります(大抵は最初のPythonコースを終えた直後です)。forループについて一日中読んで理解することはできても、次に何を書けばいいか誰も教えてくれない瞬間、頭が真っ白になってしまうのです。
「コードがどうなっているかを知っていること」と「自分でコードを書くこと」は、まったく別のスキルです。前者の状態から後者へとステップアップする唯一の方法は、実際に何かを作ること。それも、自分一人の力で。
そして、役に立つものである必要はまったくありません。アプリをリリースするわけでも、オープンソースに貢献するわけでもないのです。必要なのは、動く小さくてくだらないプログラムを、頭のフリーズが解けるまで次から次へと作り続けることです。
そのためにこの記事を書きました。以下に、10分から1時間程度で完成する13個の簡単なPythonプロジェクトを紹介します。それぞれ学ぶことは1つか2つだけで、それ以上はありません。そして最後には、あなた自身が書き、あなたのマシンで動くファイルが手に入ります。
まだ何かを作る心の準備ができていませんか? 心配はいりません! どんな素晴らしい旅も、まずは基礎から始まります。コンピュータの基本を学び、次のステップに進むための揺るぎない土台を築きましょう。
なぜチュートリアルを見るのではなく、自分で作るべきなのか?
チュートリアルは「学んでいる気分」にさせてくれますが、実際にはあなたの代わりに思考を代行してしまっているからです。自分で作るということは、あなた自身が決定を下すということです。変数に名前をつけ、適切なループを選び、なぜコードが期待した数値ではなく None を出力したのかを突き止めなければなりません。
また、小さなプロジェクトはモチベーションの問題も解決してくれます。2週間かかるプロジェクトは響きこそ立派ですが、途中で挫折して二度と戻らなくなるのがオチです。30分のプロジェクトなら今日終わります。動くファイルと小さな「勝利」が手に入り、その勝利こそが、明日またエディタを開く原動力になるのです。

1. 数当てゲーム
定番中の定番。コンピュータが1から100までの数字をランダムに選び、プレイヤーがそれを当てます。当たるまで「高すぎる」「低すぎる」というヒントが出ます。多くのプログラマーが最初に作る本格的なプログラムであり、それには納得の理由があります。
import random
secret = random.randint(1, 100)
guesses = 0
while True:
guess = int(input("Guess a number (1-100): "))
guesses += 1
if guess < secret:
print("Too low")
elif guess > secret:
print("Too high")
else:
print(f"Got it in {guesses} guesses")
break
学べること: whileループ、条件分岐、randomモジュール、そして入力を数値に変換する方法。動くようになったら、制限時間(最大試行回数)を追加して、時間内に当てられなければゲームオーバーになるようにしてみましょう。
2. マッドリブス(言葉遊び)ジェネレーター
ユーザーに名詞、動詞、形容詞などの単語をいくつか入力してもらい、それらをあらかじめ用意したおかしな文章に当てはめて出力します。最初から最後まで10分で完成します。
noun = input("Noun: ")
verb = input("Verb: ")
adjective = input("Adjective: ")
place = input("A place: ")
story = f"Yesterday I went to the {place} and saw a {adjective} {noun} that started to {verb}."
print(story)
学べること: f文字列(f-strings)、連続した複数入力の受け取り、変数を使った文字列の構築。後から長いストーリーを追加したり、ランダムに選ばれるテンプレートのリストを作ったりして、簡単に拡張できます。
3. サイコロ振り
サイコロを1個振る。2個振る。ゲームの夜のために20面ダイスを振る。ロジック自体はわずか2行で、あとはそれをどうラップするかだけです。
import random
def roll(sides=6, count=1):
return [random.randint(1, sides) for _ in range(count)]
print(roll(6, 2)) # rolls two six-sided dice
print(roll(20)) # rolls one d20
学べること: デフォルト値を持つ関数、リスト内包表記、異なる引数での同じ関数の呼び出し。動くようになったら、実行時にユーザーがサイコロの面数と個数を選べるシンプルなメニューを追加してみましょう。
4. シンプルな電卓
足し算、引き算、掛け算、割り算。2つの数値と1つの演算子。そうです、電卓はすでに世の中に存在します。しかし、そこが重要なのではありません。重要なのは、自分でパーツを組み合わせ、最初に何を見落としていたかに気づくことです。
def calc(a, b, op):
if op == "+": return a + b
if op == "-": return a - b
if op == "*": return a * b
if op == "/":
if b == 0:
return "Can't divide by zero"
return a / b
a = float(input("First number: "))
op = input("Operator (+, -, *, /): ")
b = float(input("Second number: "))
print(calc(a, b, op))
学べること: 関数の作成、ifによる分岐、そして厄介なエッジケース(ゼロ除算)の処理。挑戦してみたいですか? 連続した計算(チェーン演算)機能を追加してみましょう。
5. じゃんけんゲーム
自分が手を出し、コンピュータが手を出し、ルールに従って勝敗を決めます。小さなゲームループを練習したり、ルックアップテーブルとしての辞書(dictionary)の扱いに慣れたりするのに最適です。
import random
options = ["rock", "paper", "scissors"]
wins_against = {"rock": "scissors", "paper": "rock", "scissors": "paper"}
you = input("Pick rock, paper, or scissors: ").lower()
cpu = random.choice(options)
print(f"Computer picked {cpu}.")
if you == cpu:
print("Tie")
elif wins_against[you] == cpu:
print("You win")
else:
print("Computer wins")
学べること: 高速な検索のための辞書、random.choice、文字列の比較。全体をwhileループで囲み、ラウンドごとのスコアを記録できるようにすれば、半日で小さなゲームの完成です。
6. パスワードジェネレーター
英字、数字、記号を使って、指定された文字数(N文字)のランダムなパスワードを生成します。実用的で、簡単で、15分で完成します。実際に手元に残して使いたくなるようなツールです。
import random
import string
def make_password(length=12):
pool = string.ascii_letters + string.digits + string.punctuation
return "".join(random.choice(pool) for _ in range(length))
print(make_password(16))
学べること: stringモジュール、文字を1つの文字列に結合する方法、プールからランダムに文字を抽出する方法。記号を嫌うシステム(意外と多いものです)のために、記号を除外するスイッチを追加してみましょう。
7. ターミナルで動くToDoリスト
ターミナル上で動く、シンプルな「追加 / 一覧表示 / 削除」メニュー。データベースも面倒な設定も不要。プログラムを終了するまで保持されるPythonのリストだけで作ります。これだけで十分に学ぶ価値があります。
todos = []
while True:
cmd = input("Command (add/list/remove/quit): ")
if cmd == "add":
todos.append(input("Task: "))
elif cmd == "list":
for i, t in enumerate(todos, 1):
print(f"{i}. {t}")
elif cmd == "remove":
idx = int(input("Index to remove: ")) - 1
if 0 <= idx < len(todos):
todos.pop(idx)
elif cmd == "quit":
break
学べること: メニュー駆動型プログラム、リストの変更、enumerate、そして1から始まる番号付けのちょっとしたコツ。次のバージョンでは、タスクをテキストファイルに保存して、プログラムを終了してもデータが消えないようにしてみましょう。そうすると、一気に本物のアプリらしくなります。
Coddyは、ゲーム感覚の連続記録(ストリーク)、XP、そしてモチベーションが下がったときでもアプリを開きたくなるような一口サイズのレッスンで、Pythonの練習を毎日の習慣に変えます。
8. 文字数・単語数カウンター
テキストを貼り付けると、単語数、文字数、そして最も頻出する単語を返してくれます。文字数制限の厳しい文章を書くときに便利です(意識し始めると、そうした制限は意外と多いものです)。
from collections import Counter
text = input("Paste your text: ")
words = text.split()
chars = len(text)
most_common = Counter(words).most_common(1)
print(f"Words: {len(words)}")
print(f"Characters: {chars}")
print(f"Most common word: {most_common[0][0]} ({most_common[0][1]} times)")
学べること: collectionsモジュール、.split()、そしてCounterが返す値の読み取り。より良い結果を得るために、"the" や "and" などの短い単語(ストップワード)を除外してみてください。そうしないと、最頻出単語が常に "the" になってしまい、何の役にも立ちません。
9. チップ計算ツール
お会計の総額、チップの割合、割り勘の人数。自分が書いたことすら忘れたずっと後になっても、実際に使いたくなるような便利な小ツールです。
bill = float(input("Bill total: "))
tip_pct = float(input("Tip percentage (e.g., 18): "))
people = int(input("How many people: "))
tip = bill * (tip_pct / 100)
total = bill + tip
per_person = total / people
print(f"Tip: {tip:.2f}")
print(f"Total: {total:.2f}")
print(f"Per person: {per_person:.2f}")
学べること: 算術演算子、入力を数値に変換する方法、:.2fを使った小数点以下2桁での丸め処理。1人あたりの金額を切り上げるように拡張して、割り勘の際にお金が足りなくなるのを防ぎましょう。
10. カウントダウンタイマー
秒数を入力すると、プログラムがゼロに向かってカウントダウンします。非常にシンプルですが、完成すれば休憩タイマーやポモドーロ・テクニックに実際に使えて満足感があります。
import time
seconds = int(input("Seconds: "))
while seconds >= 0:
mins, secs = divmod(seconds, 60)
print(f"{mins:02d}:{secs:02d}", end="\r")
time.sleep(1)
seconds -= 1
print("Time's up ")
学べること: timeモジュール、数値を分と秒に分割するdivmod、そして同じ行をその場で更新する\rのテクニック。ターミナルにテキストの山を吐き出す代わりに、end="\r"を使うことで、タイマーの動きが一気に本格的になります。
11. ランダム名言ジェネレーター
名言(モチベーションが上がるもの、面白いもの、プログラミング関連など、お好みのもの)のリストを用意し、実行するたびにランダムに1つ出力します。簡単すぎるように思えるかもしれませんが、とにかく作ってみましょう。
import random
quotes = [
"The only way to learn a new programming language is by writing programs in it.",
"Programs must be written for people to read, and only incidentally for machines to execute.",
"Premature optimization is the root of all evil.",
"Simplicity is the soul of efficiency.",
"Code is like humor. When you have to explain it, it's bad.",
]
print(random.choice(quotes))
学べること: リストの基本、random.choice、そしてこの言語で最も小さく実用的なプログラム。ターミナルの起動スクリプトに組み込んで、シェルを開くたびに新しい名言が表示されるようにしてみましょう。こうした小さくてくだらない工夫が、コーディングを静かに楽しくしてくれます。
12. ハングマン(簡易版)
秘密の単語を決め、ダッシュ(下線)で伏字にして表示し、ユーザーにアルファベットを推測させます。6回間違えたらゲームオーバーです。ここにある他のプロジェクトよりは少し重いですが、シンプルに作れば1時間ほどで完成します。
import random
words = ["python", "syntax", "variable", "function", "module"]
secret = random.choice(words)
guessed = set()
wrong = 0
while wrong < 6:
display = "".join(c if c in guessed else "_" for c in secret)
print(display)
if "_" not in display:
print("You won")
break
letter = input("Guess a letter: ").lower()
if letter in secret:
guessed.add(letter)
else:
wrong += 1
print(f"Wrong. {6 - wrong} tries left.")
else:
print(f"You lost. The word was {secret}.")
学べること: 集合(set)、条件付きでの文字列構築、そしてあまり知られていない while-else(ループが break せずに終了した場合にのみ else が実行されます)。用意した数個の単語に飽きてきましたか? 代わりにファイルから読み込むようにしてみましょう(すぐに飽きが来るはずです)。
13. 単位変換ツール
一般的な単位の変換を行います(摂氏から華氏、キロメートルからマイル、キログラムからポンドなど)。実用的で、すぐに完成し、後で「作っておいてよかった」と思うようなツールです。
def c_to_f(c):
return c * 9/5 + 32
def km_to_mi(km):
return km * 0.621371
def kg_to_lb(kg):
return kg * 2.20462
print("1. Celsius to Fahrenheit")
print("2. Kilometers to miles")
print("3. Kilograms to pounds")
choice = input("Pick a converter: ")
value = float(input("Value: "))
if choice == "1":
print(c_to_f(value))
elif choice == "2":
print(km_to_mi(value))
elif choice == "3":
print(kg_to_lb(value))
学べること: 1つのファイルに複数の小さな関数をまとめる方法、基本的なメニュー、ユーザーの入力に応じた分岐。通常の変換が動くようになったら、逆変換(華氏から摂氏、マイルからキロメートルなど)も追加してみましょう。同じ考え方で、半分の労力で2倍の練習になります。
プロジェクトを自分の血肉にする方法
1つのプロジェクトを作るのは一瞬の出来事です。しかし、2週間毎日作り続けることは「習慣」になります。Pythonの初心者から抜け出せる人とそうでない人の違いは、才能や時間の有無ではありません。練習を継続できているかどうかです。
習慣化に役立ついくつかのポイントを、重要度の高い順に紹介します。
-
コードはコピペせず、自分でタイピングする! 退屈で反復的な作業に思えるかもしれません。しかし、コードのパターンを目だけでなく「手」に覚えさせる唯一の方法です。記憶を頼りに初めて
import randomと打ち込んだ瞬間、何かがカチッと噛み合うのを感じるはずです。 -
わざと壊してみる。 動くようになったら、1行消してみたり、関数をコメントアウトしたり、変数の名前を変えたりして、何が起こるか観察してみましょう。それを修正するプロセスは、最初にコードを書いたときよりも多くの学びを与えてくれます(これは実際にやってみるまで実感が湧かないものです)。
-
同じプロジェクトを2回作る。 1週間後、数当てゲームをもう一度ゼロから作ってみてください。2回目は、自分が本当に理解して覚えていること(期待していたよりも少ないかもしれませんが、それで全く問題ありません!)を浮き彫りにしてくれます。
-
機能を1つ追加する。 上記のプロジェクトをどれか1つ選び、小さな追加機能を取り付けてみましょう。ToDoリストをファイルに保存する、サイコロの出目を1つずつ表示するなどです。この「ちょっとした追加」こそが最大の学びになります。なぜなら、あなたのバージョンの作り方を正確に書いた解説書はどこにもないからです。
もし「毎日の練習」がどうしても続かないのであれば、それこそがCoddyが存在する理由です。1回わずか5分のPythonレッスン、モチベーションが下がったときに引き戻してくれるストリーク(連続記録)システム、そして行き詰まったときにレッスン内でAIのBugsyがヒントをくれる機能が用意されています。
Pythonを含むすべてのコースは無料で始められます。私たちは、まさに今のあなたのような状況(チュートリアルは終えたけれど、まだ自分に自信が持てず、夜の時間を丸ごと潰さずに練習を重ねたいと考えている状態)のためにこのサービスを作りました。
次は何を作るべきか?
上記のプロジェクトが簡単すぎると感じ始めたら、あなたはすでに目指していた境界線を越えています。素晴らしい成果です! 次のステップは中級レベルのプロジェクトです。1つか2つのライブラリを導入し、ファイルやネットワークの入出力を少し伴うようなものです。ステップアップのためのアイデアをいくつか紹介します。
requestsライブラリと無料のお天気APIを使ったお天気アプリBeautifulSoupを使って、普段読んでいるサイトから見出しを取得するウェブスクレイパー- いくつかの部屋とアイテムリスト(インベントリ)を備えたテキストベースのアドベンチャーゲーム
- セッションをCSVファイルに記録するポモドーロタイマー
- ランダムなジョークを表示する1ページのシンプルなFlaskアプリ
これらはどれも高度なものではありません。すでに知っている2〜3の知識に、新しいモジュールを1つ組み合わせただけです。一番楽しそうだと思えるものを選んでください。それこそが、あなたが実際に最後まで完成させられるプロジェクトだからです。
チュートリアルは、あなたを突き放して「自分で考えなさい」と求めた瞬間に機能しなくなります。プロジェクトは、たとえくだらないものであっても、あなたに思考を強制します。十分に数をこなせば、チュートリアルの罠はもう罠ではなくなります。
Coddyは、5分間のPythonレッスン、毎日のストリーク、および答えを教えるのではなくヒントをくれるAIアシスタントのBugsyによって、受動的な学習から脱却し、実際のコーディングへとあなたを導きます。
Share this article
About the Author
Coddy Team
Editorial Team
Frequently Asked Questions
初心者にとって最も簡単なPythonのプロジェクトは何ですか?
数当てゲームが定番の答えです。短く、1つのプログラムの中に入力、ループ、条件分岐が収まっており、実行すると実際のゲームのように感じられます。while ループの役割を学んだばかりの人でも、ほとんどの人が20分ほどで完成させることができます。
簡単なPythonプロジェクトにはどのくらいの時間がかかるはずですか?
10分から1時間程度です。もし1つのプロジェクトに3時間も費やしているなら、それは今のあなたのレベルに対して難しすぎるか、デバッグの泥沼にはまってしまっている可能性があります(一度そこから抜け出す価値があります)。もっと小さなプロジェクトを選んで完成させ、それから戻ってきましょう。
これらのプロジェクトを行うために、何かインストールする必要はありますか?
ローカルで実行したい場合は必要ですが、そうでない場合は不要です。python.org から Python をインストールするのには5分ほどしかかかりません。あるいは、インストールを完全にスキップして、Coddy 内にあるようなブラウザ上のプレイグラウンドで実行することもできます。これがセットアップ不要の選択肢です。
これらのPythonプロジェクトは履歴書に書くのに適していますか?
単体では、いいえ、適していません。履歴書に載せるプロジェクトには、通常、小規模なWebアプリ、職場で実際に何かを自動化するために使用したスクリプト、オープンソースプロジェクトへの貢献など、より深い内容が必要です。ここにある13のプロジェクトは、ポートフォリオに載せる作品ではなく、自信をつけるためのステップ(踏み台)です。これらは、後から履歴書に書けるようなものを構築するための準備となります。
これらのプロジェクトからどのようなPythonの概念を学べますか?
13のプロジェクト全体を通して、変数、入力と出力、条件分岐、ループ、関数、リスト、辞書、セット、random モジュール、time モジュール、f-strings、リスト内包表記、そして collections や string などのいくつかの標準ライブラリのモジュールに触れることができます。これは、この言語の実用的な基礎をしっかりとカバーしています。
コードが動かない場合はどうすればよいですか?
エラーメッセージを読んでください。初心者のエラーのほとんどは、何が間違っているかをほぼ正確に示しており、通常はパニックになり始めた行のすぐ上の行に書かれています。エラーメッセージをGoogleで検索したり、Bugsy のようなAIアシスタントに説明を求めたり、フォーラムに貼り付けたりしてみましょう。デバッグは、コーディングと同じように、繰り返し練習することで身につくスキルです。
これらのプロジェクトはスマートフォンでできますか?
はい、できます。Pythonは、コードプレイグラウンドが組み込まれている Coddy アプリを含む、モバイルのコーディング環境で動作します。手のひらサイズの画面でエンタープライズ向けのソフトウェアを書くことはありませんが、小さな練習用プロジェクトなら問題なく動作します。また、多くの人がノートPCよりもスマートフォンの方が、より多くの練習時間を確保できています。
簡単なPythonプロジェクトの次のステップは何ですか?
より多くの概念を組み合わせた中級プロジェクトです。小さなWebスクレイパー、APIクライアント、ページを表示する Flask や Django のアプリ、フォルダ内のファイルを処理するスクリプトなどです。新しいライブラリを取り入れ、外部の何かに接続するものはすべて、有用な次のステップとなります。自分の生活の中の小さな問題を解決するものを選んでみてください。それこそが、最後まで完成させられるプロジェクトです。



