アニメ風ルーレットをPythonで再現

チャッピー先生に教えてもらう少女

こんにちは、プログラミング初心者のハナマルコです。

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() を使って、抽選のアニメーションがスムーズに動くように遅延を加えています。
ルーレットで当選者を決める
Pythonでルーレット抽選をしてみた
ハナマルコ

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

チャッピー先生

楽しいですよね。こうやって、演出を加えるともっと面白くなります。

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でアニメ風抽選ルーレットを作ろう 今ココ

当ブログは基本的にリンクフリーです。リンクを行う場合の許可や連絡は不要です。

チャッピー先生に教えてもらう少女

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
読みたいところに飛べる目次