On Fri, Dec 4, 2009 at 6:55 PM, northof40 <shearich...@gmail.com> wrote:
> On Dec 5, 12:52 pm, northof40 <shearich...@gmail.com> wrote:
>> Hi - I'm writing a *very* simple program for my kids. It asks the user
>> to give it the answer to a maths question and says "right" or "wrong"
>>
>> They now want a timed version where they would only get so long to
>> respond to the question.
>>
>> I'm thinking of some logic where a raw_input call is executed and then
>> if more than X seconds elapses before the prompt is replied to the
>> process writes a message "Sorry too slow" (or similar).
>>
>> I can't see the wood for the trees here - what's the best way to do
>> this given the rather simple environment it's needed within.
>>
>> Regards
>>
>> richard.
>
> Sorry I should said that based upon other answers I've seen to similar
> questions this needs to run on a windows machine (other answers
> suggest this is more difficult than running on *nix)
>

Simplest solution I could come up with. This is indeed much easier on
*nix (just use select.select on sys.stdin with a timeout).

---
from msvcrt import getch, kbhit, putch
from time import sleep, time

ans = ''
end = time() + 5

print('2 + 2 = ?')

while True:
        while time() < end:
                if kbhit():
                        break
                else:
                        sleep(0.001)
        else:
                ans = None
                break

        char = getch()
        if char == '\r':
                print('')
                break
        ans += char
        putch(char)

if ans is None:
        print('\nSorry too slow')
else:
        try:
                print('right' if int(ans) == 4 else 'wrong')
        except:
                print('not a number')
---

- Max
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to