PDA

Afficher la version complète : Annonce tuto: calculatrice graphique extensible



tyrtamos
04/10/2007, 12h06
Bonjour,

Lassé de devoir prendre une calculatrice de poche pour faire des petits calculs devant l'ordinateur, j'ai programmé la mienne en python.

Elle n'est pas la ènième simulation d'une calculatrice de poche, mais elle exploite tout ce que python sait faire en calcul algébrique.

De plus, elle est facilement extensible, et les fonctions qu'on ajoute peuvent être utilisées dans les formules algébriques comme n'importe quelle autre fonction python.

Je donne l'exemple (et le code) d'une fonction ajoutée affichant un nombre en format binaire, permettant de répondre à la question: que donne en binaire le nombre octal 0755?

=> dec2bin(0755) => 111101101 => ce qui correspond bien au "rwxr-xr-x"!

On peut bien sûr faire l'inverse:

=> oct(bin2dec("111101101")) => redonne bien 0755

Je donne aussi l'exemple (et le code) d'une fonction ajoutée qui donne la mensualité d'un crédit connaissant le capital emprunté, l'intérêt et le nombre de mois. Par exemple:

=> menscredit(10000,10,12) => 879.16

Contrairement aux calculatrices de poche simulées, celle-ci peut exploiter, en plus des possibilités habituelles, les calculs en entier long, c'est-à-dire dont la longueur n'est limitée que par votre mémoire RAM. Par exemple:

=> 2**200 (2 à la puissance 200) => 16069380442589902755419620923411626025222029937827 92835301376

Etc...

On met d'ailleurs un certain temps avant de comprendre tout ce que ça peut faire:
=> calcul normaux
=> fonctions de conversion
=> fonctions trigonométriques directes et inverses
=> fonctions transcendantales
=> résolution d'expressions logiques
=> calcul sur les bits
=> y compris des calculs avec des nombres complexes si on ajoute le module "cmath"!

Tuto et téléchargement ici: http://linux.jpvweb.com/mesrecetteslinux/d...id=calculatrice (http://linux.jpvweb.com/mesrecetteslinux/doku.php?id=calculatrice)

Ah, j'oubliais: elle fonctionne pareil sous Windows et sous Linux (peut-être sur MAC, mais je n'en ai pas: si quelqu'un pouvait me le confirmer!)

Dernier point: je ne prétends pas être un bon programmeur python: toute proposition d'amélioration sera la bienvenue!

J'espère que ça vous rendra autant service qu'à moi :D !

Tyrtamos

Heero_Yuy
04/10/2007, 12h36
Salux Tyrtamos,

Ça c'est un programme bien sympa, qui nécessite qu'on s'attarde dessus.

Concernant le code, je n'y reviendrais pas réellement. Si ce n'est que perso, j'aime bien commenter mon code pas uniquement pour dire ce que fait la fonction, mais j'entre un peu dans le détail à l'intérieur de la fonction. Mais bon, sans cela, ton code reste compréhensible (même si je ne connais pas Python, étant développeur, j'ai l'habitude de nombreux langages de programmation, et donc, le code Python ne m'est pas difficile à comprendre).

Ça c'était juste un avis personnel qui ne remet pas en cause les fonctions développées, bien au contraire. C'est juste pour ceux qui n'ont que très peu de connaissance en développement et en langage Python puissent suivre ton raisonnement dans chacune des fonctions.

Alors ne m'en veut pas pour mon avis si tu le désapprouve. Loin de moi l'idée de me fâcher avec toi.


Maintenant, une petite idée d'amélioration, non pas du code, mais de l'affichage, pas bien méchant non plus ;)

Ce qu'il serait bien, ce serait d'avoir un affichage style calculatrice scientifique, avec un bouton pour chaque fonction (cos, sin, tan... pour tout ce qui concerne la géométrie, mais également un bouton pour chaque fonction que tu as toi-même développées, parce que là, il faut connaître le nom des fonctions à saisir et ce n'est peut-être pas le plus pratique). Et même encore mieux, avoir les boutons à dispo, mais également pouvoir saisir les noms des fonctions soi-même comme c'est le cas actuellement.

Je ne sais pas ce que tu en penses, mais je crois que ça faciliterait encore plus l'utilisation de ta calculatrice.

tyrtamos
05/10/2007, 16h52
bonjour,

Merci de ta réponse, angel59.

Ok pour mieux commenter mon code. Ça m'aidera aussi à le maintenir dans le temps.

Pour la calculatrice avec plein de boutons à cliquer: je l'ai soigneusement évité! Je trouve qu'on peut déjà faire plein de choses avec un clavier de 104 touches... Et puis le nombre de fonctions supplémentaires que je suis en train de créer exclut qu'il y ait une touche pour chacune d'entre elle. Enfin, je ne suis qu'un amateur en informatique, et j'ai reculé jusqu'à maintenant devant la complexité de la chose (de plus, tkinter est très mal documenté).

Mais, après tout, pourquoi pas, au moins pour les fonctions habituelles, à 2 conditions:
1- on doit pouvoir toujours rentrer les formules de calcul au clavier
2- on doit pouvoir escamoter la partie "boutons" si on ne s'en sert pas.

Je vais creuser la question.

Merci encore pour tes conseils!

Tyrtamos

Heero_Yuy
08/10/2007, 09h51
Salux Tyrtamos.

<div class='quotetop'>Citation </div>
Mais, après tout, pourquoi pas, au moins pour les fonctions habituelles, à 2 conditions:
1- on doit pouvoir toujours rentrer les formules de calcul au clavier
2- on doit pouvoir escamoter la partie "boutons" si on ne s'en sert pas.[/b]

Là je suis d'accord sur ce point. Le fait d'avoir des boutons ne doit pas empêcher de pouvoir saisir les formules au clavier.

Sinon, je ne pense pas - mais je peux me tromper, je ne connais pas vraiment python - que ce soit si compliqué que cela. Normalement, lorsque tu déclares un bouton, tu lui définis une action associée, et là cette action serait juste l'affichage du nom de la fonction. Mais bon, je ne suis pas expert en Python et je ne saurais dire si c'est compliqué ou pas avec ce langage.

Bonne continuation pour les nouvelles fonctions de ta calculatrice.

J'aimerais bien l'adapter en C++/Qt - au moins pour avoir un projet pour bien démarrer avec Qt, ça ne te dérange pas si je reprends ton code ?

tyrtamos
08/10/2007, 13h59
Bonjour angel59,

<div class='quotetop'>Citation (angel59 @ 8/10/2007 à 9:51) <{POST_SNAPBACK}> (index.php?act=findpost&pid=151893)</div>
J'aimerais bien l'adapter en C++/Qt - au moins pour avoir un projet pour bien démarrer avec Qt, ça ne te dérange pas si je reprends ton code ?[/b]
Bien sûr que non, ça ne me dérange pas! Tu peux toujours me signaler comme source d'inspiration.

Si tu attends quelques heures, tu auras la version 1.1 beaucoup plus musclée, mieux commentée et accompagnée de plusieurs modules de fonctions!

Je suis de plus en plus surpris par ce qu'on peut faire avec cette calculette! Je viens d'ajouter en quelques minutes les fonctions PPCM et PGCD et j'attaque les nombres premiers...

Tyrtamos

Heero_Yuy
08/10/2007, 14h10
Salux Tyrtamos,

Je vais donc attendre cette version 1.1 avec impatience :D

Ta calculatrice n'est plus une simple calculette mais devient de plus en plus une calculatrice scientifique ;)


Et ne t'inquiète pas, je vais évidemment cité ton nom comme source d'inspiration. C'est une obligation que je suis pour ne pas léser les précédents auteurs de code dans leurs travaux B)

tyrtamos
10/10/2007, 11h51
Bonjour,

Ça y est, la nouvelle version 1.1 est en ligne!

J'ai ajouté pas mal de fonctions sous forme de modules python additionnels, avec le mode opératoire pour en construire d'autres.

Exemple: vous en connaissez beaucoup de calculatrices qui vous donnent la décomposition en facteurs premiers?

facteurs(9999999) => [3, 3, 239, 4649]

Ou la liste des nombres premiers inférieurs à un nombre donné:

premiers(99) => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

Je reste à l'écoute de vos éventuelles critiques et propositions d'amélioration.

Et ce n'est qu'un début: surveillez l'arrivée des versions suivantes!

Tyrtamos

Heero_Yuy
10/10/2007, 12h06
M'en vais aller voir ça aujourd'hui ;)

Merci pour ces nouveautés.

tyrtamos
12/11/2007, 00h43
Bonjour,

Voilà déjà la version 1.2!

Plusieurs améliorations importantes:

- le calcul se déroule désormais en tâche de fond (dans un thread)

- les calculs trop long peuvent être stoppés sans tuer la calculette

- ajout d'une aide par fonction

- ajout d'un ascenseur horizontal pour naviguer dans les lignes longues

- ajout de la durée de chaque calcul (en millisecondes)

- ajout d'une sauvegarde sur disque de certains résultats ou de la pile des expressions calculées

- affichage au milieu de l'écran lors du démarrage

- ajout de plusieurs fonctions dans les modules existants

- ajout d'un module "temps" qui regroupe le traitement des heures et des dates.

- etc...


- ah! j'allais oublier: elle a un nom: la CALCULEXT (pour calculatrice extensible)


Le tout nouveau module "temps", a quelques fonctions rares pour une calculette:

- donne l'heure exacte à la seconde près par consultation d'un serveur NTP

- donne la date de Pâques de n'importe quelle année entre 1583 et 4000.

- donne toutes les dates des jours fériées (France) de n'importe quelle année


Je pense que la partie "moteur" de la calculette est au point. Les prochains développements concerneront surtout de nouvelles fonctions et de nouveaux modules.

Et, pourquoi pas, l'ajout d'un clavier escamotable de calculatrice de poche?

Présentation et téléchargement toujours au même endroit: http://linux.jpvweb.com/mesrecetteslinux/d...id=calculatrice (http://linux.jpvweb.com/mesrecetteslinux/doku.php?id=calculatrice)


J'espère que vous vous amuserez autant que moi!

Tyrtamos

tyrtamos
16/11/2007, 11h53
Bonjour,

Version 1.21:

Un petit ajout qui a de grosses conséquences sur la facilité d'utilisation: un clic droit sur la zone de saisie affiche un menu flottant (pop-up) à deux niveaux qui donne la liste des fonctions disponibles.

Ce menu a 2 avantages:

- il rappelle toutes les fonctions disponibles, y compris celles ajoutées (il est facile à mettre à jour)

- il insère la fonction sélectionnée à l'emplacement du curseur de la zone de saisie: vous n'avez donc plus besoin de taper les fonctions au clavier!


Un autre ajout: une fonction "jeuxdessais()" qui crée des jeux d'essais de paramètres pour calculer plusieurs valeurs d'une expression, et obtenir d'un seul coup la liste des résultats.

Avec les fonctions python "map()" et lambda, on peut faire des choses étonnantes. Par exemple, on simule un emprunt de 10000 Euros à rembourser en 24 mois, et on cherche la mensualité obtenue avec un intérêt de 3%, 3.5%, 4%, 4.5%, 5%, 5.5%, 6%, 6.5%, 7%, 7.5%, soit 10 valeurs:

Création de la fonction lambda:


sto("mens",lambda L: menscredit(L[0],L[1],L[2]))
Calcul des 10 mensualités pour les 10 intérêts testés, et ceci d'un seul coup (j'ai arrondi les résultats aux centimes):


map(mens,jeuxdessais(10,[10000,3,24],[10000,7.5,24]))
===> résultat = [429.81, 432.03, 434.25, 436.48, 438.71, 440.96, 443.21, 445.46, 447.73, 450]
Avec la même fonction lambda, on peut calculer ce que donnerait pour un intérêt de 4% des mois de remboursement allant de 24 à 36 mois, soit 13 valeurs (j'ai arrondi les résultats aux centimes):


map(mens,jeuxdessais(13,[10000,4,24],[10000,4,36]))
===> résultat = [434.25, 417.56, 402.16, 387.90, 374.66, 362.34, 350.83, 340.07, 329.98, 320.51, 311.59, 303.18, 295.24]
Amusez-vous bien!

Tyrtamos

tyrtamos
27/12/2007, 21h55
Bonjour,

En guise de petit cadeau pour les fêtes de fin d'année: ma calculatrice est désormais disponible en ligne!

Cela veut dire que vous pouvez faire tout ce que la calculatrice fait, mais sans l'installer sur PC, avec un simple navigateur!

En particulier, les modules additionnels sont identiques à la calculatrice installable.

Les quelques limitations par rapport à la version installable figurent sur la page web.

C'est ici: http://calculext.jpvweb.com/index.html.

Bon, c'est la première fois que je mets un script python en ligne: dites-moi si ça marche svp :rolleyes: !


Prochaine étape (déjà bien avancée :D ): un "serveur de calcul", permettant de faire du calcul distribué en réseau (un processus est ouvert à chaque calcul)

Bonnes fêtes de fin d'année!

Tyrtamos

oh!rocks
27/12/2007, 22h22
:clap: :clap: :clap:

Décidément, on n'est jamais déçu avec toi ! Joli travail, toujours dans la rigueur et la sobriété ! Pourtant, la rigueur n'est pas mon fort et la sobriété encore moins !

Les distrib's en ligne n'ont plus qu'à l'intégrer...


à plus,

oh!rocks

tyrtamos
31/12/2007, 12h32
Bonjour,

Toujours pour la calculext en ligne utilisable avec un navigateur web, j'ai ajouté un menu pour se rappeler des fonctions disponibles, et pour éviter d'avoir à les taper (comme pour la calculext installable sur PC).

Cela nécessite, bien sûr, que javascript soit activé sur le navigateur!

Ce n'était pas le plus simple, parce que ces fichus navigateurs ne réagissent pas de la même façon aux mêmes instructions javascript. J'ai testé avec succès les versions récentes suivantes:
-> sur windows: internet explorer, firefox et opera
-> sur linux: firefox, iceweasel (debian), opera et konqueror

Avec konqueror, le menu fonctionne, mais il ne tient pas compte d'une éventuelle sélection lors de l'insertion d'une fonction. Avec cette sélection, les autres navigateurs permettent d'intégrer la sélection comme paramètre de la fonction insérée. C'est un bug connu de konqueror, mais l'insertion se fait quand même.

Si vous rencontrez des problèmes avec des navigateurs différents et/ou plus anciens, dites-le moi! Merci d'avance.

Je rappelle l'adresse: http://calculext.jpvweb.com

Et meilleurs vœux pour 2008 :D !

Tyrtamos

Burn2
01/01/2008, 20h37
Super sympa en ligne c'est une excellente idée. :)

LUCCI
06/02/2008, 18h53
Propre, portable et pratique... Que demander de plus? Excellent boulot, j'ai comme l'impression que nous allons retrouver ton code dans de nombreuses applications.

Pour Mac OS X 10.4 sur macbook ça fonctionne bien mais:

- Ne pas utiliser le python de la distribution, ni celui de Fink ou darwinports, ça ne fonctionne pas chez moi. Téléchargez le paquet Python-2.5.dmg (http://pythonmac.org/packages/py25-fat/index.html), installez et c'est suffisant.

- Pour le menu des fonctions, je dois utiliser une souris USB et cliker sur le bouton du milieu. Je n'ai pas trouvé le moyen de le faire via mon clavier, mais ça doit être possible.

En tout cas, bravo :clap:

tyrtamos
07/02/2008, 08h35
Bonjour,

Merci pour le message et pour les infos sur le mac! Je n'ai aucune possibilité d'essayer sur le mac.

En ce qui concerne l'appel du menu flottant: quel est le pb? La souris du mac n'a pas le clic droit, même simulé? Dois-je essayer de faire apparaitre le menu avec une touche de clavier?

Tyrtamos

LUCCI
07/02/2008, 10h27
Chalut,

<div class='quotetop'>Citation (tyrtamos @ 7/02/2008 à 7:35) <{POST_SNAPBACK}> (index.php?act=findpost&pid=165233)</div>
Merci pour le message et pour les infos sur le mac! Je n'ai aucune possibilité d'essayer sur le mac.[/b]
Non, merci à toi... j'ai maintenant une super petite calculatrice.

<div class='quotetop'>Citation (tyrtamos @ 7/02/2008 à 7:35) <{POST_SNAPBACK}> (index.php?act=findpost&pid=165233)</div>
En ce qui concerne l'appel du menu flottant: quel est le pb? La souris du mac n'a pas le clic droit, même simulé? Dois-je essayer de faire apparaitre le menu avec une touche de clavier?[/b]
Sur un macbook il est possible de simuler le clic droit: Ctrl+clic.
Le problème c'est que le clic droit ne fait pas apparaître le menu (la faute à ma distribution python?). Par contre, avec ma souris USB un clic sur la molette fait apparaître le menu flottant ("le bouton du milieu").
Il est peut être possible de simulé le clic du milieu via le clavier, mais je n'ai pas trouvé. Dès que je serais sur mon mac je regarderais.

Mais l'idée de faire apparaître de le menu avec une touche clavier est excellente. Ca réglerait le problème...

tyrtamos
07/02/2008, 12h01
Mais l'idée de faire apparaître de le menu avec une touche clavier est excellente. Ca réglerait le problème...[/b]
Essaye cette version: http://linux.jpvweb.com/documents/calculette/calculext.zip.

Le menu flottant apparaîtra avec la touche F3. Il s'affichera là où se trouve le curseur à ce moment-là. Pour que ça marche, il faut, bien entendu, que la zône de saisie ait le focus.

Cela fonctionnera aussi bien sur windows ou sur linux (je veux ne gérer qu'un seul code!).

Essaye, et dis-moi si ça marche!

Tyrtamos

Heero_Yuy
07/02/2008, 12h28
Si ça marche, restera plus qu'à donner la possibilité à l'utilisateur de configurer la touche qu'il souhaite utiliser pour afficher le menu ;) - enfin, je dis ça, hein, mais c'est pas une obligation :D

tyrtamos
07/02/2008, 12h54
Bonjour Heero_Yuy,

C'est une idée, mais je ne souhaite pas pour l'instant faire un module de configuration. Ayant accès au code, l'utilisateur mettra la touche qu'il souhaite :D .


Pour LUCCI:

Je m'aperçois après réflexion que je ne sais même pas s'il y a une touche F3 sur un mac. En fait, je ne me rappelle pas avoir déjà regardé un clavier mac de près...

Je crois cependant avoir trouvé une meilleure solution plus universelle que F3: en plus de clic-droit, le menu flottant apparait désormais avec clic-gauche-dans-la-zone-de-saisie + touche shift enfoncé.

Nouvelle version au même endroit: http://linux.jpvweb.com/documents/calculette/calculext.zip.

La modif était simple. Dans la construction de la classe Calculext, la ligne:


self.saisie.bind("<Button-3>", self.menupopup)
devient:


self.saisie.event_add ( "<<gomenu>>", "<Button-3>","<Shift-Button-1>")
self.saisie.bind("<<gomenu>>", self.menupopup)
Ce qui permet d'appeler le menu pop-up soit avec "clic-droit", soit avec "shift + clic-gauche"

Dis-moi si ça marche sur le mac.

Tyrtamos

LUCCI
07/02/2008, 13h19
Excellent, je testerais ça dès que j'aurais mon mac sous la main.
F3 sous un mac book ça coupe le volume ;) , shift+clic gauche ça rox

Heero_Yuy
07/02/2008, 13h21
Bonjour Heero_Yuy,

C'est une idée, mais je ne souhaite pas pour l'instant faire un module de configuration. Ayant accès au code, l'utilisateur mettra la touche qu'il souhaite :D .[/b]

Ok, mais tout le monde n'est pas développeur, même si Python est accessible ;)

Enfin, c'est ton projet, c'est donc toi qui voit. Je venais juste donner une idée comme ça en passant.

tyrtamos
07/02/2008, 13h30
Ok, mais tout le monde n'est pas développeur, même si Python est accessible ;)

Enfin, c'est ton projet, c'est donc toi qui voit. Je venais juste donner une idée comme ça en passant.[/b]

Malgré ma réponse négative, tu as semé une graine qui est en train de lever... Je pense que je peux créer facilement une fonction de calcul pour modifier la configuration. A faire pour une prochaine version...

Merci, donc. N'hésite pas à me donner d'autres idées!

Tyrtamos

Heero_Yuy
07/02/2008, 16h31
Malgré ma réponse négative, tu as semé une graine qui est en train de lever... Je pense que je peux créer facilement une fonction de calcul pour modifier la configuration. A faire pour une prochaine version...[/b]

Ce n'est pas si urgent à mon avis. Laisses-toi un peu le temps de souffler ;)

<div class='quotetop'>Citation </div>
Merci, donc. N'hésite pas à me donner d'autres idées!

Tyrtamos[/b]

De rien :P Et tu peux compter sur moi pour d'autres idées, dès qu'elles feront frémir les quelques neurones qu'il me reste (bon vous allez me dire qu'à 25 ans, on a encore beaucoup de neurones, mais je pense qu'en lisant un sujet sur les pirates informatiques :P j'en ai grillé quelques-uns - faut dire qu'il y a pas mal de philosophes dans le coin :D ), je te les ferais savoir.

Tiens, je vais télécharger la dernière version de ta calculext pour l'essayer ce week end ;)

tyrtamos
07/02/2008, 18h12
...
bon vous allez me dire qu'à 25 ans, on a encore beaucoup de neurones,
...[/b]
Tu sais ce qu'on dit: c'est à partir de 25 ans qu'on commence à se déglinguer petit à petit, mais on ne s'en aperçoit pas tout de suite. C'est à partir de 50 ans qu'il faut passer à la caisse.

Mais d'un autre côté, le cerveau fonctionne comme un muscle: c'est quand on l'utilise qu'on le conserve le mieux!

Tyrtamos

ahlner
08/02/2008, 01h54
Tyrtamos,

Ily a quelquechose dont j'ai envie depuis longtemps : Un logiciel traceur de courbes (après l'étude de la continuité, asymptotes, points d'inflexion, extremum, domaines de définition, etc.) pour les systèmes de coordonnées cartésiennes, paramétriques et polaires.
Envisages-tu d'ajouter de tels modules? Est-ce lourdingue à programmer?
Merci d'avance,
Cordialement,

alhner

tyrtamos
08/02/2008, 07h48
Bonjour alhner,

<div class='quotetop'>Citation (alhner @ 8/02/2008 à 1:54) <{POST_SNAPBACK}> (index.php?act=findpost&pid=165411)</div>
Ily a quelquechose dont j'ai envie depuis longtemps : Un logiciel traceur de courbes (après l'étude de la continuité, asymptotes, points d'inflexion, extremum, domaines de définition, etc.) pour les systèmes de coordonnées cartésiennes, paramétriques et polaires.
Envisages-tu d'ajouter de tels modules?[/b]
Oui, cela fait partie de mes projets d'ajouter une fenêtre graphique rétractable pour dessiner des courbes. Je l'ai d'ailleurs annoncé dans l'article de Linux+.

<div class='quotetop'>Citation (alhner @ 8/02/2008 à 1:54) <{POST_SNAPBACK}> (index.php?act=findpost&pid=165411)</div>
Est-ce lourdingue à programmer?[/b]
Oh oui! C'est le caractère général du code qui pose problème. Et il y a des courbes vraiment bizarres (ex: http://www.mathcurve.com/courbes2d/courbes2d.shtml).

Mais le fait que ce soit difficile aurait plutôt tendance à me donner envie!

Tu travailles dans le domaine des maths?

Tyrtamos

Heero_Yuy
08/02/2008, 10h45
Tu sais ce qu'on dit: c'est à partir de 25 ans qu'on commence à se déglinguer petit à petit, mais on ne s'en aperçoit pas tout de suite. C'est à partir de 50 ans qu'il faut passer à la caisse.

Mais d'un autre côté, le cerveau fonctionne comme un muscle: c'est quand on l'utilise qu'on le conserve le mieux!

Tyrtamos[/b]

Ah bin mince alors, faut que je l'entraîne. Bon, je vais continuer à résoudre des grilles de Sudoku, je vais faire plus de mots croisés... :D :D :D :D

Agemen
08/02/2008, 13h55
@ tyrtamos : t'as un bon tuto pour le python? Si tu vux, j'ai fait un peu (en fait un paquet pendant deux ans ^_^) de maths, je code un peu (mais pas en python), je peux peut être filer un coup de main... ce sera pas tout de suite, un (faut apprendre ^_^), mais ça me coute rien de me lancer dans le python ;)

Heero_Yuy
08/02/2008, 14h34
Salux Agemen,

Si tu n'as pas peur de dépenser un peu d'argent pour apprendre à programmer en Python, je te suggère les 2 tomes de Au coeur de Python 2.5 (Tome 1 : Notions fondamentales (http://www.amazon.fr/Au-coeur-Python-Notions-fondamentales/dp/2744021482) et Tome 2 : Notions avancées (http://www.amazon.fr/Au-coeur-Python-Notions-avanc%C3%A9es/dp/2744021954)).

L'auteur a eu l'excellente idée d'écrire son livre (pourquoi "son" et pas "ses" livres ? La version originale en anglais ne fait qu'un tome si mes souvenirs sont bons ;) ) comme un support de cours (qu'un prof de fac aurait pu écrire). Chaque chapitre se termine par des petits exercices (comme des TD).

En plus, le propos est clair et le langage facile à apprendre du coup. Même un débutant en programmation pourrait facilement écrire un petit bout de code Python sans problème.

J'ai pas encore fini de les lire, mais les quelques chapitres que j'ai pu lire jusqu'à maintenant vont dans ce sens. A bon entendeur ;)

tyrtamos
08/02/2008, 15h07
Si tu n'as pas peur de dépenser un peu d'argent pour apprendre à programmer en Python, je te suggère les 2 tomes de Au coeur de Python 2.5 (Tome 1 : Notions fondamentales (http://www.amazon.fr/Au-coeur-Python-Notions-fondamentales/dp/2744021482) et Tome 2 : Notions avancées (http://www.amazon.fr/Au-coeur-Python-Notions-avanc%C3%A9es/dp/2744021954)).[/b]
Je confirme: j'ai les 2 livres et ils sont très bien. J'ai utilisé le second pour mettre le calcul sous thread, pour faire la version dérivée web (script CGI) et même pour faire un serveur de calcul complet que l'on installe indépendamment d'un éventuel apache, et auquel on accède avec une adresse web et un numéro de port. Sans ces bouquins, j'aurais "ramé" beaucoup plus longtemps... D'autres sujets rares sont abordés, comme les expressions régulières ou comme le pilotage d'une base de donnée relationnelle.

Tyrtamos

LUCCI
08/02/2008, 18h35
Ok, shift+clic droit fonctionne parfaitement sur un macbook.

À propos des tutos python, j'ai bien aimé "apprendre à programmer avec python" (version gratuite au format PDF bas de page (http://www.cifen.ulg.ac.be/inforef/swi/python.htm). Sinon... au éditions O'reilly il existe une version papier et payante

tyrtamos
08/02/2008, 19h53
Ok, shift+clic droit fonctionne parfaitement sur un macbook.[/b]
Merci, j'entérine la modif!

Tyrtamos

ahlner
08/02/2008, 21h59
Bonjour alhner,
Oui, cela fait partie de mes projets d'ajouter une fenêtre graphique rétractable pour dessiner des courbes. Je l'ai d'ailleurs annoncé dans l'article de Linux+.
Oh oui! C'est le caractère général du code qui pose problème. Et il y a des courbes vraiment bizarres (ex: http://www.mathcurve.com/courbes2d/courbes2d.shtml).

Mais le fait que ce soit difficile aurait plutôt tendance à me donner envie!

Tu travailles dans le domaine des maths?

Tyrtamos[/b]


Hello Tyrtamos,

Merci pour ta réponse.
Je ne travaille pas dans les maths, mais c'est une de mes passions.
J'ai suivi un premier cycle d'informatique en cours du soir au C.N.A.M, et j'ai l'UV de Mathématiques Générales A.
Quant à Math. Générales B, comme le disait un ami prof de fac, "c'est plus filandreux", notamment pour l'algèbre linéaire.
9a me plait que tu envisages de programmer le tracé de courbes.
Un de mes rèves, dont la rélisation est très difficile à atteindre, est de comrendre l'équation fondamentale de la Relativité Générale (théorie de la Gravitation) :

Rmn - (1/2)Rgmn = C Tmn Attention m et n sont des indices variant de 1 à 4, que cette mise en page ne peut mettre en évidence
Rmn est la "courbure sectionnelle" de l'espace-temps
R est la courbure scalaire (un nomnre)
gmn, des coefficients (16) caractéristiques du référentiel choisi, et dépendant de la quantité de matière et d'énergie locales
C est une constante 8pi/c**4, c étant la célérité de la lumière (du champ électromagnétique en général)
Dans un livre de Jean heidman :"au delà de notre galaxie un immense univers", l'auteur dit ceci :
"


<div class='quotetop'>Citation (tyrtamos @ 8/02/2008 à 18:48) <{POST_SNAPBACK}> (index.php?act=findpost&pid=165421)</div>
Bonjour alhner,
Oui, cela fait partie de mes projets d'ajouter une fenêtre graphique rétractable pour dessiner des courbes. Je l'ai d'ailleurs annoncé dans l'article de Linux+.
Oh oui! C'est le caractère général du code qui pose problème. Et il y a des courbes vraiment bizarres (ex: http://www.mathcurve.com/courbes2d/courbes2d.shtml).

Mais le fait que ce soit difficile aurait plutôt tendance à me donner envie!

Tu travailles dans le domaine des maths?

Tyrtamos[/b]

Hello,
Hello Tyrtamos,

Merci pour ta réponse.
Je ne travaille pas dans les maths, mais c'est une de mes passions.
J'ai suivi un premier cycle d'informatique en cours du soir au C.N.A.M, et j'ai l'UV de Mathématiques Générales A.
Quant à Math. Générales B, comme le disait un ami prof de fac, "c'est plus filandreux", notamment pour l'algèbre linéaire.
9a me plait que tu envisages de programmer le tracé de courbes.
Un de mes rèves, dont la rélisation est très difficile à atteindre, est de comrendre l'équation fondamentale de la Relativité Générale (théorie de la Gravitation) :

Rmn - (1/2)Rgmn = C Tmn Attention m et n sont des indices variant de 1 à 4, que cette mise en page ne peut mettre en évidence

Rmn est la "courbure sectionnelle" de l'espace-temps
R est la courbure scalaire (un nomnre)
gmn, des coefficients (16) caractéristiques du référentiel choisi, et dépendant de la quantité de matière et d'énergie locales.(champ de gravitation)
C (normalement une lettre grecque) est une constante 8pi/c**4, c étant la célérité de la lumière (du champ électromagnétique en général)
Dans un livre de Jean Heidman :"Au delà de notre galaxie un immense univers", l'auteur dit ceci :

"CE N'EST PROBABLEMENT PAS L'HOMO SAPIENS QUI EN TROUVERA LA SOLUTION GENERALE"!!
Des solutions pour des situations particulières ont été résolues analytiquement.
Bon courage alhner!

L'électromagnétisme est simple parce que Linéaire (1 +1 =2)
La gravitation est non linéaire (1 + 1 =/2)

Bien à vous tous et toutes.

alhner

Agemen
08/02/2008, 23h49
Donc entre autres projets, apprendre le python ;)
tu es ouvert au codéveloppement?

@alhner : je partage ta passion pour les maths (avec une préférence pour le filandreux ;) ). On a affaire souvent à des théories très élégantes, qui ofrent des résultats assez incroyables parfois. J'aimerais bien pouvoir me servir de ce que j'ai appris en deux ans de prépa pour le projet de tyrtamos. Reste que mon école me prend du temps ^_^

ahlner
09/02/2008, 01h09
Donc entre autres projets, apprendre le python ;)
tu es ouvert au codéveloppement?

@alhner : je partage ta passion pour les maths (avec une préférence pour le filandreux ;) ). On a affaire souvent à des théories très élégantes, qui offrent des résultats assez incroyables parfois. J'aimerais bien pouvoir me servir de ce que j'ai appris en deux ans de prépa pour le projet de tyrtamos. Reste que mon école me prend du temps ^_^[/b]


Agemen,

Très sympa ce partage!
J'adore l'Analyse.
Ainsi, si j'ai bien compris, tu adores les applications linéaires, les matrices, vecteurs, les tenseurs, les produits tensoriels?
Ces Deux derniers sont particulièrement filandreux, surtout les derniers!
Peut-être es-tu passionné d'équations aux dérivées partielles. Je n'en suis pas encore là. Je devrais...

alhner

tyrtamos
09/02/2008, 09h47
Bonjour,

Si vous aimez les maths, vous aimerez Python!

Python est moins rapide que le C, mais il existe déjà des modules orientés "calcul scientifique" (y compris le calcul matriciel, le FFT, ...): numeric, numpy, scipy, ...

Le tracé de courbe existe aussi déjà et, par exemple, la source packman nous offre "matplotlib" sur opensuse (http://matplotlib.sourceforge.net/).

Pour les principales bibliothèques existantes, jetez un coup d'œil ici: http://python.developpez.com/outils/Librairies/.

D'une façon générale, le site http://python.developpez.com/ contient pas mal de choses intéressantes.

Il existe même un module de calcul symbolique que j'ai essayé dans ma calculext: "sympy". Par exemple, l'expression (x+y)**2 est développée en (x**2+2*x*y+y**2) au lieu d'être calculée. Voir ici: http://code.google.com/p/sympy/. Si la suite de mes essais est satisfaisante, je compte l'intégrer dans la calculext dans une prochaine version!

Cela n'empêche pas de reprogrammer certaines parties qui existe déjà ailleurs, comme j'ai pu le faire dans ma calculatrice, mais il faut que ça apporte quelque chose dans, par exemple, la facilité et la simplicité de mise en œuvre, ou dans notre propre compréhension d'une méthode de calcul. Par exemple en calcul de probabilité, une fois qu'on a compris comment générer des variables aléatoires distribuées selon la loi normale, on sait le faire pour toutes les lois de probabilité.

Je trouve que les ressources python (sites, doc, forum,...), surtout en français, ne sont pas à la hauteur des potentialités du langage, et je pourrais être tenté d'ouvrir un site genre "les recettes python de Tyrtamos", ne serait-ce que pour sauvegarder au fur et à mesure que j'avance, les solutions que je trouve (et que je n'ai trouvé nulle part ailleurs).

Voilà de beaux chantiers en perspective!

Tyrtamos

LUCCI
10/02/2008, 23h41
Je trouve que les ressources python (sites, doc, forum,...), surtout en français, ne sont pas à la hauteur des potentialités du langage, et je pourrais être tenté d'ouvrir un site genre "les recettes python de Tyrtamos", ne serait-ce que pour sauvegarder au fur et à mesure que j'avance, les solutions que je trouve (et que je n'ai trouvé nulle part ailleurs).[/b]
Je ne peux que t’encourager chaudement. Moi-même je serai demandeur d’un site pédagogique, pratique et poussé.
J’avais un projet en tête, j’ai fait le tour de divers langage, ayant appris la programmation (en autodidacte) avec le Perl, j’ai rapidement évincé le Python pour finalement me jeter corps et âme dans le Java. Quelle erreur ! Mon projet est toujours au point mort…
La démarche calculext m’a donné envie de reprendre, mais cette fois avec en Python.
D’ailleurs il faudrait que j’étudie de manière plus approfondie les extensions calculext, le réaliser sous forme d’une extension pourrait être une première étape (je voulais réaliser une application de montage d’opération immobilière HLM).

Au fait, ce week-end je me suis procuré « Au cœur de Python » V2, c’était un très bon conseil.

barbe-sauvage
10/02/2008, 23h56
ouais, mais bon, si on veut faire des calculs en polonaise inversée (http://fr.wikipedia.org/wiki/Notation_polonaise_invers%C3%A9e) c'est rapé.
ok je sors ==> []

ahlner
11/02/2008, 00h20
ouais, mais bon, si on veut faire des calculs en polonaise inversée (http://fr.wikipedia.org/wiki/Notation_polonaise_invers%C3%A9e) c'est rapé.
ok je sors ==> [][/b]



Hello,

Alors, tu aimerais utiliser Forth, qui marche en post-fixé, alors que le Logo est préfixé (comme l'assembleur)

alhner

tyrtamos
11/02/2008, 16h22
Bonjour,

Comme il faut "battre le fer pendant qu'il est chaud", je vous annonce la naissance d'un nouveau site: "les recettes Python de Tyrtamos", basé sur le même moule que le linux.

Il est ici: http://python.jpvweb.com

Bon, pour l'instant, il n'y a pas beaucoup de choses dedans, à part les liens utiles que je connais concernant Python. Je ne fais pas de pub, à part ce message, avant qu'il y ait suffisamment de contenu.

La Calculext sera gérée sur ce site pour ses prochaines versions, ainsi que ses différentes versions dérivées.

Soyez patient!

Tyrtamos

Heero_Yuy
11/02/2008, 16h35
Salux Tyrtamos,

Si tu le souhaites, tu peux compléter les références bibliographiques (http://wiki.alionet.org/doku.php?id=howto_log:ref_biblio), que j'ai initié, avec ton site ;) Une doc de très bonne qualité comme tu sais si bien le faire mérite au moins d'être citée dans cette référence :)

barbe-sauvage
11/02/2008, 16h37
pendant ma période assembleur, j'ai eu fait du forth-80 et quelques

Edit oups j'ai loupé 2 posts

tyrtamos
11/02/2008, 21h55
Si tu le souhaites, tu peux compléter les références bibliographiques (http://wiki.alionet.org/doku.php?id=howto_log:ref_biblio), que j'ai initié, avec ton site ;) Une doc de très bonne qualité comme tu sais si bien le faire mérite au moins d'être citée dans cette référence :)[/b]
Merci, Heero_Yuy, je ferai cela quand il y aura suffisamment de "matière" sur mon site.

@ barbe-sauvage: j'ai travaillé un peu avec le langage forth, et je l'ai trouvé très efficace, et surtout très rapide. Mais le code est épouvantable à relire et à comprendre. C'est bien dommage. Sinon, j'ai beaucoup travaillé en polonaise inverse sur des calculatrices hp, et ça marchait très bien. Je sais qu'il y a des algorithmes de conversion entre les 2 notations, mais la polonaise inverse ne me semble pas compatible avec ma calculette telle qu'elle est conçue. Peut-être une variante? :)

Tyrtamos

Agemen
12/02/2008, 01h14
la polonaise inverse, je pensais que c'était juste un truc bon à pondre des sujets de concours en sortie de maths spé... comme quoi... :)

LUCCI
12/02/2008, 11h11
la polonaise inverse, je pensais que c'était juste un truc bon à pondre des sujets de concours en sortie de maths spé... comme quoi... :)[/b]
C'était pas une danse?
ok --> []

tyrtamos
12/02/2008, 12h25
Pour la culture générale -> http://fr.wikipedia.org/wiki/Notation_polonaise_inverse

Tyrtamos

Heero_Yuy
12/02/2008, 13h12
En regardant ton lien Tyrtamos, je me suis dit, tiens, ça me fait penser à Lisp. Puis, je clique sur le lien "Notation préfixée" dans la page Wikipedia consacrée à NPI, et je retrouve Lisp de citer.

Perso, je préfère encore la notation préfixée (si je devais l'utiliser un jour) à NPI, ce dernier demandant trop de neurones pour réussir à le lire, mais bon, chacun utilise ce qu'il maîtrise le mieux ;)

En tout cas, je me coucherais certainement moins c** ce soir :D .

oh!rocks
12/02/2008, 13h36
Perso, je ne vous dirais pas à quoi m'a fait penser cette "polonaise inversée"... :whistling: :lol:


à plus,

oh!rocks

Heero_Yuy
12/02/2008, 14h13
Sacré Oh!Rocks va !

J'imagine très bien ce à quoi tu pensais http://smiles2k.net/smiles/big_smiles/super_smilies007.gif

oh!rocks
12/02/2008, 15h30
Réponse A : une partition de Chopin sur l'accueillant fessier de Georges Sand ? :)
Réponse B : une éprouvette renversée dans le labo de Marie Curie ? :huh:
Réponse C : une maquette arabe de Linux+DVD ? :D

Vous avez une minute... :lol:


à plus,

oh!rocks

Heero_Yuy
12/02/2008, 15h45
Allez Réponse B :lol: :lol:

oh!rocks
12/02/2008, 17h14
Ça ne m'étonne pas de toi ! ;)

Au moins, grâce à la calculext tu pourras calculer le périmètre de sécurité connaissant la période du Radium et la vitesse moyenne des secours ! :lol:

Ha, ha ! Quel élégant retour au sujet de base ! B)


à plus,

oh!rocks

Heero_Yuy
12/02/2008, 17h16
Si tu me donnes la formule exacte, je veux bien faire le calcul mon cher Oh!Rocks :lol:

Agemen
12/02/2008, 19h47
Pour la proposition A, j'aurais plutôt penché pour une danse de bela bartok jouée en partnat de la fin... déjà à l'endroit c'est rarement simple...

tyrtamos
09/07/2008, 08h44
Chers tous,

J'ai le plaisir de vous informer que la Calculext est passée en version 1.40.

Elle est désormais utilisable en 3 présentations:

- version .py pour Windows-Linux-Mac (nécessite l'interpréteur Python 2.5 ou 2.4)

- version .exe autonome pour Windows uniquement (désolé :D )

- version en ligne sur le web: http://calculext.jpvweb.com


Elle change de look: un vrai menu remplace les 4 gros boutons bleus, ce qui permet d'ajouter d'autres possibilités.

Elle peut être utilisée dans plusieurs répertoires de travail, ce qui permet plusieurs projets et plusieurs utilisateurs.

De nombreuses fonctions ont été ajoutées, dont certaines sont assez rares. Par exemple:

- la résolution d'une équation implicite quelconque (type f(x)=0),

- la génération de code de Gray (code binaire utilisé en automatisme)

- la quantité de mazout dans une cuve cylindrique horizontale en fonction de son niveau,

- le calcul des dates des phases de la lune.

Elle est ici: http://python.jpvweb.com/mesrecettespython/calculext

Par ailleurs, mon site Python lui-même (http://python.jpvweb.com) s'est bien rempli, et la plupart des fonctions de la calculatrice ont été décrites en tant que tutos.

J'ai toujours en projet de permettre le dessin de courbes pour une des prochaines versions (cet hiver?).

Je reste ouvert à toute info concernant les éventuels problèmes ou toute suggestion d'amélioration.

Tyrtamos

Heero_Yuy
09/07/2008, 12h26
Salux Tyrtamos,

Je vois que ta calculext avance bien.

Par contre, peut-être l'as-tu déjà dit (mais j'ai la flemme de relire tout le topic), tu utilises PyQt pour l'interface graphique ?

Et une autre question (je pense te l'avoir déjà posée) : n'est-il pas possible de donner une forme "plus calculatrice" avec des touches chiffrées ? L'affichage restant le même qu'aujourd'hui, c'est à dire qu'à chaque appui sur une touche de la calculext, la ligne de saisie se complète comme si on la saisissait manuellement (ce qui est le cas actuellement), tu vois ce que je veux dire ?

En gros, faire de manière logicielle, une calculatrice comme pourrait l'être la TI92 ou la Graph100 de chez Casio ;) L'interface en serait plus conviviale.

En tout cas, je te félicite pour ce travail remarquable :)

tyrtamos
09/07/2008, 14h24
Bonjour Heero_Yuy,

Merci de tes félicitations :)

Pour ce qui concerne le graphique, j'utilise exclusivement Tkinter, parce qu'il est quasiment toujours livré avec le Python de base et souvent déjà installé. Je tiens à ce que l'installation de la calculatrice soit aussi simple que possible. Je sais que Tkinter n'est pas la plus puissante des bibliothèques graphiques, mais on fait tout de même de belles choses avec...

Pour ce qui concerne les petits boutons: il est vrai que je n'en voulais pas dès le début. Mais imaginons que je veuille en mettre. La quantité de fonctions de calcul est beaucoup trop grande pour affecter un bouton par fonction. Et de plus, on peut ajouter de nouvelles fonctions en permanence (c'est l'un des avantages de la Calculext). Alors, il faudrait que je mette des boutons pour les lettres afin que l'utilisateur puisse écrire le nom des fonctions en cliquant? C'est à dire présenter un clavier azerty sous forme de bouton à cliquer? Cela ne me parait pas raisonnable. Ceci d'autant plus qu'avec mon système actuel de menu flottant, on n'a pas besoin de taper le nom des fonctions: elles s'insèrent toute seule dans l'expression à calculer.

Si tu as une autre vision du sujet, donne là moi!

Mais rien n'empêche que je fasse en plus une calculatrice plus traditionnelle avec des boutons, mais il faudra que je "ferme" la liste des fonctions pour figer les boutons. Et même, pourquoi pas, une calculatrice en polonaise inverse pour me rappeler ma calculatrice hp97 ? :D

Tyrtamos

Heero_Yuy
09/07/2008, 14h39
En fait, ce que je voulais dire, c'est d'avoir un style calculatrice avec des boutons pour les chiffres et pour les fonctions de base d'une calculatrice (+, -, *, /, % - modulo - , cos, sin, tan, log et exponentielle + les parenthèses, les puissances de 2 et puissance de plus de 2 - x^y - , factorielle et inverse - 1/x - ).

Ensuite, pour les fonctions plus spécifiques (comme la résolution d'une équation implicite quelconque (type f(x)=0) ...), tu peux garder ton menu tel quel.

Ca n'implique pas trop de boutons ;)

C'est comme ça que je vois la chose. Avec une calculatrice basique - avec un menu comportant des fonctions plus spécifiques. Mais point de boutons pour les lettres.

Tu vois mieux mon idée maintenant ?

tyrtamos
09/07/2008, 16h45
Tu vois mieux mon idée maintenant ?[/b]
Oui, tel que tu le présentes, cela parait acceptable. Je travaille la question.

Merci!

Tyrtamos

Heero_Yuy
10/07/2008, 10h26
Mais de rien :)

genome
10/07/2008, 16h16
Hello,

Elle est vraiment chouette, cette calculext ! Les fonctionnalités sont impressionnantes :thumbsup:

Je me permet de proposer quelques améliorations : corriger la ligne 358 du module principal (copier-coller ? :rolleyes: )
au lieu d'hériter la classe Calculext d'un Tkinter.frame, je pense que ce serait mieux de la faire hériter d'une classe CalculextGUI (par exemple) de façon à séparer la partie purement graphique du traitement des données. Ça serait plus clair au niveau du code, ça permettrait de mettre les fonctions "graphiques" dans un autre fichier, et surtout on pourrait développer des interfaces avec autre chose que Tkinter (PyQt, PyGTK...) grâce à un API homogène (si tu vois ce que je veux dire :huh: ) ça serait bien de définir chaque sous-menu dans le fichier module correspondant (voir point 4)
tu pourrais faire une importation automatique des modules présents dans ton dossier : voilà un petit bout de code qui pourrait t'aider (j'ai tapé ça vite fait, il peut y avoir des fautes)


fichiers = os.listdir("./")
...
modules_externes = ["arithmetique","combinatoire","temps"]

for m in modules_externes:
mi = __import__(m) # import d'un module à partir de son nom
sousmenu = mi.MENU # récupère un tuple contenant le sous-menu (à concaténer au menu global)
attributs = dir(mi) # liste les attributs disponibles du module
for attr in attributs:
a = getattr(mi,attr) # récupère la référence de l'attributs
if estfonction(a):
globals()[attr] = a # définit la fonction "a" (désignée par le nom "attr") comme étant globale

tyrtamos
10/07/2008, 18h20
Bonjour genome,

Merci de tes propositions!

point 1 - oui, c'est une erreur de commentaire et oui, c'est du copier-coller! :D

point 2 - c'est une bonne idée que je retiens sur le principe, mais pour l'instant, je ne connais que tkinter et je bataille déjà pas mal avec. Il faut me laisser un peu de temps pour que je prenne connaissance des autres bibliothèques graphiques. Et jusque là, je n'ai pas trop mélangé le graphique avec le calcul: le calcul ne se fait que dans le thread, qui appelle si nécessaire les fonctions de calcul des modules additionnels. Par contre, j'ai déjà fait une version dans laquelle l'écriture du résultat (qui est une partie graphique) n'était plus dans le thread mais dans la classe graphique. Je ne me rappelle plus pourquoi je suis revenu en arrière.

point 3 - oui, c'était déjà prévu pour la prochaine version. C'est le plus logique, parce que si je désactive l'importation d'un module, il ne faut plus que les fonctions de ce module apparaissent dans le menu flottant. Je ne l'avais pas fait parce que je voulais que la structure du menu privilégie l'aide à l'utilisateur, et pas forcément la structure du programme: c'est la différence entre le fonctionnel et l'organique.

point 3 - là, je suis moins convaincu. Ta solution est bien compliquée, et je ne vois pas ce que je gagne en contrepartie. Mais je n'ai peut-être pas tout compris?

Merci de ton aide!

Tyrtamos

genome
10/07/2008, 20h16
Quelques précisions :

Point 2 : je ne veux surtout pas t'obliger à programmer avec une nouvelle bibliothèque graphique ! :) Je proposais juste de mettre les fonctions graphiques dans une classe (et un fichier) à part. L'avantage, c'est que si un jour quelqu'un veut réutiliser ton code dans un autre projet, il poura plus facilement l'interfacer.
Par exemple, imaginons que je souhaites intégrer la Calculext dans un projet utilisant pygtk : j'aurais juste à remplacer le fichier contenant la classe bâtie sur Tkinter par le mien, et il n'y aurait rien d'autre à retoucher...
Je sais pas comment tu as programmé la partie web (avec CGI ?), mais ça pourrait aussi te permettre de faire un fichier pour Tkinter, et un autre pour ton interface web.

Point 3 : ok

Point 4 : le seul avantage de ma méthode (combinée avec le point 3), c'est de pouvoir rajouter un module simplement en mettant le fichier dans le répertoire, sans avoir à éditer le module principal pour rajouter un "from import" et des sous-menus.
Je sais pas si c'est très clair, mais les trois points de la ligne 2 signifient "parcourir la liste fichiers, enlever tout ce qui ne se termine pas par ".py" et enlever l'extension des fichiers qu'on garde", la variable modules_externes (ligne 3) récupérant en fait le résultat de la ligne 2


Ne te casses pas la tête avec tout ça, c'est juste des idées... ;)

zesamoth
11/07/2008, 14h19
Salux,

Ca évolue bien ta calculext ! Un bon projet (comme je t'en avait déjà fait part :) ).
Moi aussi je peux y aller de ma petite idée ? allez....
En fait ce qui serait très sympa c'est de pouvoir, comme sous la console Linux, taper le début d'une expression puis tab pour afficher l'expression. Je ne sais pas dans qu'elle mesure c'est réalisable mais ce serait un plus.....

@ ++

tyrtamos
14/07/2008, 10h05
Bonjour,

Comme la proposition d'importation automatique de genome m'avait intrigué, j'ai un peu creusé la question, et voici ce que je vais en faire.

Je créé un fichier utilitaire (autoimport.py) qui va me créer automatiquement:

1- les instructions d'importation des modules disponibles,

2- l'ajout des menus locaux des modules, dans le menu global flottant,

3- une base pour la fabrication des menus des modules.

En ce qui concerne le 1er point, cela faisait un certain temps en effet que je souhaitais remplacer l'importation générale:


from arithmetique import *
par l'importation de chaque fonction (c'est plus propre):


from arithmetique import estpremier, fact, facteurs, mulfacteurs, pgcd, ppcm, premiers
Mais j'avais reculé parce que c'était difficile à gérer sans erreur.

Mon nouveau programme utilitaire fabrique automatiquement (point 1 et 2):


from arithmetique import menuimp, estpremier, fact, facteurs, mulfacteurs, pgcd, ppcm, premiers
chmenu.append(menuimp)
from bibgene import menuimp, fnimplicite, fnimplicite2, jeuxdessais, triliste, volcuve
chmenu.append(menuimp)
from combinatoire import menuimp, arrang, arrangchaine, arrangliste, combin, combinchaine, combinliste, permut, permutchaine, permutliste
chmenu.append(menuimp)
from conversions import menuimp, bin2dec, bin2decs, compbin2, dec2bin, dec2bins, dec2gray, deg2dms, dms2deg, gray2dec, hex2mdp, invbin, mdp2hex, okbin
chmenu.append(menuimp)
from credit import menuimp, capcredit, coutcredit, intcredit, menscredit, moiscredit
chmenu.append(menuimp)
from probabilite import menuimp, arrang, arrangchaine, arrangliste, binom, binomconf, binomconfinf, binomconfsup, binomcum, combin, combinchaine, combinliste, hbinom, hgauss, hgaussred, hpoisson, hypgeo, hypgeocum, permut, permutchaine, permutliste, pgauss, pgaussred, poisson, poissonconf, poissonconfinf, poissonconfsup, poissoncum, xgauss, xgaussred
chmenu.append(menuimp)
from temps import menuimp, adddate, ascension, bissextile, calculphaseslune, cejour, cetteheure, datechaine, dateliste, datenumjouran, debmoissuivant, diffdate, diffdateouvre, estferie, estweekend, feries, jj2date, joursem, lundi, nbjoursan, normaldate, numjouran, numjoursem, paques, pentecote, phaseslune, phaseslune2, postdate, sec2hms, tempsntp, tempsordi, verifdate
chmenu.append(menuimp)
Je n'ai plus qu'à recopier cela dans calculext.py (copier-coller)

Il fabrique aussi une base pour la gestion des menus locaux par extraction automatique des lignes d'aide. En effet, le menu flottant ne comporte pas seulement le nom des fonctions disponibles, mais aussi leurs paramètres.
Par exemple pour le seul menu du module arithmetique:


['estpremier(n)', 'fact(n)', 'facteurs(n)', ' mulfacteurs(L)', 'pgcd(a,b)', 'ppcm(a,b)', 'premiers(n)']

Et voilà mon programme Python qui fait tout ça:


#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import types

def aide(fn):
"""aide(fn): affiche l'aide sur une fonction donnée fn"""
return fn.__doc__.replace("\n"," ")

chaide = []

# liste les fichiers et répertoires du répertoire courant
fichiers = os.listdir("./")
# définit les fichiers qui ne sont pas des modules à importer
exclusions = ['autoimport.py', 'calculext.py', 'setup.py', 'modele.py']
# créé la liste des modules à importer
fichiers = [x.split('.')[0] for x in fichiers if (x.split('.')[-1]=='py') and not (x in exclusions) and os.path.isfile(x)]
# traitement de chaque module
for fichier in fichiers:
# intialise la liste des fonctions du module qui seront extraites de la ligne d'aide
chaidemod = []
# initiale la chaîne d'importation
ch="from " + fichier + " import menuimp, "
#importe le module
modimp = __import__(fichier)
# cherche la liste des fonctions disponibles dans le module
attribs = dir(modimp)
# pour chacune de ces fonctions:
for attrib in attribs:
a = getattr(modimp, attrib)
# on ne garde que les fonctions non-internes, et on exclut d'importer les fonctions commençant par '_'
if isinstance(a,(types.FunctionType)) and attrib[0]!='_':
ch += attrib + ', '
chaidemod.append(aide(a).s plit(':')[0])
globals()[attrib] = a
ch = ch[:-2] # on retire le dernier ', '
print ch
print "chmenu.append(menuimp)"
chaide.append(chaidemod)
print
for x in chaide:
print x

C'est déjà intégré dans la version 1.50 en préparation.

Merci à genome!

Je travaille aussi sur les autres suggestions qui m'ont été faites.

Tyrtamos

genome
14/07/2008, 15h27
Juste une remarque : dans ton code, tu fais un tri entre les fonctions "non-internes" et les autres. Sais-tu qu'en commençant le nom d'une fonction/variable/méthode/attribut par deux underscores, elle devient automatiquement locale à la classe/fonction/module ?

Par exemple :


>>>
>>> class Schtroumpf:
... def __init__(self,n,m,o):
... self.nom = n
... self.__maison = m
... self.__objet__ = o
...
>>> schtroumpfalunettes = Schtroumpf("Schtroumpf à lunettes","Champignon vénéneux","Lunettes")
>>>
>>> print schtroumpfalunettes.nom
Schtroumpf à lunettes
>>>
>>> print schtroumpfalunettes.__maison
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Schtroumpf instance has no attribute '__maison'
>>>
>>> print schtroumpfalunettes.__objet__
Lunettes
>>>

La seule exception, c'est quand la fonction/variable se termine aussi par deux underscores (comme __init__, __doc__ ...). Dans ce cas, elle reste globale.

tyrtamos
14/07/2008, 16h32
Juste une remarque : dans ton code, tu fais un tri entre les fonctions "non-internes" et les autres. Sais-tu qu'en commençant le nom d'une fonction/variable/méthode/attribut par deux underscores, elle devient automatiquement locale à la classe/fonction/module ?[/b]
Non, j'avais oublié ce point. Cela compense l'absence d'une instruction "private".

J'ai par contre utilisé certains noms de fonctions "utilitaires" commençant avec un seul '_' afin qu'elles ne s'importent pas.

Dans ce que je recherchais ici, seules les fonctions crées et utilisables pour les calculs d'expressions m'intéressaient.

Tyrtamos