Prise en main de Python et des notebooks


Auteur: Joseph Salmon

[email protected]

import numpy as np import matplotlib.pyplot as plt

Connaître la version de Python utilisée

In [1]:
from platform import python_version
print(python_version())
3.7.3

Creation de tableau 1D avec valeurs numériques

In [2]:
# Ceci est un commenatire
x1 = np.linspace(0.0, 5.0, num=50)
x2 = np.linspace(0.0, 2.0, num=50)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-1e8c54bc0c22> in <module>
      1 # Ceci est un commenatire
----> 2 x1 = np.linspace(0.0, 5.0, num=50)
      3 x2 = np.linspace(0.0, 2.0, num=50)
      4 y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
      5 y2 = np.cos(2 * np.pi * x2)

NameError: name 'np' is not defined
In [ ]:
# Affichage graphique
fig1=plt.figure(figsize=(7,7))
plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'o-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')

plt.subplot(2, 1, 2)
plt.plot(x2, y2, '.-')
plt.xlabel('Time (s)')
plt.ylabel('Undamped')

plt.show() # Pour forcer l'affichage

Fin de la première partie de la démo du cours ici

Affichage et aide

In [ ]:
print('Salut toute le monde')
In [ ]:
print?
In [ ]:
print??
In [ ]:
dir('Salut toute le monde')
In [ ]:
print('Salut

Chaînes de caractères

In [ ]:
first_name = 'Joseph'
last_name = 'Salmon'
print('Prénom = {} ; nom = {};'.format(first_name, last_name))
print(type(first_name))
In [ ]:
len(first_name),len(last_name)
In [ ]:
print('l\'apostrophe dans une chaîne')
print('Hacque ,\n post \n postridie')
print('\t \t descriptione, post \npostridie')

Concaténation:

In [ ]:
'Et un,' + ' et deux,' + ' et trois zéros'

Répétition:

In [ ]:
'Et un,' * 8

Remplacement:

In [3]:
'Et un,'.replace('un', 'deux')
Out[3]:
'Et deux,'

Découpage:

In [4]:
chaine = 'aaa, bbb, cccc, dd'
chaine.split(',')
Out[4]:
['aaa', ' bbb', ' cccc', ' dd']

Extraction:

In [5]:
chef_gaulois = 'Abraracourcix'
print(chef_gaulois[1], chef_gaulois[-2])
test = 4
print(chef_gaulois[test:], chef_gaulois[:test])
print(chef_gaulois[2:5])
print(chef_gaulois[::4], chef_gaulois[::-2])
b i
racourcix Abra
rar
Arux xcucrrA

Entier / int

In [6]:
fact5 = 1 * 2 * 3 * 4 * 5
print(fact5)
120
In [7]:
7 / 3
Out[7]:
2.3333333333333335
In [8]:
type(7)
Out[8]:
int
In [9]:
7 // 3
Out[9]:
2
In [10]:
7 % 3
Out[10]:
1
In [11]:
type(7 // 3)
Out[11]:
int
In [12]:
type(7 / 3)
Out[12]:
float

Flottants / floats

In [13]:
1e-3
Out[13]:
0.001
In [14]:
1e15
Out[14]:
1000000000000000.0

Exemples à méditer:

In [15]:
0.1 + 0.2 - 0.3
Out[15]:
5.551115123125783e-17
In [16]:
nb_small1 = 1e-41
nb_small2 = 1e-40
nb_small1 - nb_small2
Out[16]:
-8.999999999999999e-41
In [17]:
nb_big1 = 1e150
nb_big2 = 1e150
nb_big1 * nb_big2
Out[17]:
9.999999999999999e+299
In [18]:
too_big = nb_big1 * nb_big2 ** 2
print(too_big)
inf
In [19]:
too_big / too_big
Out[19]:
nan
In [20]:
too_big -too_big
Out[20]:
nan
In [21]:
int(3.0),type(int(3.0))
Out[21]:
(3, int)
In [22]:
float(3), type(float(3))
Out[22]:
(3.0, float)
In [23]:
type(float(3)), str(3.)
Out[23]:
(float, '3.0')
In [24]:
float('3.'), type(float('3.'))
Out[24]:
(3.0, float)

Complexes

In [25]:
1j**2
Out[25]:
(-1+0j)
In [26]:
z=complex(4,3)
print(z,type(z))
(4+3j) <class 'complex'>
In [27]:
import cmath
z = complex(4, 3)
print(abs(z), cmath.polar(z))
print(z.real, z.imag)
5.0 (5.0, 0.6435011087932844)
4.0 3.0

Booléens

In [28]:
a = 3
b = 4
print(a == 4)
False
In [29]:
print( a < b)
True
In [30]:
petit_nb = 0.1 + 0.2 - 0.3
mon_test = petit_nb == 0
print(mon_test)
False
In [31]:
import math
print(petit_nb)
print(math.isclose(0., petit_nb, abs_tol=1e-5))
print(math.isclose(0., petit_nb, abs_tol=1e-17))
5.551115123125783e-17
True
False

Listes

In [32]:
a = ["bras", "jambes", 10, 12]
a
Out[32]:
['bras', 'jambes', 10, 12]
In [33]:
a[0:2] = []
a
Out[33]:
[10, 12]
In [34]:
a[1:1] = ['main', 'coude']  # Insertion
a
Out[34]:
[10, 'main', 'coude', 12]
In [ ]:
 
In [35]:
a[:] = []
a, len(a), type(a)
Out[35]:
([], 0, list)
In [36]:
dir(a)
Out[36]:
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__iadd__',
 '__imul__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__rmul__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'append',
 'clear',
 'copy',
 'count',
 'extend',
 'index',
 'insert',
 'pop',
 'remove',
 'reverse',
 'sort']

Dictionnaires

In [37]:
dico = {}
dico['car'] = 'voiture'
dico['plane'] ='avion'
dico['bus'] ='bus'
print(dico)
{'car': 'voiture', 'plane': 'avion', 'bus': 'bus'}
In [38]:
del(dico['bus'])
dico
Out[38]:
{'car': 'voiture', 'plane': 'avion'}
In [39]:
print(dico[1:2])  # attention erreur!
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-39-4d4a43c4bd22> in <module>
----> 1 print(dico[1:2])  # attention erreur!

TypeError: unhashable type: 'slice'
In [43]:
print(dico + dico)  # attention erreur!
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-43-51d1d282ffbd> in <module>
----> 1 print(dico + dico)  # attention erreur!

TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
In [44]:
# Zipping
dico_2 = dict(zip(['car', 'plane'], ['voiture', 'avion']))
print(dico_2)
{'car': 'voiture', 'plane': 'avion'}
In [45]:
dico_3 = {'nom': {'first': 'Alexandre', 'last': 'PetitChateau'},
       'emploi': ['enseignant', 'chercheur'],
       'age': 36}
print(dico_3)
{'nom': {'first': 'Alexandre', 'last': 'PetitChateau'}, 'emploi': ['enseignant', 'chercheur'], 'age': 36}

If then else

In [46]:
nb_a = 14
if nb_a%2==0:
    print("nb_a est paire")
else:
    print("nb_a est impaire")
nb_a est paire
In [47]:
nb_a = 11
if nb_a%3==0:
    print("nb_a est congru à 0 modulo 3")
elif nb_a%3==1:
    print("nb_a est congru à 1 modulo 3")
else:
    print("nb_a est congru à 2 modulo 3")
nb_a est congru à 2 modulo 3

Boucle for

In [48]:
for i in range(4):
    print("La racine de {:d} est {:.3f}".
          format(i, i**0.5))
La racine de 0 est 0.000
La racine de 1 est 1.000
La racine de 2 est 1.414
La racine de 3 est 1.732
In [49]:
a = [1,4,2,7,1,9,0,3,4,6,6,6,8,3]
[x for x in a if x > 5]
Out[49]:
[7, 9, 6, 6, 6, 8]
In [50]:
print([c * 2 for c in 'ohé'])
['oo', 'hh', 'éé']

Enumerate

In [51]:
liste_carres =[]  # init: liste vide
for i in range(4):
    liste_carres.append(i**2)
In [52]:
for i, carre in enumerate(liste_carres):
    print(int(carre**0.5))  # affichage en passant de float à int
0
1
2
3

Boucle while

In [53]:
i = 0
print("Nb x t.q. 2^x < 100:")
while (2**i < 10):
    print("{0}".format(i))
    i += 1  # incrémente le compteur
Nb x t.q. 2^x < 100:
0
1
2
3

Fonctions

In [54]:
def fonction1():
    print("mon test")
In [55]:
fonction1()
mon test
In [56]:
def fonction2(s):
    """
    Affichage d'une chaîne et de sa longueur
    """
    print("{} est de longueur : ".format(s) + str(len(s)))
In [57]:
fonction2("Cette chaine de test")
Cette chaine de test est de longueur : 20

Pour afficher la documentation de la fonction fonction2:

In [58]:
fonction2?

Pour afficher le code source de la fonction fonction2:

In [59]:
fonction2??
In [60]:
def square(x):
    """
    Retourne le carré de x.
    """
    return x ** 2
In [61]:
square(3), square(0.4)
Out[61]:
(9, 0.16000000000000003)
In [62]:
def powers(x):
    """
    Retourne les premières puissances de x.
    """
    return x ** 2, x ** 3, x ** 4
In [63]:
out = powers(3)
print(out)
print(type(out))
x2, x3, x4 = powers(3)
print(x2, x3)
(9, 27, 81)
<class 'tuple'>
9 27
In [64]:
def ma_puissance(x, exposant=3, verbose=False):
    """
    Fonction calculant une puissance

    Parameters
    ----------
    x : float,
        Valeur du nombre dont on calcule la puissance

    exposant : float, default 3
        Paramètre de l'exposant choisi

    verbose : bool, default False
        Paremètre d'affichage

    Returns:
    -------
    Retourne x élevé à la puissance exposant (default=3)
    """
    if verbose is True:
        print('version verbeuse')
    return x ** exposant
In [65]:
ma_puissance(5), ma_puissance(5, verbose=False, exposant=2)
Out[65]:
(125, 25)
In [66]:
ma_puissance?

Input: entrées interactives / boites de dialogue

In [75]:
nom = input('Entrer votre nom de famille: ')
prenom = input('Entrer votre prénom: ')
Entrer votre nom de famille: Salmon
Entrer votre prénom: Joseph
In [76]:
print("Je m'appelle {} {}.".format(prenom, nom))
Je m'appelle Joseph Salmon.

Questions sur les textes: comment mettre des apostrophes ' et des guillemets " dans un texte?

In [69]:
texte1 = '"Isn\'t," she said.'
print(texte1)
"Isn't," she said.
In [70]:
texte2 = '''"Isn't," she said.'''
print(texte2)
"Isn't," she said.
In [71]:
type(9 / 3)
Out[71]:
float
In [ ]: