-- 目次はこちら。PythonでBINGOの「Webツール」をつくる
-- 記事作成:2019年12月、訂正:2020年6月
BINGO抽選機の作成
インターネット上で検索すると、PythonでBINGO抽選機を作るというお題はPython初心者にとって分かりやすいようで、各種方法は検索してください。
BINGO「Webツール」の抽選機ロジック概要
今回の方法は次の通りです。
- 抽選結果を入れるリスト変数を定義。初期値に0を入れておきます。
- 抽選はnumpyライブラリのrandom.rand()*75 で 0〜74 の一様乱数を取得し、1追加します。標準のrandomでも良かったのですが見本が使ってたので使ってみました。
- 抽選した数字が、抽選結果のリスト変数にあれば、再抽選します。
- 抽選した数字が終戦結果のリスト変数になければ最後尾に追加します。
- 抽選結果のリスト変数の項目数が76になれば抽選はしません。
BINGO「Webツール」の結果表示について
最新の抽選結果は、抽選結果リスト変数の最後尾を表示する。
全抽選結果はそのまま抽選結果リスト変数を表示する。
BINGO「Webツール」のソースコード(基本)
BINGO「Webツール」のソースコードはWeb側のデザインを全く配慮していません。
仕上げの段階で、jinja2の使用方法も合わせて修正したいと思っています。
from flask import Flask
import numpy as np
app = Flask(__name__)
bingo_num = [0]
max_bingo_ball = 75
@app.route('/')
def index_page():
name = "Hello BINGO World!!"
return name
@app.route('/ball')
def ball():
new_ball_num = bingo_num[-1]
name = str(new_ball_num)
return name
@app.route('/list_ball')
def list_ball():
list_ball_num = bingo_num[:]
name = str(list_ball_num)
return name
@app.route('/get_ball')
def get_ball():
global bingo_num
if len(bingo_num) == max_bingo_ball + 1:
name = "MAX"
return name
while True:
get_bingo_ball = int(np.random.rand()*75)+1
if get_bingo_ball in bingo_num:
continue
else:
bingo_num.append(get_bingo_ball)
break
name = '<head><meta name="refresh" content="0;/ball"></head>'
return name
## おまじない
if __name__ == "__main__":
app.run(debug=True)
動作確認
今回、numpyを使用するようにしたため、このままではエラーがでます。
pip install numpy
で追加インストールをしています。
・ main.pyの実行
windowsのコマンドプロンプトを開き、BINGOのソースを保存してるフォルダまで移動します。
その後、python main.py
で実行します。ソースに入力ミスやインデントミスなどがあるとエラーで終了します。
エラーなく実行できると、Webブラウザから動作確認が可能になります。
今回は、/ball, /ball_list, /get_ball が想定通り動作するかを確認します。
・ 実行後のソースの修正
編集の初期値を修正するなどしてソースファイルを保存すると、Flaskは自動でリフレッシュして内容を反映してくれます。
修正ミスでエラー停止する場合は、再度コマンドプロンプトから実行をします。
その場合、途中で生成した抽選結果は残っていないため最初から実施します。
(今後ビンゴカードのプログラムを作成するときには、結果を保存しておかないと大変なことになりそうです)
次回は、ビンゴカードの作成します。
その後、ビンゴカードの入力、判定、作成についてです。
-- 目次はこちら。PythonでBINGOの「Webツール」をつくる