Je suis très novice en python et en programmation et je veux imprimer la chaîne "forward" à chaque fois que j'appuie sur "w" sur le clavier. C'est un test que je vais transformer en télécommande pour un véhicule motorisé. Pourquoi est-ce que j'imprime simplement chaque touche que je tape?si la déclaration incluant raw_input ne fait qu'imprimer ce que je tape sur le clavier
Répondre
En Python 2.x, la fonction raw_input affichera tous les caractères appuyés et retournera à la réception d'un retour à la ligne. Si vous voulez un comportement différent, vous devrez utiliser une fonction différente. Voici une version portable de getch pour Python, il retournera chaque pression de touche:
# Copied from: stackoverflow.com/questions/510357/python-read-a-single-character-from-the-user
def _find_getch():
try:
import termios
except ImportError:
# Non-POSIX. Return msvcrt's (Windows') getch.
import msvcrt
return msvcrt.getch
# POSIX system. Create and return a getch that manipulates the tty.
import sys, tty
def _getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
return _getch
getch = _find_getch()
Il peut être utilisé comme ceci:
while True:
if getch() == "w":
print "forward"
raw_input
lit une ligne entière d'entrée. La ligne que vous êtes saisie est rendu visible pour vous, et vous pouvez faire des choses comme le type texte:
aiplanes
aller à gauche quelques caractères pour corriger votre erreur typographique:
airplanes
revenir à la fin et supprimer un caractère parce que vous ne vouliez pas faire au pluriel:
airplane
et puis appuyez sur Entrée et raw_input
sera retur n "airplane"
. Il ne revient pas immédiatement lorsque vous appuyez sur une touche du clavier.
Si vous voulez lire les clés individuelles, vous devrez utiliser les routines de contrôle terminal de niveau inférieur à prendre d'entrée. Sur Unix, le module curses
serait un outil approprié; Je ne suis pas sûr de ce que vous utiliseriez sur Windows. Je ne l'ai pas fait auparavant, mais sous Unix, je pense que vous devez configurer le terminal en mode brut ou en mode rupture et prendre l'entrée avec window.getkey()
ou window.getch()
. Vous devrez peut-être désactiver l'écho avec curses.noecho()
; Je ne suis pas sûr que ce soit inclus dans le mode raw/cbreak.
L'indentation est faux, mais si vous mettez en retrait avant la deuxième ligne à nouveau sur la troisième ligne, cela devrait fonctionner. –
J'ai généralement indenté l'instruction if dans mon code. Je ne sais pas pourquoi cela n'apparaît pas comme ça dans le bloc de code. Si je le fais sinon je reçois une erreur d'indentation de toute façon. – Lujeen