前提・実現したいこと
ここに質問の内容を詳しく書いてください。
Python3でflaskを利用してWEBでじゃんけんゲームを実行するプログラム
を作成したのでpostで受け取るgetの遷移後のプログラムを実行する部分がどうしても
上手く実行できない為添削をお願いします。
発生している問題・エラーメッセージ
---起きている事象--- プルダウンのグーを選択後、じゃんけんぽんのボタンsubmit後 Internal Server Error となってしまいます。 ---エラーコード--- File "c:/Users/test/server.py", line 19, in post pc = janken[random.choice(choice_list)] TypeError: string indices must be integers
該当のソースコード
from flask import Flask, render_template, request import random app = Flask(__name__) @app.route('/', methods=['GET']) def get(): return render_template('index.html', \ title = 'Form Sample(get)', \ message = 'じゃんけんをはじめます') @app.route('/', methods=['POST']) def post(): radio = {"1": "グー","2": "チョキ","3": "パー"} user = request.form.get('janken') user_choice = radio[user] choice_list = ["1", "2", "3"] pc = radio[random.choice(choice_list)] draw = 'DRAW' win = 'You Win!!' lose = 'You lose!!' 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 == "グー": judge = win else: judge = lose return render_template('index.html', \ title = 'Form Sample(get)', \ message = "結果は%s" % judge ,radio=radio,judge=judge) if __name__ == '__main__': app.run()
該当のソースコード
<body> <h1>{{ title }}</h1> <p>{{ message }}</p> <form action="/" method="POST" enctype="multipart/form-data"> <div> <label for="r1">グー:</label> <input type="radio" id="r1" name="janken" value="1"> </div> <div> <label for="r2">チョキ:</label> <input type="radio" id="r2" name="janken" value="2"> </div> <div> <label for="r3">パー:</label> <input type="radio" id="r3" name="janken" value="3"> </div> <div> <input type="submit" value="じゃんけんぽん!"> </div> </form> </body>
試したこと
1画面目までは表示しますが2画面目以降の
実行箇所にてエラーになってしまいます。
補足情報(FW/ツールのバージョンなど)
Python3.7.7
回答2件
あなたの回答
tips
プレビュー