Marc BUFFAT

Professeur au département de Mécanique, Lyon 1 e-mail

Blog scientifique et pédagogique utilisant des notebooks IPython et Linux

cours en ligne INPROS: chapitre 3


Ipython notebook : cours INPROS LyonHPC

Auteur: Marc BUFFAT, Pr dpt de Mécanique, UCB Lyon 1

Contributeurs: Violaine Louvet, Michel Kern, Loic Gouarin, Laurence Viry </h5>

Licence Creative Commons
Mise à disposition selon les termes de la Licence Creative Commons
Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 2.0 France
.
In [1]:
%matplotlib inline
%autosave 300
from IPython.display import HTML,display
css_file = 'style.css'
try:
    display(HTML(open(css_file, "r").read()))
    print("using ",css_file)
except :
    print("using default css")
Autosaving every 300 seconds
using default css

LyonHPC LyonHPC
</div> sommaire

Premier programme Python

Utilisation de print pour afficher la valeur d’une expression

In [3]:
print("Surface du disque =", 3.14159*2.2*2.2)
Surface du disque = 15.205295600000001

Vous pouvez tester en ligne les exemples Python en utilisant la cellule SageCell

cellule SageCell du cours InPros

Vous pouvez aussi utiliser l’interpréteur Python sur votre ordinateur, par exemple l’interpréteur ipython (http://ipython.org)

bonnes pratiques: privilégier la lissibilité et utiliser des commentaires

    # ceci est un commentaire sous python

Types de base

Les 3 principaux types de base sous Python sont:

  1. les nombres entiers

  2. les nombres réels avec un . pour dénoter la virgule

  3. les chaines de caractères, délimités par ou

In [4]:
print("ceci est un entier =", 2)
print("mais ceci est un nombre réel =", 2.)
print("et ceci une chaine de caractères =", "deux", 'deux')
ceci est un entier = 2
mais ceci est un nombre réel = 2.0
et ceci une chaine de caractères = deux deux

Notation avec exposant 2.0e11 $=2\ 10^{11}$

Les opérations +,-,x,/ sont exactes pour les nombres entiers, mais approchées avec les nombres réels (car non représentables exactement en base 2 !)

In [5]:
print("res=",1. + 2.)
print("res=",0.1 + 0.2)
res= 3.0
res= 0.30000000000000004

Attention l’affichage avec print peut être trompeur!! (repr)

In [6]:
print(repr(1.+2.))
print(repr(.1+.2))
3.0
0.30000000000000004

Syntaxe

  • un programme informatique obéit à une syntaxe rigide

  • chaque langage informatique à sa propre syntaxe

  • mais en général les règles de syntaxe sont simples

  • la programmation n’est pas l’apprentissage de la syntaxe

Erreur de syntaxe

  • en écrivant un programme, on fait souvent des erreurs de syntaxe

  • en générale elles sont faciles à corriger

In [8]:
print("valeur ="  1)
  File "<ipython-input-8-4fc9e1c50a01>", line 1
    print("valeur ="  1)
                      ^
SyntaxError: invalid syntax

Attention en Python, les instructions doivent respectées une mise en page.

In [9]:
print("valeur =",1)
 print("valeur =",2)
  File "<ipython-input-9-6fdc615a9693>", line 2
    print("valeur =",2)
    ^
IndentationError: unexpected indent

Exercice 1

Ecrire un programme Python affichant
1
1 2
1 2 3

In [10]:
print(1)
print(1,2)
print(1,2,3)
1
1 2
1 2 3

Modifier le programme pour afficher

       1
   2  1
3 2  1

Notion de variable

variable

  • une variable est comme une boîte qui sert à stocker une valeur

      a = 2
  • la ligne précédente stocke la valeur 2 dans la variable a

  • c’est une instruction d’affectation (et non d’égalité)

In [11]:
x = 1
print("x = ",x)
x = x + 1
print("maintenant x = ",x)
x =  1
maintenant x =  2
In [12]:
HTML('<iframe width="800" height="300" frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=x%3D1%0Ax%3Dx%2B1%0Ay%3D1.0%0As%3D%22un%22&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=2&curInstr=0&codeDivWidth=350&codeDivHeight=400"> </iframe>')
Out[12]:

règles d’utilisation des variables

  • le nom des variables est quelconque ( à condition de commencer par une lettre et de ne pas contenir d’espace),
In [13]:
ma_variable = 10.0
print(2*ma_variable)
20.0

Attention: erreur dans le nom d’une variable

In [14]:
ma variable = 15
1x = 5
  File "<ipython-input-14-c3e989711734>", line 1
    ma variable = 15
              ^
SyntaxError: invalid syntax
  • une variable doit être initialisée avant d’être utilisée,
In [15]:
z = 10
z = Z + 1
print(z)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-15-7844d14ee663> in <module>()
      1 z = 10
----> 2 z = Z + 1
      3 print(z)

NameError: name 'Z' is not defined
  • une variable est associée à une adresse mémoire où se trouve effectivement stocké sa valeur, ainsi qu’à un type de données
In [16]:
x = 5.8
print("x=",x," adresse ",id(x)," type ",type(x))
y = 1
print("y=",y," adresse ",id(y)," type ",type(y))
s = "mon 'texte'"
print("s=",s," adresse ",id(s)," type ",type(s))
x= 5.8  adresse  140548927302824  type  <class 'float'>
y= 1  adresse  10919424  type  <class 'int'>
s= mon 'texte'  adresse  140548923596144  type  <class 'str'>
  • Attention type de la variable = type expression
In [18]:
x = 2//3
print(x , type(x))
x = 2./3.
print(x , type(x))
0 <class 'int'>
0.6666666666666666 <class 'float'>
  • Attention le symbole = représente l’affectation, et non l’égalité mathématique.

$x=x^2 + 0.25 \ \Longleftrightarrow\ (x-0.5)^2=0 \ \Longleftrightarrow\ x=0.5$

In [19]:
x = 2.
x = x*x + 0.25
print("x=",x)
x= 4.25

Exercice 2

Ecrire un programme Python qui affiche la table de multiplication d’un nombre n

Table de multiplication de n=7
7 14 21 28 35 42 49 56 63 70

Correction exercice

In [20]:
n = 12
print("Table de multiplication de ",n)
print(n, 2*n, 3*n, 4*n, 5*n, 6*n, 7*n, 8*n, 9*n, 10*n)
Table de multiplication de  12
12 24 36 48 60 72 84 96 108 120

Fonctions mathématiques

Bibliothèques de fonctions mathématiques:

  • fonctions puissances: sqrt(x)=$\sqrt{x}$, power(x,y)=$x^y$
  • fonctions trigonométriques (x angle en radian): sin(x), cos(x), tan(x), asin(y), acos(y), atan(y)
  • logarithme log(x), log10(x), exp(x)
  • fonctions hyperboliques: sinh(x), cosh(x), tanh(x), asinh(x), acosh(x), atanh(x)
  • constantes mathématiques: pi $=\pi$ et e $=exp(1)$
  • opérateurs mathématiques: + , - , * , / , //, ** , %
    • x**n $ = x^n$ élévation à une puissance entière
    • p%q = r modulo ou reste de la division entière $p = n q + r$
    • // division entière
  • avec des opérateurs d’affectation: += , -= , *= , /=

2 bibliothéques mathématiques disponible sous python:

  • math (module de base sous python )
  • numpy (module optionnel, mais indispensable en calcul scientifique)

utilisation avec import

import numpy as np 
In [22]:
import numpy as np
x = 1.0
print(np.cos(x*np.pi), np.exp(x), np.log(x), np.tanh(x))
-1.0 2.71828182846 0.0 0.761594155956

Exercise 3

Ecrire un programme python pour calculer la valeur de la formule mathématique suivante:

$$ y = \sqrt{\log(1+x^2)+\frac{x^{\sin(2\pi*x)}}{\tanh(2.)}}$$

Solution

attention aux parenthéses !!!

In [23]:
x = 2.0
y1 = np.sqrt(np.log(1+x**2)+np.power(x,np.sin(2*np.pi*x))/np.tanh(2.))
y2 = np.sqrt(np.log(1+x**2)+np.power(x,np.sin(2*np.pi*x)))/np.tanh(2.)
print(x,y1,y2)
2.0 1.62688433306 1.67565275561

Les listes

Liste: ensemble ordonné d’éléments accessible à partir d’un indice

structure de données plus générale qu’un tableau

  • les éléments peuvent etre de tous du même type ou de type différent
  • la taille d’une liste peut varier (structure dynamique)
      len(L)
  • on peut enlever, insérer ou ajouter des éléments dans la liste
  • structure de base sous Python
      L = [elt1 , elt2, ...,eltn ]
  • ième élément de la liste (indice à partir de 0 )
      L[i-1]
  • liste non modifiable (tuple ou n-uplet)
      L = (elt1 , elt2, ...,eltn )    
  • liste de n entiers à partir de 0
      L = range(n )
  • on peut utiliser des listes pour représenter des vecteurs ou des matrices
  • ATTENTION c’est en général inéfficace

Exemples

In [24]:
L=[1.,2,3,4.]
print(type(L))
print(type(L[0]),type(L[1]))
L.append("cinq")
print(L)
L.insert(1,8.)
print(L)
del L[5]
print(L)
<class 'list'>
<class 'float'> <class 'int'>
[1.0, 2, 3, 4.0, 'cinq']
[1.0, 8.0, 2, 3, 4.0, 'cinq']
[1.0, 8.0, 2, 3, 4.0]

Les dictionnaires

dictionnaire: ensemble de données accessible à partir d’une clé (nom) (au lieu d’un indice)

dict = { 'cle1':val1 , 'cle2':val2, ....}
dict['cle1']

exemple

In [25]:
french = { 'is':'est', 'my':'mon', 'nobody':'personne', 
           'name':'nom',' your':'ton'}
print("clés du dictionnaire ",french.keys())
L = ['my','name','is','nobody']
print("phrase à traduire: ",L)
print("traduction       : ",french[L[0]],french[L[1]],french[L[2]],french[L[3]])
clés du dictionnaire  dict_keys(['is', 'nobody', ' your', 'my', 'name'])
phrase à traduire:  ['my', 'name', 'is', 'nobody']
traduction       :  mon nom est personne
In [ ]: