こんにちは、プログラミング初心者のハナマルコです。
SNSでよく見かける「ルーレットで当選者決定!」の演出。くるくる回って「当たり!」と出るあの演出を見たことがありますか?あのワクワク感、実はPythonを使えば簡単に再現できるんです!しかも、Google Colabを使えば、パソコンがなくてもすぐに実行できます。
「でも、あれって難しそう…」と思っていませんか?大丈夫です!本記事では、初心者でも簡単にできる、Pythonを使ったアニメ風の抽選ルーレットを作成します。コードを覚えながら、楽しく実践していきましょう!
実践シリーズを初回から読みたい方:
▶ Pythonで何ができる?初心者がChatGPTと一緒に調べてみた(実践0日目)
その抽選、あなたにも作れます
ある日の朝のいつものチャッピー先生とハナマルコの会話

チャッピー先生〜、SNSのキャンペーンでよく見るルーレット抽選って、Pythonで作れませんか?



Pythonなら、簡単な抽選から、アニメーション付きのルーレットまで、さまざまな演出ができますよ。
それでは今日も一緒に作っていきましよう。
STEP1:超簡単!文字だけで抽選する
まずは、抽選を文字だけで行ってみましょう。Pythonに搭載されているrandom
モジュールを使えば、リストからランダムに名前を選ぶことができます。
import random
# 抽選参加者のリスト
entries = ["はなまるこ", "チャッピー先生", "さとう", "たなか", "いとう"]
# 当選者をランダムに選ぶ
winner = random.choice(entries)
print(f"当選者は『{winner}』さんです!")
# 実行結果
当選者はハナマルコさんです!



randomモジュールってパスワード生成で勉強したヤツだ!
コードの解説:
random.choice()
は、リストからランダムに1つのアイテムを選ぶ関数です。この関数を使うことで、抽選がとても簡単にできます!- これだけでシンプルな抽選機能が完成します。



えっ、たったこれだけで当選者が決まるの!?もっと難しいかと思った〜!



簡単ですよね。次は、ちょっとワクワクする演出を加えて、アニメ風にしてみましょう。
randomモジュールを使ったパスワード生成について解説した記事:
▶ 【実践4日目】Python初心者向け:安全なパスワード自動生成スクリプトを作ってみた
STEP2:Colabで作るアニメ風ルーレット抽選!
次は、少し進んで、くるくる回るアニメ風のルーレット抽選を作ってみましょう。matplotlib
を使って円グラフを描画し、抽選結果をアニメーションで表示します。
import random
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import numpy as np
import time
from IPython.display import clear_output
# 日本語フォントをColabにインストール
!apt-get -y install fonts-ipaexfont > /dev/null
jp_font = fm.FontProperties(fname="/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf")
# 参加者リスト
entries = ["はなまるこ", "チャッピー先生", "さとう", "たなか", "いとう"]
winner_index = random.randint(0, len(entries)-1)
# 抽選アニメーション
for i in range(20):
clear_output(wait=True)
angles = np.random.rand(len(entries))
colors = plt.cm.Paired(np.linspace(0, 1, len(entries)))
plt.figure(figsize=(6,6))
plt.pie(angles, labels=entries, colors=colors,
textprops={'fontproperties': jp_font, 'fontsize': 12})
plt.title("抽選中...", fontproperties=jp_font, fontsize=14)
plt.show()
time.sleep(0.1 + i * 0.01)
# 結果だけを表示
clear_output(wait=True)
highlight_colors = list(plt.cm.Paired(np.linspace(0, 1, len(entries))))
highlight_colors[winner_index] = 'red'
labels = entries.copy()
labels[winner_index] += " ★当選!"
explode = [0.05 if i == winner_index else 0 for i in range(len(entries))]
plt.figure(figsize=(6,6))
plt.pie([1]*len(entries), labels=labels, colors=highlight_colors,
textprops={'fontproperties': jp_font, 'fontsize': 12}, explode=explode)
plt.title("結果発表!", fontproperties=jp_font, fontsize=16)
plt.show()
コードの解説:
アニメーションの実行
clear_output(wait=True)
で毎回グラフを消して、新しいものを描画することで、アニメーションのように見せています。plt.pie()
で円グラフを描画しています。参加者ごとのセクションが色分けされ、当選者が赤色で目立つように設定しています。time.sleep()
を使って、抽選のアニメーションがスムーズに動くように遅延を加えています。





わー、くるくる回ってる!これ、まるで本物のルーレットみたいだ!



楽しいですよね。こうやって、演出を加えるともっと面白くなります。
STEP3:複数当選者を選ぼう!
次は、1人だけでなく複数人の当選者を選ぶ方法を紹介します。random.sample()
を使えば、ランダムに複数の当選者を選ぶことができます。
import random
# 参加者リスト
entries = ["ハナマルコ", "チャッピー先生", "さとう", "たなか", "いとう"]
# 複数当選者をランダムに選ぶ(例:3人)
num_winners = 3
winners = random.sample(entries, num_winners)
print(f"当選者は:{', '.join(winners)}さんです!")
# 実行結果
当選者は:チャッピー先生,さとう,いとうさんです!



私ハズレたのね・・・
コードの解説:
random.sample()
を使うと、リストから指定した人数のランダムな要素を取り出せます。これを利用して、複数の当選者を選ぶことができます。



たくさん当選者を選べるんですね!これなら大勢にプレゼントができる。
STEP4:複数当選者を選ぶルーレット版!
最後に、複数当選者を選ぶルーレットをアニメーションで表示する方法を紹介します。こちらのコードでは、当選者がくるくる回るルーレットの中から選ばれ、結果として複数名の当選者を赤色で表示します。
import random
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import numpy as np
import time
from IPython.display import clear_output
# 日本語フォントをColabにインストール
!apt-get -y install fonts-ipaexfont > /dev/null
jp_font = fm.FontProperties(fname="/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf")
# 参加者リスト
entries = ["はなまるこ", "チャッピー先生", "さとう", "たなか", "いとう"]
# 複数当選者をランダムに選ぶ(例:3人)
num_winners = 3
winners_index = random.sample(range(len(entries)), num_winners)
# 抽選アニメーション
for i in range(20):
clear_output(wait=True)
angles = np.random.rand(len(entries))
colors = plt.cm.Paired(np.linspace(0, 1, len(entries)))
plt.figure(figsize=(6,6))
plt.pie(angles, labels=entries, colors=colors,
textprops={'fontproperties': jp_font, 'fontsize': 12})
plt.title("抽選中...", fontproperties=jp_font, fontsize=14)
plt.show()
time.sleep(0.1 + i * 0.01)
# 結果だけを表示
clear_output(wait=True)
highlight_colors = list(plt.cm.Paired(np.linspace(0, 1, len(entries))))
# 当選者の色を赤に変更
for idx in winners_index:
highlight_colors[idx] = 'red'
labels = entries.copy()
for idx in winners_index:
labels[idx] += " ★当選!"
# 少し外に出して強調
explode = [0.05 if i in winners_index else 0 for i in range(len(entries))]
plt.figure(figsize=(6,6))
plt.pie([1]*len(entries), labels=labels, colors=highlight_colors,
textprops={'fontproperties': jp_font, 'fontsize': 12}, explode=explode)
plt.title("結果発表!", fontproperties=jp_font, fontsize=16)
plt.show()
コードの解説:
random.sample()
: 複数の当選者をランダムに選ぶために使用します。- アニメーションの表示: くるくる回るルーレットのようなアニメーションを表示し、当選者を赤色で強調して表示します。
まとめ
Pythonでの抽選アプリ作成は、シンプルなコードでも十分に面白く、学びながら楽しむことができます。
random
モジュールを使ったシンプルな抽選matplotlib
を使ったアニメ風のルーレット抽選random.sample()
を使った複数当選者の選出
このように、Pythonはアイデアを実現するための強力なツールです。今後はさらに進化させて、応募者リストをCSVから読み込んだり、当選者に自動でメールを送信したりする機能を追加してみるのも良いかもしれません!



Pythonって、こんなにも色んなことができるんですね!次は、さらに面白いことに挑戦したいです。



その意気です。次回も他の面白いアプリを一緒に作りましょう!
これで、あなたもPythonで楽しく学べる抽選アプリの作成ができました!次回も新しいチャレンジを一緒にしていきましょう。
最後まで読んでいただき、ありがとうございました!
実践シリーズで学習を続ける:
ー 【実践0日目】Python入門:ChatGPTと一緒に「Pythonとは?」を調べてみた
ー 【実践1日目】無料で始めるPython学習:ChatGPTと初心者がステップアップする方法
ー 【実践2日目】Python超入門:ChatGPTと学ぶ割り勘・時間計算スクリプト
ー 【実践3日目】Pythonで家計簿&残業代計算:初心者でもできる生活支援スクリプト
ー 【実践4日目】Python初心者向け:安全なパスワード自動生成スクリプトを作ってみた
ー 【実践5日目】Python✕スプレッドシートで作るTODO管理ツール
ー 【実践6日目】初心者がつまずくPythonエラーTOP10をチャッピー先生が解説
ー 【実践7日目】Python初心者向け!Colabでアニメ風抽選ルーレットを作ろう 今ココ