2010-10-13 3 views
1
import sys 

print 'Content-Type: text/html' 
print '' 

print '<pre>' 
# Read the form input which is a single line 
guess = -1 
data = sys.stdin.read() 
# print data 
if data == []: 
    print "Welcome to Josh's number game" 
try: 
    guess = int(data[data.find('=')+1:]) 
except: 
    guess = -1 
print 'Your guess is', guess 
answer = 42 
if guess < answer : 
    print 'Your guess is too low' 
if guess == answer: 
    print 'Congratulations!' 
if guess > answer : 
    print 'Your guess is too high' 
print '</pre>' 
print '''<form method="post" action="/"> 
Enter Guess: <input type="text" name="guess"><br> 
<input type="submit"> 
</form>''' 

À l'heure actuelle, le programme vous indique si votre estimation est trop faible, trop élevée ou trop droite. Je veux ajouter deux autres messages, un pour quand quelqu'un ne saisit aucune entrée dans le champ. Et un autre pour quelqu'un qui entre une entrée invalide (comme une chaîne ou quelque chose) au lieu d'un nombre. Mon champ data == [] est destiné à ne montrer aucune entrée dans le champ, mais cela ne fonctionne pas comme je le pensais. Pouvez-vous aider?question de deviner numéro de python

Répondre

1

sys.stdin.read() vous donnera une chaîne vide s'il n'y a pas d'entrée, donc data == [] devrait être
data == ''. Le message pour entrée invalide est probablement mieux placé dans la clause except: que vous avez déjà (vous aurez besoin de réorganiser votre flux de contrôle un peu pour qu'il devienne exclusif avec la partie vérification des nombres).

En outre, vous pouvez trouver the cgi module utile pour ce que vous semblez faire.

+0

Je n'ai jamais entendu parler d'un module cgi. Pouvez-vous l'expliquer un peu plus? – Josh

+0

J'ai lié à la documentation pour cela. Fondamentalement, il va analyser les données HTTP POST pour vous. – zwol

+0

Pouvez-vous me dire quelle est la commande pour valider le code pour s'assurer qu'il s'agit d'une entrée valide. Dois-je utiliser data.strip() pour ça aussi? – Josh

1

data est une chaîne et ne sera jamais égale à [], qui est une liste. Essayez data.strip() == "".

EDIT: Il me vient à l'esprit que vous avez probablement utilisé sys.stdin.readlines(), retourner une liste. Mais au lieu de "réparer" cela, je vous recommande fortement de suivre les conseils de @ Zack concernant CGI.