LyonHPC LyonHPC

3. Variable et éléments de base

sommaire
%matplotlib inline
from IPython.display import HTML,display,IFrame
from IPython.display import YouTubeVideo,Markdown,Video
display(Markdown("**Video du cours: Introduction**"))
YouTubeVideo('UrNZF0fAvIU')

Video du cours: Introduction

Astuce

Pour tester les programmes Python, vous pouvez vous connectez sur un serveur Jupyter, par exemple, pour les étudiants Lyon1 https://jupyter.mecanique.univ-lyon1.fr

3.1. Premier programme Python

Utilisation de print pour afficher la valeur d’une expression

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 un serveur jupyter

Vous pouvez aussi utiliser l’interpréteur Python sur votre ordinateur.

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

    # ceci est un commentaire sous python

3.2. 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

display(Markdown("**Video du cours: type de base en Python**"))
YouTubeVideo('uCPXYS8dc9M')

Video du cours: type de base en Python

Attention

Les vidéos utilisent un ancien interpréteur python 2.7, pour lequel print est un mot clé, soit print 'bonjour'. Avec Python 3, print est une fonction et il faut donc utiliser des parenthèses, soit print('bonjour')

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 !)

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)

print(repr(1.+2.))
print(repr(.1+.2))
3.0
0.30000000000000004

3.2.1. 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

3.2.2. Erreur de syntaxe

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

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

exemple

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

exemple

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

3.2.3. Exercice 1

Ecrire un programme Python affichant
1
1 2
1 2 3

3.2.4. Correction

# solution
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

3.3. 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é)

display(Markdown("**Video du cours: les variables en Python**"))
YouTubeVideo('mNsU270boC0')

Video du cours: les variables en Python

Attention

Les vidéos utilisent un ancien interpréteur python 2.7, pour lequel print est un mot clé, soit print 'bonjour'. Avec Python 3, print est une fonction et il faut donc utiliser des parenthèses, soit print('bonjour')

x = 1
print("x = ",x)
x = x + 1
print("maintenant x = ",x)
x =  1
maintenant x =  2

3.3.1. visualisation de l’exécution

utilisation du site : http://pythontutor.com

vous pouvez copier l’exemple de code python sur le site pour l’exécuter

display(Markdown("**Visualisation de l'execution sur le site pythontutor**"))
Video("VIDEO_COURS/pythonlive_var.mp4", embed=True,width=700, height=300)

Visualisation de l'execution sur le site pythontutor

3.3.2. 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),

ma_variable = 10.0
print(2*ma_variable)
20.0

Attention: erreur dans le nom d’une variable

exemple

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,

exemple

z = 10
z = Z + 1
print(z)
  
NameError                                 Traceback (most recent call last)
<ipython-input-24-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

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  140467777615952  type  <class 'float'>
y= 1  adresse  9788960  type  <class 'int'>
s= mon 'texte'  adresse  140467127206000  type  <class 'str'>
  • Attention type de la variable = type expression

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\)

x = 2.
x = x*x + 0.25
print("x=",x)
x= 4.25

3.3.3. 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

3.3.4. Correction exercice

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

3.4. 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 
display(Markdown("**Video du cours: fonctions mathématiques et liste**"))
YouTubeVideo('uxZtQA606oI')

Video du cours: fonctions mathématiques et liste

Attention

Les vidéos utilisent un ancien interpréteur python 2.7, pour lequel print est un mot clé, soit print 'bonjour'. Avec Python 3, print est une fonction et il faut donc utiliser des parenthèses, soit print('bonjour')

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.718281828459045 0.0 0.7615941559557649

3.4.1. 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.)}}\]
# votre programme

3.4.2. Solution

attention aux parenthéses !!!

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.6268843330617109 1.6756527556108327

3.5. 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

3.5.1. Exemples

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]

3.6. 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']

3.6.1. Exemple

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', 'my', 'nobody', 'name', ' your'])
phrase à traduire:  ['my', 'name', 'is', 'nobody']
traduction       :  mon nom est personne

3.7. Fin de la leçon

../_images/cloud_variable.png