Lire en encodage utf8 (Windows=notepad et Linux) pour avoir les accents ########################################### ### ### ### CALCULEXT v 1.30 ### ### ### ### Calculette extensible ### ### ### ########################################### Tyrtamos juin 2008 http://python.jpvweb.com Compatibilité OS avec: - Windows (testé avec Windows XP SP2) - Linux (testé avec Opensuse 10.3 et Debian Etch) - Mac OS-X (non testé: devrait fonctionner avec le Python de http://www.python.org/) Compatibilité Python avec: - Python 2.5 (=version recommandée, utilisée pour le développement), - Python 2.4 (tests partiels) Merci d'avance de me signaler tout dysfonctionnement ou toute idée d'amélioration par la page "contact" de mon site http://python.jpvweb.com J'espère que vous vous amuserez autant que moi!!! ############################################################################## PRESENTATION Cette "calculette" écrite en python permet de calculer des expressions algériques (et autres) très diverses et, si nécessaire, très complexes. Elle a en plus l'avantage d'être extensible par l'utilisateur dans ses fonctions (mathématiques ou autres), par des modules et des fonctions supplémentaires faciles à construire. D'où son nom CALCULEXT = CALCULette EXTensible. Elle prend en charge de nombreux types de données, y compris, par exemple, les calculs en entiers sans limite de taille (limités seulement par la mémoire), ainsi que les calculs en nombres complexes, et même les chaines et les listes. Pour être sûr d'avoir la dernière version, voir sur le site http://python.jpvweb.com, et plus précisemment ici: http://python.jpvweb.com/mesrecettespython/calculext. La Calculext v1.40 est maintenant utilisable en 3 présentations: 1- version installable nécessitant la présence de l'interpréteur Python (archive: calculext_v1.40.zip) 2- version installable autonome s'exécutant en .exe uniquement pour Windows (archive: calculext_v1.40.exe.zip) 3- version en ligne sur le web (non distribuée mais utilise les mêmes modules additionnels) Composition du paquet à télécharger calculext_v1.40.zip: - lisezmoi.txt la présente info - calculext.py programme principal = celui qu'on lance - icone.ico icône de la fenêtre de la Calculext pour Windows - icone.xbm icône de la fenêtre de la Calculext pour Linux - calculext.html manuel utilisateur - license.html license opensource GNU/GPL version 3 pour la calculext et tous les modules fournis - fondcorps.jpg motif de fond des pages html livrées (manuel et licence) - modele.py modèle pour faciliter la création d'un nouveau module par l'utilisateur - setup.py permet sous Windows de refaire une version ".exe" après adaptation de la Calculext par l'utilisateur - arithmetique.py (module de fonctions arithmétiques) - bibgene.py (module regroupant les fonctions diverses) - combinatoire.py (module de fonctions d'analyse combinatoire et de dénombrement) - conversions.py (module des fonctions de conversions) - credit.py (module de fonctions permettant le calcul de crédits bancaires) - probabilite.py (module de fonctions relatives aux calculs de probabilités) - temps.py (module qui regroupe des fonctions de dates et d'heures) La calculatrice fonctionne de la même façon sous Windows, Linux et Mac (c'est le même code), dès lors que l'interpréteur python + son module graphique tkinter sont installés (non livrés). L'installation, tant sous Windows que sur Linux consiste simplement à: . avoir l'interpréteur Python + son module tkinter déjà installé (sinon, l'installer) . télécharger le fichier .zip et le déziper dans un répertoire . copier tous ces fichiers dans le même répertoire. Sous Windows, le chemin ne doit pas comporter d'espace (donc, pas dans "c:\Program Files" mais plutôt dans "c:\Calculext"). . créer une icône sur le bureau pour lancer calculext.py avec le répertoire de travail voulu. ou le lancer en console par une commande du genre "python calculext.py". Une fois l'installation faite, vous n'avez pas besoin d'avoir le droit d'écriture dans ce répertoire. Les éventuelles écritures pendant l'utilisation se feront dans le répertoire de travail utilisateur et pas dans le répertoire du programme. Sous Windows, si vous voulez éviter l'affichage de la console DOS (cmd) au lancement de python.exe, vous pouvez: . soit utiliser pythonw.exe au lieu de python.exe dans une commande de lancement (console ou raccourci bureau) . soit renommer calculext.py -> calculext.pyw, et le double clic sur le nom lancera alors pythonw.exe Le manuel utilisateur se trouve dans le fichier "calculext.html" qui sera appelé par la Calculext (F1 ou bouton "aide") et qui sera affiché dans le navigateur web par défaut. Cette aide est simplifiée pour toutes les fonctions intégrées dans python (compléments dans le manuel python). En fait, vous avez droit à quasiment toutes les possibilités de calcul d'expressions en python. Mais il faut aussi prendre connaissance des fonctions nouvelles apportées dans les modules additionnels, fonctions qui ne se trouvent dans aucun manuel python officiel. Modifier l'un quelconque des fichiers xxxxxx.py ou ajouter un nouveau module, nécessite un éditeur supportant l'encodage unicode "UTF-8". Sous Windows dont l'encodage par défaut n'est pas UTF-8: l'IDLE livré avec Python (c'est lui que j'ai utilisé pour une partie du développement), ou le notepad/bloc-notes, ou "EasyEclipse pour python" (que je recommande). Dernier point: cette calculette n'est accompagnée d'aucune garantie de bon fonctionnement, ni même d'assurance d'exactitude de résultat. C'est à peu près ce qui se trouve écrit en tout petit, dans la plupart des licenses de produits informatiques, y compris de ceux que vous payez très cher... mais celui-ci est un produit destiné à des amateurs, et il est gratuit ;-) ###################################################################### NOTES DE MISE A JOUR ---------------------------------------------------------------------- Version 1.40 - La Calculext travaille désormais dans un "répertoire de travail", le répertoire à partir duquel on l'a lancé, ce qui permet plusieurs utilisations par plusieurs personnes, chacun travaillant sur ses données. - Apparition d'une barre de menu supérieure qui remplace les 4 boutons bleus et qui comporte de nouvelles possibilités. - Amélioration de l'arrêt du calcul sur demande (ou sur délai pour la Calculext en ligne). Cependant, les procédures d'affichage concernant les résultats très très long (ex: 50000 caractères) peuvent consommer plus de temps que le calcul lui-même, et ne peuvent pas être arrêtées. - Possibilité de sauvegarder (remplacement ou ajout) et de recharger en mémoire la pile des expressions, ce qui permet d'assurer la continuité du travail dans le temps. - Les fonctions de conversions du module "bibgene.py" sont désormais dans le nouveau module "conversions.py". - Ajout de nouvelles fonctions pour vérification des paramètres, et centralisation de ces fonctions dans "calculext.py". - Nombreuses améliorations de codes. Attention cependant: certaines fonctions ont vu leur liste de paramètres changer légèrement. - Ajout de nombreuses fonctions (voir les menus et le manuel). - Apparition d'une version "exe" pour Windows, permettant l'utilisation de la Calculext sans installer l'interpréteur Python. Cependant, l'utilisateur ne pourra pas ajouter de nouvelles fonctions dans cette version. - Les 7 modules complémentaires livrés sont utilisés sans modification sur les 3 versions de la Calculext (version .py, version .exe pour Windows et version en ligne sur le web). - Mise à jour et simplification du manuel et de la présentation sur le site. Le manuel devient commun entre les toutes les versions de la Calculext. la partie de la présentation sur le site qui fait double-emploi avec le manuel a été supprimée. ---------------------------------------------------------------------- Version 1.30 - Reprise de tous les modules additionnels pour les rendre compatibles avec la version en ligne sur internet (code source non diffusé): "http://calculext.jpvweb.com". - Reprise de toutes les fonctions de tous les modules additionnels pour: . renforcement des contrôles de paramètres . amélioration de l'efficacité du code Ajout de nouvelles fonctions pour le module probabilité: . pgaussred, pgauss, xgaussred, xgauss, hgaussred, hgauss Ajout de nouvelles fonctions du module bibgene . volcuve, mdp2hex, hex2mdp Modification d'un des paramètres pour les 2 fonctions de la loi hypergéométrique du module probabilité. Avant, on utilisait le "%" d'évènements gagnants dans la population. Maintenant on utilise la quantité "g". Amélioration du contenu du menu. ---------------------------------------------------------------------- Version 1.22 - Passage de la calculext à la licence opensource GNU/GPL version 3: voir le fichier licence.html. - Amélioration de l'affichage: désormais, on a droit aux accents partout: . dans le code python (à éditer impérativement avec l'encodage unicode UTF-8), . dans les résultats de calcul quand ces résultats comportent des chaînes de caractères, . dans les messages d'erreur, . dans les messages d'aide . dans le menu flottant - Amélioration de l'affichage des nombres à virgule flottante. Une nouvelle variable globale "nbchiffres" définit ce qu'on souhaite: . si nbchiffres<0, fixe le nombre de chiffres significatifs, avec un affichage 'intelligent' qui n'affiche les chiffres que quand c'est utile (ex: 0.1000 => 0.1) et qui affiche les nombres avec exposants quand il le faut. La valeur par défaut est nbchiffres=-15, ce qui évite les erreurs sur les 2 derniers chiffres après la virgule, qui ne viennent que du mode de stockage des nombres réels dans les ordinateurs. Sinon, on aurait des affichages irritants comme 0.1 => 0.10000000000000001. . si nbchiffres>=0, fixe le nombre de chiffre après la virgule (ex: 0.1 => 0.1000 si nbchiffres=4). Ce n'est pas un affichage recommandé pour les nombres avec exposant. . Cette variable globale est modifiée par l'utilisateur uniquement avec la fonction "precision(n=-15)", avec -15<=n<=+15. Donc, l'appel de "precision()" sans paramètre remet la valeur par défaut nbchiffres=-15. . Comme la fonction d'affichage est récursive, ce qui précède est valable aussi quand les nombres à virgule flottante sont intégrés dans une liste ou un tuple, et ce, quelque soit sa profondeur (ex: liste de liste de liste de liste...), ainsi que dans un nombre complexe (ex: (0.1+0.1j) sera bien affiché comme cela). . Important: on parle bien d'affichage et seulement d'affichage: cela ne change rien au fait que les calculs sont toujours faits avec la pleine précision (17 chiffres)! - Création d'une fonction arrond(x,n=-15) qui permet de faire la même chose que l'affichage des nombres à virgule flottante (point précédent), mais avec un mode qui ne change par la valeur courante de la variable globale "nbchiffres". Par exemple, arrond(0.1,4) => "0.1000". La contrepartie est que le résultat est affiché comme une chaîne de caractère (parce que c'en est une). - Suppression de la fonction sauve(x) qui n'était pas bien positionnée. Remplacement par deux actions déclenchées par le clavier: . Ctle-R: ("R" pour Résultat) sauvegarde sur disque le dernier résultat calculé, en l'ajoutant au fichier resultat.txt. A noter que ça marche aussi si le résultat est tellement long que la zone de résultat refuse de l'afficher (limite de tkinter). . Ctle-E: ("E" pour Expressions) sauvegarde sur disque la liste de toutes les expressions calculées depuis le lancement de l'exécution de la calculatrice, complétée par le dernier résultat calculé. Cette liste est ajoutée au fichier resultat.txt. - Création d'un modèle "tout fait" pour faciliter la création d'un nouveau module par l'utilisateur: modele.py. - transfert de la fonction factorielle "fact(n)" du module "bibgene" au module "arithmetique". - Améliorations diverses et mineures du code - Mise à jour de la notice ---------------------------------------------------------------------- Version 1.21 - Ajout d'un menu flottant (pop-up) affiché par un clic droit de la souris sur la zone de saisie des expressions. La sélection d'une des fonctions de ce menu insère cette fonction à l'emplacement du curseur de la zone de saisie. Ce menu permet non seulement de se rappeler des fonctions disponibles, mais aussi de ne pas avoir à les taper au clavier. De plus ce menu rappelle les priorités décroissantes des opérateurs. - Ajout d'une fonction "jeuxdessais(n,L1,L2) dans le module "bibgene", dont l'objectif est de produire des listes de jeux de paramètres pour calculer des expressions et obtenir des listes de résultats (pour tracer une courbe par exemple). - Améliorations diverses et mineures du code ---------------------------------------------------------------------- Version 1.2 - La fenêtre de la calculette se positionne désormais au milieu de l'écran. - Le calcul des expressions et l'affichage des résultats se déroulent désormais en tâche de fond dans un "thread" (=processus à l'intérieur d'un processus). De ce fait, la fenêtre graphique n'est plus bloquée pendant les calculs longs, et l'utilisateur peut, par exemple, afficher l'aide pendant le calcul. Par contre, la zone de saisie est inactivée pendant le calcul pour empécher qu'un autre calcul ne soit lancé avant que le précédent ne soit terminé. - La calculette elle-même peut être arrêtée (case rouge en haut et a droite de la fenêtre) sans attendre qu'un calcul long ne soit terminé (=mode "daemon" du thread de calcul). - Les calculs trop long en temps peuvent désormais être stoppés par l'utilisateur (bouton "stopper" ou touche "F2). Cela nécessite que les fonctions ajoutées qui sont potentiellement longues, testent si une demande d'arrêt est déposée, et génère une exception pour arrêter le calcul "eval()". De ce fait, des tests nécessaires ont été ajoutés dans les quelques fonctions concernées. Essayez avec "len(premiers(1000000))" qui donne le nombre de nombres premiers <= 1000000. - L'affichage de la page d'aide dans un navigateur web peut être obtenue même pendant un calcul long, et redonne tout de suite la main à l'utilisateur. - Apparition d'une aide sur une fonction dont on donne le nom. Par exemple, "aide(cos)" donne la ligne d'aide sur la fonction cosinus du module "math" (l'aide est en anglais sur les fonctions intégrées). L'aide marche aussi sur les fonctions ajoutées: "aide(pgcd)" donne la ligne d'aide (en francais) sur la fonction "pgcd" du module "arithmetique" (résultat affiche = "pgcd(a,b): calcul du 'Plus Grand Commun Diviseur' entre les 2 nombres entiers a et b"). - Affichage du temps de chaque calcul, l'intérêt étant de pouvoir tester chaque nouvelle fonction développée pour l'optimiser. - Ajout d'un ascenseur horizontal pour naviguer dans la ligne résultat lorsqu'elle est trop longue pour être complètement affichée. - ajout d'une fonction de sauvegarde du résultat sur disque pour rendre disponible les résultats trop long pour être affichés à l'écran. - Ajout d'un nouveau module "temps.py" qui traite de fonctions relatives aux dates et aux heures (voir le manuel) en n'utilisant pratiquement pas les modules python. Il contient quelques fonctions assez courantes comme date et heure de l'ordinateur, difference entre 2 dates, jour de la semaine d'une date, etc... mais contient aussi deux fonctions assez rares: . lecture de l'heure à la seconde près par consultation d'un serveur NTP (date identique aux horloges mises a jour par radio), . calcul de la date de paques valable pour les années entre 1583 et 4000, ce qui permet le calcul et l'affichage des jours fériés (France)! - Simplification de la gestion de la pile des expressions précédemment calculées. - suppression du module calcutil qui n'était qu'un artifice pour mettre des variables globales à disposition des modules. J'ai trouvé mieux grâce a http://www.afpy.org/python/forum_python/forum_general. - Quelques modifications de code pour rendre les fonctions plus claires et/ou plus efficaces (il y a encore des améliorations en attente). - Ajout de commentaires de code - Mise a jour du manuel (=page d'aide html)