2010-10-13 5 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>''' 

Прямо сейчас программа говорит вам, слишком ли вы слишком высоки или слишком высоко или слишком близко. Я хочу добавить еще два сообщения: один, если кто-то не вводит какие-либо данные в поле. И еще один для тех, кто вводит неверный ввод (например, строку или что-то еще) вместо числа. Мое поле данные == [] предназначены для того, чтобы не показывать ввод в поле, но он не работает, как я думал. Вы можете помочь?python number guessing question

ответ

1

sys.stdin.read() даст вам пустую строку если нет входного сигнала, поэтому data == [] должен быть
data == ''.

Сообщение о недопустимом вводе, вероятно, наилучшим образом помещается в оговорку except:, которую у вас уже есть (вам нужно немного изменить порядок управления, чтобы он стал эксклюзивным с частью проверки количества).

Кроме того, вы можете найти the cgi module полезным для того, как он выглядит.

+0

Я никогда не слышал о модуле cgi. Вы можете объяснить это немного больше? – Josh

+0

Я связался с документацией. В принципе, он будет анализировать данные HTTP POST для вас. – zwol

+0

Можете ли вы сказать мне, какая команда предназначена для проверки кода, чтобы убедиться, что это допустимый ввод. Должен ли я использовать data.strip() для этого? – Josh

1

data - это строка и никогда не будет равна [], что является списком. Попробуйте data.strip() == "".

EDIT: Мне пришло в голову, что вы, вероятно, хотели использовать sys.stdin.readlines(), который делает. Но вместо того, чтобы «исправлять» это, я настоятельно рекомендую вам следовать рекомендациям @ Zack относительно CGI.