#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):
Ваш скрипт генерирует новые числа каждый раз, когда вы его вызываете:
- Первый вызов, генерируемые и отображаемые случайные числа
- Второй вызов, генерируются новые случайные числа и сравниваются с тем, что вводит пользователь (его ответ основан на ранее сгенерированных числах).
Одной из возможностей (если вы рассматриваете пользователя, который не настраивает исходный код веб-страницы) было бы записать случайные числа, сгенерированные на первом шаге, в <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:
Вы создаете новый вопрос и ответ перед проверкой пользовательского ввода.
Вы должны сохранить вопрос и / или ответ в сеансе пользователя (на стороне сервера, чтобы пользователь не мог обмануть) и использовать это для сравнения с вводом.