2011-04-13 7 views
0

J'ai écrit un script cgi python pour générer des nombres aléatoires et les ajouter ensemble que de demander à l'utilisateur de donner la réponse.Comparaison des entrées utilisateur aux données générées aléatoirement

Mais même la réponse de l'utilisateur était correcte, cela lui donne tort. La réponse ne sera pas correcte. Le problème se trouve dans le flux:

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

par exemple:


3 + 9

Réponse: [12]


Mauvais :(

Votre réponse: 12 réponse correcte 17

Est-ce que quelqu'un sait ce que dois-je faire pour corriger le flux? Il générer de nouveaux numéros chaque fois

Note: Ce n'est pas une erreur de type, il est logique erreur

Répondre

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

essayer ceci:

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

Votre script génère de nouvelles numéros chaque fois que vous l'appelez:

  1. Premier appel, nombres aléatoires générés et affichés
  2. Deuxième appel, nouveaux nombres aléatoires générés et comparés à ce que l'utilisateur entre (sa réponse est basée sur les nombres précédemment générés).

Une possibilité (si l'on considère un utilisateur, qui ne tweak pas à la source de la page Web) serait d'écrire les nombres aléatoires générés dans la première étape dans <input type="hidden" name="x" value="123"/> balises, et les prendre en compte lors de l'évaluation de la réponse .

+0

Merci, mais ce n'est pas le problème, le problème est que les données changent constamment et que l'utilisateur ne répondra pas à la bonne réponse car la question a été changée –

+0

@Barakat - voir ma réponse maintenant. Vos numéros sont re-générés chaque fois que le script est appelé. – eumiro

0

Si cgi.FieldStorage() est une chaîne -> cartographie chaîne, vous devez convertir l'entrée:

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

Merci mais ce n'est pas le problème, c'est un problème logique –

0

vous générez une nouvelle question et répondre avant de vérifier l'entrée utilisateur.

Vous devez stocker la question et/ou la réponse dans la session de l'utilisateur (du côté du serveur afin que l'utilisateur ne puisse pas tricher) et l'utiliser pour comparer avec l'entrée.

Questions connexes