Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Python : Utilisation de touches du clavier
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Python : Utilisation de touches du clavier

Posté le 01/04/2020 08:44

Bonjour à tous,

Dans la continuité des actualités du site tournant pas mal en ce moment autour de l'application Python de Casio et des modules graphiques bientôt disponibles, je vous propose ici une petite astuce.
Après la publication de la première version de l'application python sur les graphs on s'est tous mis à imaginer des librairies de fonctions pour l'écran graphique, le gestion des fichiers ou encore pour le clavier. Je viens de trouver en essayant des bouts de code dans le shell de ma graph90 qu'il y avait un moyen de "controller" une touche du clavier: la touche "AC/On".

Je m'explique, le concept est assez simple: lors de l’exécution d'un programme dans le shell, a part l'instruction input(), seul la touche "AC/On" peut stopper l'exécution d'un script (ou bien une autre instruction aussi.. je ne sait plus ). L'idée est donc d'utiliser le bloc "try/ except" de python pour contrecarrer l'erreur renvoyée par la calto lors de l'arrêt forcé d'un script: "KeyboardInterrupt".

Voici donc un petit script d'exemple:
while(1):
    try:
        for i in range(50): pass
    except KeyboardInterrupt:
        print("Touche AC pressee !")


Vous remarquerez la boucle "for" dans le "try". Après avoir testé je me suis rendu compte qu'un simple "pass" ne fonctionne pas..

Ce code est plus ou moins celui que j'ai utilisé pour tester mon idée, il ne permet donc pas a proprement dit de faire faire quelque chose à la touche AC..

Je vais de mon côté continuer de chercher un code pour appliquer concrètement cette astuce. En attendant je vous laisse a votre imagination !

A+ sur PC


1, 2 Suivante
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 01/04/2020 08:49 | #


Il me semble aussi que la calto renvoie une erreur quand la ram est surchargée.. un truc du genre "MemoryError"..
Donc techniquement on pourrait faire planter la machine en contrecarrant cette erreur de mémoire A moin que je ne n'oublie un détail ..
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 01/04/2020 09:35 | #


Par rapport à l'erreur de mémoire, tu va pas faire grand chose :

Imaginons le code suivant :

a = []
while True:
    try:
        a.append(0)
    except MemoryError:
        a.append(0)


En gros quand on a une MemorError, on essaie d'ajouter un truc en plus à l'array. Ce qui va se passer, c'est juste une exception dans une exception.
Et si tu tente de faire une récursivité dessus (dans le except appeler la méthode pour faire boucler sur l'exception), tu aura juste une RecursionError.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 01/04/2020 09:57 | #


A ok j'avais pas pensé.. mais du coup au niveau de l'astuce g pas dit de bêtises ?
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 01/04/2020 10:00 | #


Non, par contre fait gaffe à comment tu l'utilise pour pas te retrouver bloqué dans une boucle infinie.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 01/04/2020 10:02 | #


Pour le try/except c'est déjà connu, quel est l'intérêt pratique ?
L'écran n'est raffraichit que lorsque l'entrée utilisateur apparaît, ça ne permettrait même pas de faire des QTE.
À la limite un clicker ultra-simpliste, mais ce serait l'équivalent d'utiliser input() sans possibilité de quitter le programme normalement.
ouais ouais
Lephenixnoir Hors ligne Administrateur Points: 24579 Défis: 170 Message

Citer : Posté le 01/04/2020 10:02 | #


Disperseur a écrit :
A ok j'avais pas pensé.. mais du coup au niveau de l'astuce g pas dit de bêtises ?

Rattraper la MemoryError ne t'amènera pas loin parce tu risques de t'en prendre une autre à chaque nouvelle opération ou presque. Attention, beaucoup de choses sont dans le tas en Python. Toute la question est qu'est-ce que tu fais une fois que tu as le contrôle mais plus de mémoire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 01/04/2020 10:07 | #


Lephenixnoir a écrit :
Toute la question est qu'est-ce que tu fais une fois que tu as le contrôle mais plus de mémoire.

Bonne question.. j'ai pas la réponse

Kikoodx a écrit :
Pour le try/except c'est déjà connu, quel est l'intérêt pratique ?

A vrai dire si c'est déjà connu yen à pas J'aurais tenté au moins.

Dark storm a écrit :
Non, par contre fait gaffe à comment tu l'utilise pour pas te retrouver bloqué dans une boucle infinie.

Oui je suis au courant, j'ai déjà expérimenté trois quatre fois

Bon et bien je retiens que ça n'aura pas servit à grand chose contrairement à ce que je pensait. En tout cas merci pour vos retours, j'ai bien pris note !

PS: Je laisse le choix aux admins de supprimer le topic qui n'aura du coup servit qu'à me faire comprendre que c'est pas forcément une bonne idée. Au moins vous pourrez soulager le forum d'un sujet inutile en plus

Ajouté le 01/04/2020 à 10:12 :
En tout cas une librairie python qui permettrait de gérer le système de la calto (clavier, fichiers...) serait bien. Même si il est peu probable que l'on en voit un jour la couleur
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 01/04/2020 10:15 | #


Les topics sont rarement inutiles. Ton intervention a tout à fait sa place sur le forum, et permettra à d'autres qui se posaient les mêmes questions d'avoir des réponses ou de répondre au fil
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 01/04/2020 10:16 | #


Bien vu
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 12/04/2020 23:07 | #


Je pense utiliser ton astuce couplée avec Sprito pour faire une sorte de RP maker je fais des tests et ke vous tiens au courant !
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 13/04/2020 09:46 | #


Comme tu veut mais je n'ais pas testé l'astuce en conditions réelles.. autrement dit je ne dait pas si ça fonctionne comme on l'entends
Kikoodx Hors ligne Ancien labélisateur Points: 3039 Défis: 11 Message

Citer : Posté le 13/04/2020 10:57 | #


J'avais fait des tests hier, j'ajouterai une fonction à Sprito (show_until_ac ?) qui implémente ça de façon limitée et relativement sécurisée.
Dans une boucle de jeu classique, c'est dangereux et instable (si l'erreur se produit durant des opérations importantes, ça coupe court).
ouais ouais
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 13/04/2020 13:13 | #


C vrai que le soucis est que la touche AC est prioritaire sur les processus en cours.. mais normalement, tant que rien ne demande au joueur de presser la touche ...
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 13/04/2020 18:28 | #


Pour info j'ai fait un POC de niaiseux basé sur le principe. Ça marche, mais c'est pas hyper stable (si y'a une seconde interruption pendant le traitement de la première)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 14/04/2020 08:58 | #


J'ai réussi à l'implémenter C'est stable chez moi… enfin, faut pas presser trop longtemps la touche sinon ça quitte… >.< Promis je fait un truc propre et je met en ligne
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 14/04/2020 09:12 | #


C'est ce que j'évoquais en disant que c'était pas stable
Le cas d'une KeyboardInterrupt pendant le traitement d'une KeyboardInterrupt

À voir si avec de la récursivité y'a pas moyen de s'en protéger, mais ça serait vraiment faire du sale xD
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 14/04/2020 09:14 | #


Ah oky

Faut que je teste, mais je pense que la sensibilité est liée à la boucle for du try … Du coup faut jouer entre la précision demandée à l'utilisateur pour n'avoir qu'une seule KeyboardInterrupt et la vitesse…

De manière générale le jeu reste atrocement pas intuitif mais ça marche >.<
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 14/04/2020 13:05 | #


Tant que ça fonctionne
On s'en moque de l'ergonomie
Captainluigi Hors ligne Membre Points: 816 Défis: 1 Message

Citer : Posté le 17/04/2020 12:48 | #


Si vous avez envie d'utiliser la touche enter ( pour mettre en pause un programme , par exemple ) :
try:
  int(input())
except:
   pass

Remarquez input() aurait fait pareil , my bad
Les bons artistes copient, les grands artistes volent. Picasso

Passé ici il y a peu. ಥ‿ಥ

Chaîne youtube
Cliquez pour recouvrir

Vieux projets et jeux sur Casio
Cliquez pour recouvrir
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 17/04/2020 14:02 | #


Ou tout simplement

input()

Le cast en int n'est pas nécessaire, donc on peut l'enlever. Et quitte à l'enlever, autant enlever aussi la gestion de l'exception

J'avais pas fait gaffe que tu t'étais corrigé, mais bon, autant mettre en évidence la solution propre
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 105 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd