Сравнение пользовательского ввода с данными, генерируемыми случайным образом

#python #random #cgi #compare #flow

#python #Случайный #Сравнить

Вопрос:

Я написал cgi-скрипт на python для генерации случайных чисел и сложения их вместе, а затем прошу пользователя дать ответ.

Но даже если ответ пользователя был правильным, он выдает ему ошибку. Ответ не будет правильным. Проблема в потоке :

 #!/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/htmln")
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

Кто-нибудь знает, что мне следует сделать, чтобы исправить поток? Каждый раз он генерирует новые числа

Примечание: это не ошибка типа, это логическая ошибка

Ответ №1:

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

попробуйте это вместо:

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

Ваш скрипт генерирует новые числа каждый раз, когда вы его вызываете:

  1. Первый вызов, генерируемые и отображаемые случайные числа
  2. Второй вызов, генерируются новые случайные числа и сравниваются с тем, что вводит пользователь (его ответ основан на ранее сгенерированных числах).

Одной из возможностей (если вы рассматриваете пользователя, который не настраивает исходный код веб-страницы) было бы записать случайные числа, сгенерированные на первом шаге, в <input type="hidden" name="x" value="123"/> теги и учитывать их при оценке ответа.

Комментарии:

1. Спасибо, но проблема не в этом, проблема в том, что данные продолжают меняться, и пользователь не ответит на правильный ответ, потому что вопрос был изменен

2. @Barakat — смотрите мой ответ сейчас. Ваши числа повторно генерируются при каждом вызове скрипта.

Ответ №2:

Если cgi.FieldStorage() — это сопоставление string -> строка, вы должны преобразовать входные данные:

 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"
  

Комментарии:

1. Спасибо, но это не проблема, это логическая проблема

Ответ №3:

Вы создаете новый вопрос и ответ перед проверкой пользовательского ввода.

Вы должны сохранить вопрос и / или ответ в сеансе пользователя (на стороне сервера, чтобы пользователь не мог обмануть) и использовать это для сравнения с вводом.