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. 第二次调用,生成新的随机数并与用户输入的内容进行比较(他的答案基于先前生成的数字)。

一种可能性(如果您考虑不调整网页源的用户)是将第一步生成的随机数写入<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 回答