[Python] Lettura buffer di tastiera.

Dario Bertini berdario a gmail.com
Sab 21 Giu 2014 21:18:54 CEST


2014-06-21 3:32 GMT-07:00 Gabriele Battaglia <iz4apu at libero.it>:
> Il programma, che deve girare sotto Windows e in console, sarebbe un test.
> Devono comparire a video delle domande chiuse, quelle a scelta multipla del
> tipo A, B, C oD.
> L’utente deve rispondere premendo la lettera corrispondente alla risposta
> scelta. Ogni domanda prevede, in base al livello di complessità, un diverso
> ammontare di tempo, trascorso il quale, se l’utente non ha ancora risposto,
> si passa alla domanda successiva, oppure una delle risposte sbagliate non è
> più selezionabile.


Per una cosa del genere, probabilmente userei i signals

http://dpaste.com/3MJ5WYT

>>> import signal
>>> def next_question(timeout, interval):
...   print("\ntime's up! next question:\n")
...   raise KeyboardInterrupt()
...
>>> signal.signal(signal.SIGALRM, next_question)
<function next_question at 0x7faead150b70>
>>> questions = ['a', 'b', 'c']
>>> def run_questions():
...   for question in questions:
...     signal.alarm(10)
...     try:
...       print('your answer was: ' + input(question + '?\n'))
...     except KeyboardInterrupt:
...       pass
...   else:
...     print('no more questions!')
...
>>> run_questions()
a?

time's up! next question:

b?
ccc
your answer was: ccc
c?

time's up! next question:

no more questions!
>>>

Ovviamente su windows SIGALRM non lo puoi utilizzare (ma forse con
cygwin puoi?) ma se usi signal.setitimer invece di signal.alarm con un
diverso segnale (forse SIGINT?) dovresti farlo funzionare


Maggiori informazioni sulla lista Python