メソッド eval について質問があります。最初は、フォームからのユーザー入力の回答を処理するために別の Def を作成したかったのです。問題は、ローカル変数を別の def に渡す方法がわからないため、メソッドが機能しないことです。とにかく別の関数ではランダム値が異なります。
基本的に、ran_puzz はデータベースから "2+2" などの値を持つランダムなパズルを引き出します。
rand_puzz = Puzzles.objects.get(id = random_index).パズル
rand_puzz を別の定義に渡す方法がわからなかったので、変数とロジックを "play" という名前の定義内に保持し、"message と ran_puzz" のような複数の値を返すことにしました。
「if eval(rand_puzz)== user_sub_ans;」という行が表示された場合 // これにより構文エラーが発生します
URL:
url(r'^play/$', 'mathgame3.views.play'),
VIEWS: def play(リクエスト)
if request.user.is_authenticated():
number_of_records = Puzzles.objects.count()
random_index = int(random.random()*number_of_records)+1
rand_puzz = Puzzles.objects.get(id = random_index).puzzle
user_sub_ans = request.GET['answer']
if eval(rand_puzz)== user_sub_ans;
message = 'correct'
else:
message = 'incorrect'
return render(request, 'play.html', {'rand_puzz': rand_puzz, 'message': message})
else:
return render_to_response('home.html')
Html: ユーザーがパズルの答えを入力するフォームのコードの一部です。
<form action="/play/" method = "get">
<table style="margin-left:auto; margin-right:auto; width:auto;">
<table style="margin-left:auto; margin-right:auto; width:auto; border:solid 1px">
<tr><td><label for="username">Question:</label></td>
<td>{{rand_puzz}}</td></tr>
<tr><td><label for="answer">Answer:</label></td>
<td><input type="number" name="answer" value="" id="answer"></td></tr>
<td> The answer is: {{message}}</td></tr>
<tr><td></td><td><input type="submit" value="Submit"/></td></tr>
</table>
</table>
</form>
助けていただければ幸いです。