1+1+1
a=3
b=2
print("type de donnée :", type(a), "chaine supplémenaire")
print("addition :",a+b)
print("soustraction :", a-b)
print("multiplication :", a*b)
print("puissance :", a**b)
print("division euclidienne :",a//b)
print("reste :", a%b)
print("division :", a/b)
a=3.5
b=2.8
print("type de donnée :", type(a))
print("addition :",a+b)
print("soustraction :", a-b)
print("multiplication :", a*b)
print("puissance :", a**b)
print("division euclidienne :",a//b)
print("reste :", a%b)
print("division :", a/b)
Pour la conversion.
a=1.5
print("type :", type(a), "valeur :", a)
b=int(a)
print("type :", type(b), "valeur :", b)
c=float(b)
print("type :", type(c), "valeur :", c)
x=(1,2)
print("type de donnée :")
print(type(x), "valeur :", x)
Accès au différents éléments.
print("premier élément :", x[0])
print("deuxième élément :", x[1])
y=(1,2,3,4,5,4,3,2,1)
print(y)
y.
print("premier indexe où on à la valeur 5 :", y.index(5))
print("combien de fois a-t-on 4 :", y.count(4))
y[0]=2
liste=[1,2,3,4,5,4,3,2,1]
print("type de donnée :", type(liste))
print("valeur :", liste)
Comme pour les tuple :
print("première valeur", liste[0])
print("dernière valeur :", liste[-1])
print("découpage :", liste[1:4])
print("découpage plus fin :", liste[1::2])
print("premier indexe où on à la valeur 5 :", liste.index(5))
print("combien de fois a-t-on 4 :", liste.count(4))
Différence : structure dynamique.
print("avant :", liste)
liste.append(2)
print("après :", liste)
print("avant :", liste)
c=liste.pop()
print("après", liste)
print("et on a récupéré la valeur manquante :", c)
De nombreuses méthodes disponibles.
Utiliser la touche TAB
après avoir tapé :
liste.
print("avant :", liste)
liste.sort()
print("après :", liste)
print("avant :", liste)
liste.reverse()
print("après :", liste)
print("avant :", liste)
liste.extend([1.5, 1.6, 1.7, 1.8])
print("après :", liste)
print("avant :", liste)
liste.insert(2,-5)
print("après :", liste)
print("avant :", liste)
liste.remove(-5)
print("après :", liste)
tuple(liste)
On verra des techniques de construction plus élaborées au moment de la discussion des boucles.
chaine="Journée CASCIMODOT"
print("type de valeur :", type(chaine))
print("valeur :", chaine)
Comme pour les tuples et les listes.
print("découpage :", chaine[1::2])
print("première occurence du c majuscule :", chaine.index('C'))
print("nombres d'occurences de la lettre O :", chaine.count('O'))
Utilisation d'autres déclarations
chaineBis = 'Journée CASCIMODOT'
chaineTierce = """Pour inclure plusieurs lignes
cette syntaxe est particulièrement pratique
comme on peut le constater"""
print(chaineTierce)
Et pour obtenir de l'aide taper :
chaineTierce.split?
ENORMEMENT de méthodes disponible.
print(chaine)
print("mise en majuscule :", chaine.capitalize())
print("remplissage avec des caractères :", chaine.center(50,'*'))
print("recherche de sous-chaine", chaine.find('née'))
print("échange :", chaine.swapcase())
print("séparation autour d'un caractère (défaut espace)", chaine.split())
Possibilité d'inclure des variables.
syntaxe beaucoup plus riche que ce qui est montré ci dessous
a=2.0000008
b=1.2
c=1.3
message='Le prochaine {0} paragraphe {0} est le numéro {0:.2}'.format(a,b,c)
print(message)
Conversions possibles.
a=int('11')
print("type :", type(a))
print("valeur :", a)
b=str(11)
print("type :", type(b))
print("valeur :", b)
chaine='abcdefghijklmnopqrstuvwxyz'
liste=list(chaine)
print("la liste est :", liste)
print('On peut la réunir :', "".join(liste))
print("En choisissant les séparateurs", "* *".join(liste))
Les listes stockent tout type de donnée.
liste=[[1,2,3], 'a', 1/5, 0.2, 12, "chaine".split()]
print(liste)
Permettent d'indexer autrement que par des entiers. Permettent de coder une correspondance.
dico={'a':2, 'b':1, 'c':5, 'd':7, 2: 3}
print('type :', type(dico))
print("valeur :", dico)
print(dico['a'])
print(dico[2])
dico = dict(((1,2),(3,4),(5,6)))
print(dico)
print(dico[1])
Nombreuses méthodes (taper dico. puis la touche de tabulation puis pour l'aide ajouter point d'interrogation).
références, affectation et unpacking+permutation
Unpacking.
a,b,c=1,2,3
print('plusieurs variables affectées en mêmes temps')
print('a :', a)
print('b :', b)
print('c :', c)
liste=[1,2,3,4]
a,b,c,d = liste
print('a :', a)
print('b :', b)
print('c :', c)
print('d :', d)
liste=('a',1,2,'b','essai')
a, *b, c=liste
print('a :', a)
print('b :', b)
print('c :', c)
Mutation et références.
a=1
b=a
print(a,b)
a=2
print(a,b)
a=[1,2,3]
b=a
print(a,b)
a=[4,5,6]
print(a,b)
a=[1,2,3]
b=a
print(a,b)
a.append(4)
print(a,b)
a=a[1:4]
print(a,b)
c=a.append(4)
print(c)
MORALITE : Pas de copie par défaut.
valeur par défaut arguments positionnels, arguments par mots clés, pass
Syntaxe élémentaire.
def maFonction(x):
y=2*x
return y
print(4)
maFonction(2)
maFonction(2.5)
maFonction((2,3))
maFonction([1,2,3])
maFonction("blabla")
Arguments par défaut.
def puissance(n, p=2):
return n**p
puissance(2,3)
puissance(3)
puissance(n=4, p=3)
puissance(p=3, n=4)
Docstring
def documentation():
"""Ceci est retournée par l'aide lorsqu'on la demande."""
pass
documentation?
Attention lorsque l'agument par défaut est mutable.
def problematique(liste=[]):
liste.append(1)
return liste
problematique()
problematique()
problematique()
def problematiqueBis(liste=None):
if liste is None:
liste=list()
liste.append(1)
return liste
problematiqueBis()
problematiqueBis()
booléens
print(type(True),type(False))
a=1
test = (a==1)
print(type(test), test)
test2 = (a<=2.0)
print(test2)
def testBateau(a):
if a==1:
print("Ok")
else:
print("pas Ok")
testBateau(1)
testBateau(2)
def testAvance(a):
if isinstance(a, type(" ")):
print("Chaine de caractére")
elif isinstance(a, type(1)):
print("Entier")
elif isinstance(a, list):
print("Liste")
else:
print("pas clair")
testAvance(1)
testAvance([1,2,3])
while
¶def premier(n):
i=2
while i**2<n:
if n%i != 0:
i+=1
else:
print("Le nombre {} est composite".format(n))
print("Le nombre {} est premier.".format(n))
premier(13)
premier(100)
for
¶itération généralisées, condition else
liste = ['A', 1, [1,2,3]]
for element in liste:
print(element)
uplet = (1,2,3,4,'a','b','bcd')
for element in uplet:
print(element)
Itération sur des objets plus "compliqués".
for i in range(5):
print(i)
type(range(5))
dico = {'a':1, 'b':2, 'c':3}
for indice in dico:
print(indice," : ", dico[indice])
for indice, valeur in dico.items():
print(indice, " : ", valeur)
for valeur in dico.values():
print(valeur)
Et quand on aurait besoin d'un indice.
liste= list('blablablablabla')
for i,lettre in enumerate(liste):
print("indice {0} lettre {1} :".format(i, lettre))
Discuter avantages itérateurs.
liste=[i**2 for i in range(1,10)]
for nombre in liste:
print(nombre)
liste=[i**2 for i in range(1,20) if i%3==1]
for nombre in liste:
print(nombre)
Pour les trop grosses listes.
def est_premier(nb):
for div in range(2,nb-1):
if nb%div == 0:
return False
return True
for i in (i**2 for i in range(1,20) if est_premier(i)):
print(i)
syntaxe standard par with
with open("test.txt", 'w') as aecrire:
aecrire.write("première ligne?")
aecrire.write("deuxième ligne?")
with open("test.txt", 'r') as alire:
print(alire.read())
with open("test.txt", 'a') as arajouter:
arajouter.write("\nNouvelle ligne si tout va bien")
with open("test.txt", 'r') as alire:
print(alire.read())
with open("test.txt", 'r') as alire:
for ligne in alire:
print(ligne)
Là encore un objet fichier à de multiples méthodes.
Tester avec l'autocomplétion, ne pas oublier de fermer avec la méthode close
.
try except
, raise
def division(num, den):
return num/den
division(1,0)
def divisionCorrige(num, den):
try:
return num/den
except ZeroDivisionError:
print("Diviser par zéro c'est mal!")
return None
divisionCorrige(1,0)
MORALE : Mieux vaut demander pardon que la permission (en temps de calcul en tout cas)
map
, lambda
, filter
, zip
reversed
, sorted
, slice
, enumerate
, format
sum
, max
, min
, round
, len
, print
, input
, import
ou from import
Exemples math
, random
, requests
...
import math
On pourra tester l'appui de la touche TAB
après avoir tapé :
math.
math.exp(2)+math.sin(math.pi)
import random as rd
for i in range(5):
print(rd.random())
import copy
copy.copy()
from copy import copy
a=[1,2,3,4]
b=copy(a)
print(a,b)
a.append(5)
print(a,b)
Ordre usuel :
numpy
, numba
, pypy
, cython
, cffi
)def carree(M):
n=len(M)
resultat=list()
for i in range(n):
resultat.append(list())
for j in range(n):
S=0
for k in range(n):
S+=M[i][k]*M[k][j]
resultat[i].append(S)
return resultat
M=[[1,2,3],[4,5,6],[7,8,9]]
print(M)
print(carree(M))
n=300
M=[list(range(n)) for i in range(n)]
%%timeit
carree(M)
import numpy as np
def carreeBis(M):
return M*M
def creation(n):
return np.matrix(np.tile(np.arange(n),n).reshape((n,n)))
creation(10)
M=creation(200)
%%timeit
carreeBis(M)
from numba import jit
@jit
def carreeTierce(M):
n,m=M.shape
assert n==m
resultat=np.zeros((n,n))
for i in range(n):
for j in range(n):
S=0
for k in range(n):
S+=M[i,k]*M[k,j]
resultat[i,j]=S
return resultat
M=creation(200)
%%timeit
carreeTierce(M)
Quelle librairie utiliser? exemples. urllib2/requests
, matplotlib/bokeh
, beautiful soup/lxml
...