はじめに
プログラミング学習は時に難しく感じることもありますが、楽しいプロジェクトに取り組むことで継続的なモチベーションを維持できます。Python は初心者にも優しく、同時に強力な機能を持つ言語です。今回は、Python を使って実装できる面白いネタやプロジェクトのアイデアをご紹介します。週末のハッキングや、プログラミング学習の実践課題としてぜひ活用してください!
コマンドラインで動作するシンプルなテキストアドベンチャーゲームは、Python の基本構文と条件分岐を学ぶのに最適です。
def start_adventure():
print("暗い森の中で目を覚ました。どうする?")
print("1: 北へ進む")
print("2: 東へ進む")
print("3: 助けを叫ぶ")
choice = input("> ")
if choice == "1":
print("北へ進むと小さな小屋を見つけた...")
elif choice == "2":
print("東へ進むと崖に出た。遠くに街が見える...")
elif choice == "3":
print("叫んだが、返事はない。代わりに何かが近づいてくる音が...")
else:
print("有効な選択肢を入力してください")
start_adventure()
start_adventure()
このシンプルな構造から始めて、複数の部屋や状態を管理するゲームへと発展させることができます。
Python の自然言語処理ライブラリを使って、特定のキーワードについての Twitter/X の投稿を分析し、人々の感情を可視化するプロジェクトはいかがでしょうか。
import tweepy
from textblob import TextBlob
import matplotlib.pyplot as plt
auth = tweepy.OAuthHandler("CONSUMER_KEY", "CONSUMER_SECRET")
auth.set_access_token("ACCESS_TOKEN", "ACCESS_TOKEN_SECRET")
api = tweepy.API(auth)
search_term = "Python programming"
tweets = tweepy.Cursor(api.search_tweets, q=search_term, lang="en").items(100)
sentiments = []
for tweet in tweets:
analysis = TextBlob(tweet.text)
sentiments.append(analysis.sentiment.polarity)
plt.hist(sentiments, bins=[-1, -0.5, 0, 0.5, 1])
plt.title(f"Sentiment Analysis: {search_term}")
plt.xlabel("Sentiment Polarity")
plt.ylabel("Number of Tweets")
plt.show()
3. デスクトップペット
tkinter や PyQt などのGUIライブラリを使って、デスクトップ上を動き回る小さなペットプログラムを作成できます。
import tkinter as tk
import random
import time
class DesktopPet:
def __init__(self, master):
self.master = master
self.master.overrideredirect(True)
self.master.geometry("100x100+300+300")
self.master.wm_attributes("-topmost", True)
self.master.wm_attributes("-transparentcolor", "white")
self.canvas = tk.Canvas(master, width=100, height=100, bg="white", highlightthickness=0)
self.canvas.pack()
self.face = self.canvas.create_oval(20, 20, 80, 80, fill="yellow")
self.eye1 = self.canvas.create_oval(35, 40, 45, 50, fill="black")
self.eye2 = self.canvas.create_oval(55, 40, 65, 50, fill="black")
self.mouth = self.canvas.create_arc(35, 50, 65, 75, start=0, extent=180, fill="red")
self.move()
def move(self):
x = random.randint(-5, 5)
y = random.randint(-5, 5)
self.canvas.move(self.face, x, y)
self.canvas.move(self.eye1, x, y)
self.canvas.move(self.eye2, x, y)
self.canvas.move(self.mouth, x, y)
self.master.after(100, self.move)
root = tk.Tk()
pet = DesktopPet(root)
root.mainloop()
Python の qrcode ライブラリを使って、屋内や屋外で遊べる宝探しゲームの仕組みを作れます。各QRコードには次のヒントが含まれており、最終的に「宝物」にたどり着くという仕掛けです。
import qrcode
import random
import string
hints = [
"次は冷蔵庫の下を探せ",
"本棚の赤い本の中にある",
"テレビの裏側を確認してみよう",
"最後のヒント:宝物は枕の下だ!"
]
for i, hint in enumerate(hints):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(hint)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save(f"hint_{i+1}.png")
print("QRコードの生成が完了しました。印刷して宝探しを始めましょう!")
5. 天気に応じて音楽を提案するアプリ
現在の天気を取得し、その日の気分に合った音楽をSpotifyから提案するスクリプトも面白いでしょう。
import requests
import spotipy
from spotipy.oauth2 import SpotifyOAuth
def get_weather(city):
api_key = "YOUR_API_KEY"
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"
response = requests.get(url)
data = response.json()
return data["weather"][0]["main"]
def get_genre_for_weather(weather):
weather_to_genre = {
"Clear": "happy",
"Clouds": "indie",
"Rain": "rainy-day",
"Snow": "chill",
"Thunderstorm": "epic",
"Drizzle": "acoustic",
"Mist": "ambient"
}
return weather_to_genre.get(weather, "pop")
def get_spotify_recommendations(genre):
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
client_id="YOUR_CLIENT_ID",
client_secret="YOUR_CLIENT_SECRET",
redirect_uri="YOUR_REDIRECT_URI",
scope="user-library-read"
))
results = sp.recommendations(seed_genres=[genre], limit=5)
return [(track["name"], track["artists"][0]["name"]) for track in results["tracks"]]
city = "Tokyo"
weather = get_weather(city)
genre = get_genre_for_weather(weather)
recommendations = get_spotify_recommendations(genre)
print(f"現在の{city}の天気: {weather}")
print(f"おすすめの{genre}ジャンルの曲:")
for i, (track, artist) in enumerate(recommendations, 1):
print(f"{i}. {track} - {artist}")
6. 自動迷路生成器と解決アルゴリズム
アルゴリズムの学習として、迷路を自動生成し、それを解くプログラムを作成することもチャレンジングです。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import random
def create_maze(width, height):
maze = np.ones((height, width))
for i in range(1, height - 1):
for j in range(1, width - 1):
if i % 2 == 1 and j % 2 == 1:
maze[i, j] = 0
def dig(x, y):
directions = [(0, 2), (2, 0), (0, -2), (-2, 0)]
random.shuffle(directions)
for dx, dy in directions:
nx, ny = x + dx, y + dy
if 1 <= nx < width - 1 and 1 <= ny < height - 1 and maze[ny, nx] == 1:
maze[ny, nx] = 0
maze[y + dy // 2, x + dx // 2] = 0
dig(nx, ny)
start_x, start_y = 1, 1
maze[start_y, start_x] = 0
dig(start_x, start_y)
return maze
maze = create_maze(21, 21)
plt.figure(figsize=(10, 10))
cmap = ListedColormap(['white', 'black'])
plt.imshow(maze, cmap=cmap)
plt.title("Generated Maze")
plt.axis('off')
plt.show()
7. 音声コマンドで操作するデスクトップアシスタント
Python の音声認識と自然言語処理を組み合わせて、簡単な音声アシスタントを作ることも可能です。
import speech_recognition as sr
import pyttsx3
import datetime
import webbrowser
import os
recognizer = sr.Recognizer()
engine = pyttsx3.init()
def speak(text):
engine.say(text)
engine.runAndWait()
def listen():
with sr.Microphone() as source:
print("聞いています...")
recognizer.adjust_for_ambient_noise(source)
audio = recognizer.listen(source)
try:
command = recognizer.recognize_google(audio, language="ja-JP")
print(f"認識した言葉: {command}")
return command.lower()
except:
print("聞き取れませんでした")
return ""
def process_command(command):
if "こんにちは" in command:
speak("こんにちは!何かお手伝いできることはありますか?")
elif "時間" in command:
now = datetime.datetime.now()
speak(f"現在の時間は{now.hour}時{now.minute}分です")
elif "ブラウザ" in command or "インターネット" in command:
speak("ブラウザを開きます")
webbrowser.open("https://www.google.com")
elif "終了" in command:
speak("さようなら!")
return False
return True
speak("音声アシスタントを起動しました")
running = True
while running:
cmd = listen()
if cmd:
running = process_command(cmd)
まとめ
Python を使った面白いプログラミングネタをご紹介しました。これらのプロジェクトは、学習の一環として取り組むことで、プログラミングスキルを楽しく向上させることができます。最初は小さく始めて、徐々に機能を追加していくことをおすすめします。
上記のスクリプトはあくまでも基本的なものですので、自分なりにカスタマイズしたり、新しい機能を追加したりして、オリジナルのプロジェクトに発展させてみてください。