将用户输入与随机生成的数据进行比较

0 投票
3 回答
941 浏览
提问于 2025-04-16 15:37

我写了一个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

有没有人知道我该怎么修正这个流程?每次都会生成新的数字

注意:这不是输入错误,而是逻辑错误

3 个回答

0

你在检查用户输入之前,先生成一个新的问题和答案。

你应该把这个问题和/或答案存储在用户的会话中(也就是在服务器上,这样用户就不能作弊),然后用这个来和用户的输入进行比较。

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"
0
if input_field["input"].value == answer:

试试这个方法:

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

你的脚本每次调用时都会生成新的数字:

  1. 第一次调用时,生成并显示随机数字
  2. 第二次调用时,生成新的随机数字,并与用户输入的内容进行比较(用户的答案是基于之前生成的数字)。

一种可能的解决办法(假设用户不会修改网页源代码)是把第一次生成的随机数字写入到 <input type="hidden" name="x" value="123"/> 标签中,然后在评估答案时考虑这些数字。

撰写回答