Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| teaching:progappchim:presentation_principes [2017/02/07 11:32] – villersd | teaching:progappchim:presentation_principes [2023/02/21 14:56] (Version actuelle) – villersd | ||
|---|---|---|---|
| Ligne 32: | Ligne 32: | ||
| <WRAP group> | <WRAP group> | ||
| <WRAP half column> | <WRAP half column> | ||
| - | <diagram> | + | <flowchartjs default> |
| - | | AAA | |AAA{border-color:black; | + | |
| - | | |!@4| | AB |AB{border-color: | + | |
| - | | BBB | | | | | | | | | | |BBB{border-color:black; | + | |
| - | | |!@4| | BC |BC{border-color: | + | |
| - | | CCC | | | | | | | | | | |CCC{border-color:black; | + | |
| - | </diagram> | + | |
| + | box1-> | ||
| + | </flowchartjs> | ||
| </ | </ | ||
| <WRAP half column> | <WRAP half column> | ||
| Ligne 50: | Ligne 52: | ||
| <WRAP group> | <WRAP group> | ||
| <WRAP half column> | <WRAP half column> | ||
| - | <diagram> | + | <flowchartjs default> |
| - | | AAA | |AAA{border-color:black; | + | |
| - | | |!@4| | AB |AB{border-color: | + | |
| - | | BBB | | | | | | | | | | |BBB{border-color:black; | + | |
| - | </diagram> | + | |
| + | box1->box2 | ||
| + | </flowchartjs> | ||
| </ | </ | ||
| <WRAP half column> | <WRAP half column> | ||
| Ligne 69: | Ligne 73: | ||
| <WRAP group> | <WRAP group> | ||
| <WRAP half column> | <WRAP half column> | ||
| - | <diagram> | + | <flowchartjs default> |
| - | | AAA | |AAA{border-color:black; | + | |
| - | | |!@4| | AB |AB{border-color: | + | |
| - | | BBB | | | | | | | | | | |BBB{border-color:black; | + | |
| - | | |!@4| | BC |BC{border-color: | + | |
| - | | CCC | | | | | | | | | | |CCC{border-color:black; | + | |
| - | </diagram> | + | |
| + | box1-> | ||
| + | </flowchartjs> | ||
| </ | </ | ||
| <WRAP half column> | <WRAP half column> | ||
| Ligne 156: | Ligne 162: | ||
| >>> | >>> | ||
| </ | </ | ||
| - | * Commandes : copyrigth, credits, license(), quit, help, help(),... | + | * Commandes : copyright, credits, license(), quit, help, help(),... |
| ==== Notion de variable ==== | ==== Notion de variable ==== | ||
| Ligne 165: | Ligne 171: | ||
| >>> | >>> | ||
| >>> | >>> | ||
| - | >>> | + | >>> |
| >>> | >>> | ||
| >>> | >>> | ||
| Ligne 253: | Ligne 259: | ||
| >>> | >>> | ||
| >>> | >>> | ||
| - | >>> | + | >>> |
| True False | True False | ||
| >>> | >>> | ||
| Ligne 273: | Ligne 279: | ||
| ==== Opérations sur les chaînes ==== | ==== Opérations sur les chaînes ==== | ||
| < | < | ||
| - | >>> | + | >>> |
| >>> | >>> | ||
| - | ’ 15 septembre 2009’ | + | ' |
| - | >>> | + | >>> |
| 6 | 6 | ||
| >>> | >>> | ||
| - | [’Mons,’, ’le’, ’15’, ’septembre’, ’2009’] | + | ['Mons,', 'le', '15', 'septembre', '2009'] |
| >>> | >>> | ||
| - | ’MONS, LE 15 SEPTEMBRE 2009’ | + | 'MONS, LE 15 SEPTEMBRE 2009' |
| >>> | >>> | ||
| - | ’Mons, | + | 'Mons, |
| >>> | >>> | ||
| </ | </ | ||
| Ligne 444: | Ligne 450: | ||
| <code python> | <code python> | ||
| - | print(’Structure while !’) | + | print('Structure while !') |
| c=0 | c=0 | ||
| while c< 4: | while c< 4: | ||
| print(c) | print(c) | ||
| c=c+1 | c=c+1 | ||
| - | print(’valeur finale = ’,c) | + | print('valeur finale = ',c) |
| - | print(’Structure for’) | + | print('Structure for') |
| a=range(11) | a=range(11) | ||
| print(a) | print(a) | ||
| Ligne 468: | Ligne 474: | ||
| ==== Exemples d’indentation ==== | ==== Exemples d’indentation ==== | ||
| <code python> | <code python> | ||
| - | print(’Table de multiplication’) | + | print('Table de multiplication') |
| a=range(11) | a=range(11) | ||
| for i in a: | for i in a: | ||
| for j in a: | for j in a: | ||
| - | print(i*j, | + | print(i*j, |
| - | print(’ sont multiples de ’,i) | + | print(' |
| </ | </ | ||
| Ligne 487: | Ligne 493: | ||
| * Spécifiées ou définies avant l’utilisation | * Spécifiées ou définies avant l’utilisation | ||
| + | ==== Exemple de fonction ==== | ||
| + | <code python> | ||
| + | def f1(x): | ||
| + | return x**2. | ||
| + | |||
| + | def f3(w): | ||
| + | print(" | ||
| + | return a * w**3. | ||
| + | |||
| + | def f2(x): | ||
| + | a = 1.111111 | ||
| + | print(" | ||
| + | return x**1.5 *f3(x) | ||
| + | |||
| + | a = 2. | ||
| + | u = 9. | ||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | ==== Exemple de fonction (2) ==== | ||
| + | <code python> | ||
| + | def fractions(nummol): | ||
| + | sum=0. | ||
| + | for num in nummol: | ||
| + | sum+=num | ||
| + | fract=[] | ||
| + | for num in nummol: | ||
| + | fract.append(num/ | ||
| + | return fract | ||
| + | |||
| + | li=input(" | ||
| + | print(li, | ||
| + | n = [float(c) for c in li.split(',' | ||
| + | print(n, | ||
| + | print(fractions(n)) | ||
| + | </ | ||
| + | |||
| + | ==== Utilisation de librairies de fonctions standard ==== | ||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | 3.141592653589793 | ||
| + | >>> | ||
| + | 1.0 | ||
| + | >>> | ||
| + | {' | ||
| + | ... | ||
| + | >>> | ||
| + | 'This module is always available. | ||
| + | >>> | ||
| + | ' | ||
| + | </ | ||
| + | On peut modifier les noms des fonctions et la façon de les stipuler (espaces de noms) par la directive import | ||
| + | |||
| + | ==== Modules, objets, classes, librairies ==== | ||
| + | Python est un langage très moderne → structures très avancées | ||
| + | * Classes (programmation objet), regroupant variables, données et fonctions | ||
| + | * Module : ensemble de code repris dans un seul fichier | ||
| + | * Paquet ou Librairie : ensemble de modules avec une arborescence en répertoires | ||
| + | |||
| + | La programmation avancée en Python comprend aussi : | ||
| + | * la gestion des erreurs | ||
| + | * des procédures de tests | ||
| + | * la génération de documentation sous différentes formes | ||
| + | * la possibilité d' | ||
| + | * ... | ||
| + | |||
| + | ==== Notion d’algorithme ==== | ||
| + | Algorithme : description des opérations à effectuer pour résoudre un problème | ||
| + | * Indépendant des ordinateurs | ||
| + | * Logique et systématique | ||
| + | * Langage courant structuré | ||
| + | * Transposable pour différents langages de programmation | ||
| + | * Détermine le temps d’exécution et la mémoire nécessaire en terme de proportionnalité à la taille du problème | ||
| + | Exemple : la multiplication matricielle nécessite de l’ordre de N< | ||
| + | |||
| + | Référence : [[http:// | ||
| + | |||
| + | ===== Pour terminer ===== | ||
| + | Exemples d' | ||
| + | |||
| + | ==== Simple, avec le module standard Turtle ==== | ||
| + | <code python> | ||
| + | from turtle import * | ||
| + | |||
| + | reset() | ||
| + | i=0 | ||
| + | while i<120: | ||
| + | forward(i) | ||
| + | left(90) | ||
| + | i=i+2 | ||
| + | input(' | ||
| + | </ | ||
| + | |||
| + | ==== Coloré, avec le module standard Turtle ==== | ||
| + | <code python> | ||
| + | from turtle import * | ||
| + | |||
| + | reset() | ||
| + | x=-100 | ||
| + | y=-100 | ||
| + | i=0 | ||
| + | while i < 10: | ||
| + | j=0 | ||
| + | while j <10: | ||
| + | up() | ||
| + | goto(x+i*20, | ||
| + | down() | ||
| + | begin_fill() | ||
| + | n=0 | ||
| + | while n <4 : | ||
| + | forward(16) | ||
| + | left(90) | ||
| + | n=n+1 | ||
| + | color((i*0.1, | ||
| + | end_fill() | ||
| + | color(0, | ||
| + | j=j+1 | ||
| + | i=i+1 | ||
| + | |||
| + | input(' | ||
| + | </ | ||
| + | |||
| + | ==== Simple, avec l’interface graphique Tkinter ==== | ||
| + | <code python> | ||
| + | from tkinter import * | ||
| + | |||
| + | fen01 = Tk() | ||
| + | fen01.title(" | ||
| + | chaine1 = Label (fen01, text = " | ||
| + | chaine2 = Label (fen01, text = " | ||
| + | chaine1.grid(row =0) | ||
| + | chaine2.grid(row =1) | ||
| + | entr1= Entry(fen01) | ||
| + | entr2= Entry(fen01) | ||
| + | entr1.grid(row =0, column =1) | ||
| + | entr2.grid(row =1, column =1) | ||
| + | bou1=Button(fen01, | ||
| + | bou1.grid(row=2, | ||
| + | |||
| + | fen01.mainloop() | ||
| + | |||
| + | m1 = float(entr1.get()) | ||
| + | m2 = float(entr2.get()) | ||
| + | fen01.destroy() | ||
| + | |||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | ==== Tkinter : animation ==== | ||
| + | <code python anima_auto_rebond.py> | ||
| + | #! / | ||
| + | # -*- coding: utf-8 -*- | ||
| + | |||
| + | # Petit exercice utilisant la librairie graphique Tkinter | ||
| + | |||
| + | from tkinter import * | ||
| + | |||
| + | # définition des gestionnaires | ||
| + | # d' | ||
| + | |||
| + | def move(): | ||
| + | " | ||
| + | global x1, y1, vx, vy, dt, flag | ||
| + | x1, y1 = x1 +vx*dt, y1 + vy*dt | ||
| + | if x1 < 0 or x1 > 220: | ||
| + | vx=-vx | ||
| + | if y1 < 0 or y1 > 220: | ||
| + | vy = -vy | ||
| + | can1.coords(oval1, | ||
| + | if flag > | ||
| + | fen1.after(2, | ||
| + | |||
| + | def stop_it(): | ||
| + | "arret de l' | ||
| + | global flag | ||
| + | flag =0 | ||
| + | |||
| + | def start_it(): | ||
| + | " | ||
| + | global flag | ||
| + | if flag ==0: # pour éviter que le bouton ne puisse lancer plusieurs boucles | ||
| + | flag =1 | ||
| + | | ||
| + | |||
| + | #========== Programme principal ============= | ||
| + | |||
| + | # les variables suivantes seront utilisées de manière globale : | ||
| + | x1, y1 = 40, 115 # coordonnées initiales | ||
| + | vx, vy = 10, 5 # vitesse du déplacement | ||
| + | dt=0.1 | ||
| + | flag =0 # commutateur | ||
| + | |||
| + | # Création du widget principal (" | ||
| + | fen1 = Tk() | ||
| + | fen1.title(" | ||
| + | # création des widgets " | ||
| + | can1 = Canvas(fen1, | ||
| + | can1.pack(side=LEFT, | ||
| + | oval1 = can1.create_oval(x1, | ||
| + | bou1 = Button(fen1, | ||
| + | bou1.pack(side=BOTTOM) | ||
| + | bou2 = Button(fen1, | ||
| + | bou2.pack() | ||
| + | bou3 = Button(fen1, | ||
| + | bou3.pack() | ||
| + | # démarrage du réceptionnaire d' | ||
| + | fen1.mainloop() | ||
| + | </ | ||
| + | |||
| + | ==== tkinter : tkDemo, demonstration of Tk widgets ==== | ||
| + | |||
| + | FIXME : ? tkdemo était proposé pour la branche 2 de Python. Rechercher pour la version python 3 ? | ||
| + | |||
| + | Voir par exemple [[https:// | ||
| + | |||
| + | |||
| + | ==== Graphiques simples avec matplotlib ==== | ||
| + | <code python> | ||
| + | # cosinusoïde amortie | ||
| + | from pylab import * | ||
| + | |||
| + | def my_func(t): | ||
| + | s1 = cos(2*pi*t) | ||
| + | e1 = exp(-t) | ||
| + | return s1*e1 | ||
| + | |||
| + | tvals = arange(0., 5., 0.05) | ||
| + | # | ||
| + | #show() | ||
| + | |||
| + | plot(tvals, my_func(tvals), | ||
| + | show() | ||
| + | </ | ||
| + | |||
| + | ==== Calculs numériques (FFT) et graphiques plus élaborés ==== | ||
| + | |||
| + | [[teaching: | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ==== Graphiques et illustrations plus complexes ==== | ||
| + | |||
| + | [[teaching: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== pH d’un acide en fonction d’un ajout de base et d’une dilution ==== | ||
| + | [[teaching: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== Calculs sur des molécules ==== | ||
| + | < | ||
| + | mol wt = 32.04186 - Numb atoms = 6 - Numb bonds = | ||
| + | 12.0107 6 C x= 0.956 y= -0.086 z= -0.056 | ||
| + | 15.9994 8 O x= 0.488 y= -1.374 z= 0.299 | ||
| + | 1.00794 1 H x= 0.587 y= 0.64 z= 0.672 | ||
| + | 1.00794 1 H x= 0.584 y= 0.177 z= -1.05 | ||
| + | 1.00794 1 H x= 2.049 y= -0.08 z= -0.052 | ||
| + | 1.00794 1 H x= 0.831 y= -1.996 z= -0.365 | ||
| + | partial charges = (0.28, -0.68, 0.0, 0.0, 0.0, 0.4) | ||
| + | total charge = 0 | ||
| + | </ | ||
| + | |||
| + | Ces données ont été générées à partir de la chaîne smile ’CO’ du méthanol en utilisant des librairies Python existantes et les programmes de chimie OpenBabel | ||
| + | |||
| + | ===== Objectifs du cours ===== | ||
| + | ==== Développer des capacités à programmer ==== | ||
| + | L’apprentissage des rudiments de la programmation vous permettra : | ||
| + | * d’utiliser des petits programmes existants en les modifiant légèrement (niveau élémentaire) | ||
| + | * d’écrire un programme pour solutionner un problème scientifique, | ||
| + | * d’élaborer un programme original pour solutionner un problème scientifique (niveau supérieur) | ||
| + | * Utiliser des techniques de programmation avancées pour solutionner un problème original (niveau excellent) | ||
| + | |||
| + | Quelque soit le niveau de la programmation, | ||
| + | |||
| + | ==== Apprendre par la pratique ==== | ||
| + | La pratique est la clé de l’apprentissage de tout langage ! Pour atteindre les objectifs, vous procéderez par étape : | ||
| + | * Reproduire quelques programmes très simples pour se familiariser avec le cycle édition-exécution | ||
| + | * Apprendre les bases en suivant le canevas proposé, un manuel/ | ||
| + | * Manipuler les outils d’aide, documenter et commenter Apprendre à rechercher et corriger les erreurs | ||
| + | * Rechercher des exemples simples d’applications (scientifiques, | ||
| + | * Programmer des problèmes inédits, simples | ||
| + | * Utiliser des sources de codes et documentations diverses : livres, forums, sites web | ||
| + | * Se donner un projet à réaliser, d’envergure adaptée à ses capacités, et le réaliser | ||
| + | |||
| + | ==== Aide en ligne, sites, manuels, fichiers, forums,... ==== | ||
| + | * Aide sur en ligne à partir de Idle, sous windows (touche F1) | ||
| + | * sur python.org | ||
| + | * sur les sites officiels de librairies utilisées | ||
| + | * ... | ||
| + | |||
| + | ==== Références ==== | ||
| + | * Des documents du cours, des exemples et des applications, | ||
| + | * Des références générales sur Python sont regroupées à la page : [[floss :python]] | ||