[Débutants] Exemple de simplification de code (+ exemple poo)

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Frédéric
Messages : 17
Enregistré le : lun. 29 juil. 2019 19:47

Re: [Débutants] Exemple de simplification de code

Message par Frédéric » mar. 6 août 2019 22:34

@Diox, pour moi ta solution reste lisible ;)
@Bud, en effet les objets et donc la poo sont plus appropriés qu une liste de liste de liste... Comme tu l as très bien dit, on s y retrouve plus pour le déboguage. Les concepts de base de la poo restent accessible pour un debutant, une fois que l on a bien compris le principe, heritage, methodes et propriétés. Je te fais confiance sur la clarté de tes expliquations, j ai deja vu de quoi tu es capable. :D

Bud Spencer
Raspinaute
Messages : 611
Enregistré le : lun. 15 août 2016 21:38

Re: [Débutants] Exemple de simplification de code

Message par Bud Spencer » sam. 10 août 2019 18:42

dyox a écrit :
mar. 6 août 2019 21:39
Bud, ne peut-on pas mettre l'attribution/initialisation des GPIO avec un "for" ?
Absolument Diox. Voilà meme une très bonne idée. A partir du moment où l’on a acquis la notion de liste et d’itération pour la partie exécutive, rien ne nous empêche de l’utiliser dans la partie déclarative. Tu vois, ça fait bien 2 ou 3 ans que j’écris du code sur ce forum et c’est la première fois que j’ai en réponse une suggestion intéressante. Je t’en remercie et J’en prends bonne note. Voilà donc un nouveau code qui tient compte de ta remarque :
tuple#5png.png
tuple#5png.png (33.38 Kio) Vu 166 fois

Ps : Juste un petit détail qui n’a pas trop d’importance pour l’instant. En python, Quand tu initialises une liste encadré de [ ] tu créer un type List alors que jusque-là, j’ai utilisé des ( ) qui initialisent des types Tuple. Tu sembles bien t’intéresser à tout ça et etre plutôt du genre curieux, donc je suis persuadé que tu vas te documenter un peu la dessus et en saisir toute la différence ;-)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Bud Spencer
Raspinaute
Messages : 611
Enregistré le : lun. 15 août 2016 21:38

Re: [Débutants] Exemple de simplification de code

Message par Bud Spencer » sam. 10 août 2019 18:46

Frédéric a écrit :
mar. 6 août 2019 22:34
@Bud, en effet les objets et donc la poo sont plus appropriés qu une liste de liste de liste... Comme tu l as très bien dit, on s y retrouve plus pour le déboguage. Les concepts de base de la poo restent accessible pour un debutant, une fois que l on a bien compris le principe, heritage, methodes et propriétés. Je te fais confiance sur la clarté de tes expliquations, j ai deja vu de quoi tu es capable. :D
L’objet n’est pas plus compliqué que n’importe quel autre paradigme. C’est juste une approche différente qui a l’énorme avantage de rapprocher le monde réel avec l’obscure (la programmation). On y trouve généralement peu d’intérêt tant que l’on n’en maitrise pas toutes les possibilités ou que l’on ne fait que des petits programmes, hormis ces cas-là, l’objet est une quasi évidence. Pour le fun et pour compléter ce topic, je vais écrire un petit exemple de bargraph en utilisant des objets.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

dyox
Raspinaute
Messages : 560
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: [Débutants] Exemple de simplification de code

Message par dyox » lun. 12 août 2019 07:55

Tu vois, ça fait bien 2 ou 3 ans que j’écris du code sur ce forum et c’est la première fois que j’ai en réponse une suggestion intéressante
Tu sais qu'ici ce n'est pas un forum de codeur/développeur. Vous n'êtes même pas 5 ici à maîtriser un/plusieurs langages de programmation. Ici c'est le forum de touche-à-tout et expert en rien :D ; du moment que cela fonctionne. Et c'est pour ça qu'avec notre raspberry, pour arriver à une finalité, il y a 36 sortes. On choisit notre solution suivant ses compétences.
Et c'est pour ça aussi que j'apprécie ton intervention. Avec ton exemple simple venant d'un codage long et compliqué et dont la finalité est connue pour une meilleure compréhension, le nouveau venu voit/apprend plein de choses.
Juste un petit détail qui n’a pas trop d’importance pour l’instant. En python, Quand tu initialises une liste encadré de [ ] tu créer un type List alors que jusque-là, j’ai utilisé des ( ) qui initialisent des types Tuple. Tu sembles bien t’intéresser à tout ça et etre plutôt du genre curieux, donc je suis persuadé que tu vas te documenter un peu la dessus et en saisir toute la différence
Vu la différence après recherche

Concernant l'attribution du for, tu as fait une faute. Oui je sais, c'est pour voir si on suivait :mrgreen:
Débutant sous RPi / linux

:arrow: :arrow: :arrow: [Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (liste de liens utiles)

Bud Spencer
Raspinaute
Messages : 611
Enregistré le : lun. 15 août 2016 21:38

Re: [Débutants] Exemple de simplification de code

Message par Bud Spencer » lun. 12 août 2019 09:31

Je trouve dommage qu’il ni ai justement pas plus de code ici. Tous les jours, des nouveaux arrivent avec des idées de projets aussi divers que variés et à chaque fois ils finissent leur demande par ‘mais je ne sais pas comment faire’. Nous ventons tous ici l’énorme potentiel du PI mais il faut etre réaliste, sans programmation, ce potentiel devient tout de suite beaucoup plus limité.
Je ne parle pas de faire du code d’expert et je te rejoins quand tu écris ‘du moment que cela fonctionne’. Il y aura toujours ensuite de la place pour les améliorations. On en a l’exemple sur ce topic. Que ce soit le code original de Frédéric ou tous ceux que j’ai écrit, au final, ils feront tous la meme chose et le bargraphe fonctionnera tout pareil, mais il a maintenant un exemple concret qui lui démontre comment ecrire du code plus simple et plus lisible. D’ailleurs au départ, je n’avais pas l’intention d’utiliser de liste ou d’itération et j’aurais dut m’arrêter au code de la page 3, mais c’est lui qui a été demandeur. Comme pour les opérateurs conditionnels, il savait que ça existait, mais ne savait pas trop comment les utiliser.
Idem pour la poo. J’ai dit que j’allais réécrire ce bargraphe avec ce paradigme parce qu’il serait dommage au point où nous en somme de ne pas présenter la méthode. Pour ceux qui ne comprendront pas, ce n’est pas grave. Suivant leur niveau, ils pourront s’arrêter quelques pages avant et auront quelques chose de parfaitement fonctionnel, mais il arrivera forcément un moment où ils auront évolué et ils voudront aller plus loin et à ce moment-là peut etre, ils viendront lire les pages suivantes et apprendront autre chose.

dyox a écrit :
lun. 12 août 2019 07:55
Concernant l'attribution du for, tu as fait une faute. Oui je sais, c'est pour voir si on suivait :mrgreen:
Bien vu. Ce n’était pas volontaire sur ce coup-là et je vais corriger l’image. Il peut y avoir quelques fois des petites coquilles comme celle-là parce que j’écris ces codes mais la plupart du temps je ne les essais pas. Pour ceux qui ne l’ont pas vu, sur la ligne : GPIO.setup( gpios , GPIO.OUT, initial=GPIO.LOW)
Il faut enlever le ‘s’ à gpios puisque l’on ne fait pas référence à la liste des n° de pin mais à la variable d’itération ‘gpio’.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Frédéric
Messages : 17
Enregistré le : lun. 29 juil. 2019 19:47

Re: [Débutants] Exemple de simplification de code

Message par Frédéric » lun. 12 août 2019 17:49

Pour gpios avec un s je pense que le code plante, mais j ai pas essayé. Sinon je me defini personnellement comme un touche a tout, vous avez tout a fait raison, vous avez aussi raison quand vous dites que un novice apprendra et "reviendra voir les pages suivantes". Perso pour moi, tant que ça marche c est cool, mais j ai modifié mon code pour y integrer les ternaires ainsi que les iterations. J ai donc appliqué vos conseils et j irais voir les pages suivantes car ça m intéresse d apprendre "des trucs". Tout ca pour dire que sur le net, il y a beaucoup de touche a tout, certains ne cherchant seulement une solution a leur probleme, mais il y a aussi des curieux qui ont soif d apprendre, et qui reviendront voir les pages suivantes... En tout cas vos posts ne sont pas vains car il y aura toujours au moins une personne qui tombera sur ce forum et qui apprendra des trucs, et pour ça je tiens a remercier Bud pour son approche pédagogique et Diox pour son idée.
A bientôt...

Frédéric
Messages : 17
Enregistré le : lun. 29 juil. 2019 19:47

Re: [Débutants] Exemple de simplification de code

Message par Frédéric » lun. 12 août 2019 17:55

Bien vue Diox pour le s de gpios.
C est bien Bud que tu ne l ai pas corrigé, comme ca on peut voir ce qu il ne faut pas faire... ;)

Bud Spencer
Raspinaute
Messages : 611
Enregistré le : lun. 15 août 2016 21:38

Re: [Débutants] Exemple de simplification de code

Message par Bud Spencer » mar. 13 août 2019 10:07

Tu as raison, je ne vais rien corrigé du tout. Dyox a levé la coquille et moi je l’ais expliqué, donc on peut dire que le boulot est fait.

Aller, on se fait un peu de poo. Je ne veux pas ici faire un cours complet la dessus, il y en a déjà plein de très bon sur internet. Pour ceux qui débutent et qui veulent savoir ce qu’est la Programmation Orientée Objet, et bien c’est très simple. C’est juste une façon de programmer qui permet de modéliser chaque chose (sous forme d’objet) pour pouvoir ensuite les utiliser de façon explicite. Prenons le cas d’une led. Généralement pour allumer une led on a un code du genre :

maled=11
[GPIO.output(maled,GPIO.HIGH) et GPIO.output(maled,GPIO.LOW)


En utilisant de la poo, on va créer l’objet led et on pourra ensuite l’utiliser de cette façon :

maled = Led(GPIO,11)
maled.on() et maled.off()


Si on veut la faire clignoter 3 fois ca donnerait un truc du genre

Maled=11
For i in range (3)
GPIO.output(maled,GPIO.HIGH)
Sleep(1)
GPIO.output(maled,GPIO.LOW)


Alors que si l’on a prévu une fonction blink dans l’objet Led, il suffira d’écrire
maled = Led(GPIO,11)
maled.blink(3)


Quand on débute en poo, on a très souvent l’impression de se compliquer la vie en écrivant plus de code que nécessaire, mais on se rend très vite compte qu’avec cette méthode, plus le programme grandi et plus on en fait l’économie tout en se simplifiant l’écriture.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

dyox
Raspinaute
Messages : 560
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: [Débutants] Exemple de simplification de code

Message par dyox » mar. 13 août 2019 10:15

Ha ! C'est exactement ce que nous propose gpiozero
Débutant sous RPi / linux

:arrow: :arrow: :arrow: [Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (liste de liens utiles)

Bud Spencer
Raspinaute
Messages : 611
Enregistré le : lun. 15 août 2016 21:38

Re: [Débutants] Exemple de simplification de code

Message par Bud Spencer » mar. 13 août 2019 10:37

Tout a fait, et pas seulement gpiozero. Tout ces 'modules' sont généralement écrit pour simplifier la programmation et s'éviter du code fastidieux et difficilement lisible. Ici, on va faire un bargraph a led et ca n'a rien d'inédit, mais ca va donner un exemple du 'comment faire' pour créer ses propres objets que l'on pourra réutiliser et enrichir en fonction des besoins sans remettre en cause tous les programmes qui les utilisent déjà.

Créons un objet led. Pour nous, une led fait référence au GPIO et a un n° de pin. Pour l’instant on veut juste pouvoir l’allumer ou l’éteindre. Donc voilà comment on pourrait créer notre objet Led
poo#1.png
poo#1.png (33.18 Kio) Vu 107 fois
Bon je vous laisse vous documenter sur la syntaxe utilisé en python pour créer des objets, mais pour résumer, à chaque fois que je vais créer un objet Led, je vais lui passer en paramètre le GPIO et un n° de pin et automatiquement la gpio correspondante sera initialisé en sortie à l’état LOW dans la fonction _init_ qui fait office de constructeur. J’ai ensuite écrit 2 actions (on et off) et définie une propriété etat qui peut me servir à interroger l’état de la led ou a le définir en utilisant un booléen (True ou False).
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Python »