0

私は乱数を生成し、ユーザーに答えを求めるよりもそれらを加算するための python cgi スクリプトを作成しました。

しかし、ユーザーの答えが正しかったとしても、彼は間違っています。答えは正しくありません。問題はフローにあります:

#!/usr/bin/python2.7

import cgi,sys,random

sys.stderr = sys.stdout

input_field = cgi.FieldStorage()

x = random.randrange(1,20)
y = random.randrange(1,20)

answer = x + y

print("Content-type: text/html\n")
print ("<center>")

if "input" in input_field:

    if input_field["input"].value == answer:
        print("Content-Type content=text/htm")
        print "<br><br><b> Good :D </b"
    else:

        print "<br><br><b> Wrong :( </b><br><br>"
        print "Your Answer :",input_field['input'].value
        print "<br>","Correct Answer",answer
else:

    print "<br><br>",x,"+",y,"<br><br>"
    print("""

<form method=POST action="">
<TR>
<TH align=right>Answer:<TD>
<input type=text name=input>
<TR>

""")

print ("</center>")

例:


3 + 9

答え: [12]


違う :(

あなたの答え : 12 正解 17

フローを修正するために何をすべきか知っている人はいますか? 毎回新しい数字を生成します

注:これは型エラーではなく、論理エラーです

4

3 に答える 3

0
if input_field["input"].value == answer:

代わりにこれを試してください:

if input_field["input"].value.strip() == str(answer):

スクリプトは、呼び出すたびに新しい番号を生成します。

  1. 最初の呼び出し、乱数が生成されて表示されます
  2. 2番目の呼び出しでは、新しい乱数が生成され、ユーザーが入力したものと比較されます(彼の答えは以前に生成された番号に基づいています)。

1つの可能性(Webページのソースを調整しないユーザーを検討する場合)は、最初のステップで生成された乱数を<input type="hidden" name="x" value="123"/>タグに書き込み、回答を評価するときにそれらを考慮に入れることです。

于 2011-04-13T08:26:21.923 に答える
0

ユーザー入力を確認する前に、新しい質問と回答を生成します。

質問および/または回答をユーザーのセッションに保存し (ユーザーがチートできないようにサーバー側に)、それを使用して入力と比較する必要があります。

于 2011-11-04T14:26:11.030 に答える
0

cgi.FieldStorage() が文字列 -> 文字列マッピングの場合、入力を変換する必要があります:

try:
    # first cast the string to an int
    user_input = int(input_field["input"].value)
except ValueError:
   # string 
   print("you must enter an integer")
if user_input == answer:
    print("Content-Type content=text/htm")
    print "<br><br><b> Good :D </b"
于 2011-04-13T08:44:02.980 に答える