Pythonでじゃんけんポイっ 初心者向け Windows ローカルサーバで動かそう


この記事は、Django Girls Japan Python初級者向け、
「Pythonでじゃんけんゲームを作ろう」の勉強会用資料です。
尚、記載者も初心者のため、何らかの不具合などござましたら申し訳ございません。
記載者環境:Windows 10 python3.5

CGIサーバー

http.serverモジュールを使うと、Pythonで書いたプログラムをWebサーバの中で
実行する事が可能です。
Webサーバを用意したり、モロモロの設定をしなくても手軽にWebアプリケーションを作って
ためす事ができます。

今回は
Pythonでじゃんけんポイっ
で作成したじゃんけんゲームをもとに、ブラウザ上で動かすものを作ります。

ファイルの構造は以下のようにします。

コマンドプロンプトでjankenフォルダにいる状態で
python -m http.server --cgi
と入力し、エンターキーを押すとローカルサーバが起動します。
(Python2の場合は python -m CGIHTTPServer と入力してください。)

これで、ブラウザ上でゲームを動かす事ができるようになります。

HTMLのソース

jankenフォルダ直下におく、htmlのソースです。

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> </head>
<body>
  <center><br><br>
  <form action="/cgi-bin/janken.py" method="POST"><h1><font color="#FF7F50">じゃーんけーん</font></h1><br /><br />
    <font size="5"><input type="radio" name="janken" value=1>グー<br />
    <input type="radio" name="janken" value=2>チョキ<br />
    <input type="radio" name="janken" value=3>パー<br /><br /></font>
    <input type="submit" name="submit" />
  </form>
  </center>
</body>
</html>

  <form action="/cgi-bin/janken.py" method="POST">

ここで、このページからのリクエストをcgi-binフォルダ下にあるjanken.pyにわたす事ができます。
(htmlのソースの詳細は、ここでは割愛いたします。)

Pythonファイル

janken/cgi-bin フォルダ下にあるjanken.pyのソースです。

# -*- coding: utf-8 -*-
# !/usr/bin/env python

import cgi
import random

form = cgi.FieldStorage()

dic = {"1": "グー", "2": "チョキ", "3": "パー"}

user = form.getfirst('janken')
user_choice = dic[user]

choice_list = ["1", "'2", "3"]
pc = dic[random.choice(choice_list)]

draw = '<font color="#32CD32">DRAW</font>'
win = '<font color="#FF7F50">You Win!!</font>'
lose = '<font color="#0000FF">You lose!!</font>'

if user_choice == pc:
    judge = draw
else:
    if user_choice == "グー":
        if pc == "チョキ":
            judge = win
        else:
            judge = lose

    elif user_choice == "チョキ":
        if pc == "パー":
            judge = win
        else:
            judge = lose

    else:
        if pc == u"グー":
            judge = win
        else:
            judge = lose


html_body = """
<html><body><center><br><br><br>
あなたが選んだのは %s<br><br>
コンピュータが選んだのは%s<br><br>
<font size="5"> 結果は %s </font><br><br>
<a Href ="http://127.0.0.1:8000/janken.html">戻る</a>
</center></body></html>""" % (user_choice, pc, judge)

print("Content-type: text/html\n")
print(html_body)