Ne pas aller à la ligne avec un print en spécifiant le caractère de fin.
Ici end=' ' c'est une espace.
In [0]:
def affiche(mot='rien'):
"""pas de retour à la ligne, mais une espace"""
for I in range(3):
print(I,mot,end=' ')
affiche()
Associer un caractère avec son point de code de façon biunivoque.
In [0]:
def code_cesar(mot='Bonjour tout le monde', decalage=3):
"""César avec un décallage de 1"""
return "".join([chr(ord(c)+decalage) for c in mot])
code_cesar()
Ecrire des if en ligne.
In [0]:
def autre_ecriture_si(masse):
"""écrite de if en ligne"""
return 3*masse if masse<=20 else (2*masse if masse<50 else masse)
autre_ecriture_si(20)
Liste en compréhension avec des entrées.
In [0]:
def si_en_ligne():
"""liste en compréhention"""
return sum([float(input('jour '+str(I)+' : ')) for I in range(7)])/7
si_en_ligne()
Liste de nombres pseudo-aléatoires, mais périodiques... (principe des tiroirs de Dirichlet)
In [0]:
import matplotlib.pyplot as plt
def pseudo_alea(n=100):
"""liste de nombres pseudo-aléatoires"""
liste=[13]
for I in range(n):
liste.append((16805*liste[I] + 1) % 32768)
plt.subplot(1,2,1)
plt.plot(liste,'.')
plt.title('nombres')
pileFace=[bin(nb)[-1] for nb in liste]
plt.subplot(1,2,2 )
plt.plot(pileFace,'.')
plt.title('bits de poids faibles')
plt.show()
pseudo_alea()
In [0]:
def puissance_de_2(n=10):
"""retourne la puissance n-ième de 2"""
return 1 if n==0 else 2*puissance_de_2(n-1)
puissance_de_2()
In [0]:
def PGCD(a,b):
"""retourne le PGCD à partir de l'algorithme d'Euclide"""
return b if a%b==0 else PGCD(b,a%b)
PGCD(30,42)
In [0]:
def base_10_vers_n_recursif(nb=6007,n=5):
"""retourne l'écriture de nb en base n"""
return str(nb) if nb//n==0 else base_10_vers_n_recursif(nb//n,n)+str(nb%n)
base_10_vers_n_recursif(1020,2)
avec les listes différence entre le tri en place a.sort() et sorted(a) qui produit une autre liste
In [0]:
def deux_tris(liste=[2,1,8,6,5,7,5,6]):
"""illusrte le tri en place et le tri dans une autre liste"""
print(sorted(liste))#renvoie une autre liste
print(liste)
liste.sort()#en place
print(liste)
deux_tris()
L'encodage des caractères
In [0]:
print("\N{GREEK CAPITAL LETTER DELTA}")
print("\u0394")
Pour tester une égalité, l'astuce est de voir si les deux nombres sont \og vraiment \fg{} proches.
In [0]:
from math import *
def egalite(a=0.3,b=0.1+0.1+0.1):
"""retourne le test d'égalité stricte et le test de proximité"""
return (a==b, isclose(a,b))
egalite()
Affichage de courbes avec matplotlib.pyplot
In [0]:
import numpy as np
import matplotlib.pyplot as plt
def graphiques(f = lambda x : x**2):
"""tracés des courbes"""
X=np.linspace(-2,1.5,100)#100 valeurs de -2 à 1.5 dans un ndarray de numpy
Y=f(X)
plt.plot(X,Y,'r-')#- -- ^ s -. : b g r c m y k w , linewidth=0.8, marker="+", label="Trajet 2"
plt.ylabel('$C_f$')
plt.title("f en fonction de x")
plt.show()
graphiques()
Graphiques statistiques avec matplotlib
In [0]:
import numpy as np
import matplotlib.pyplot as plt
def graphiques():
"""graphique statistiques"""
x = [1,2,3,4,5]
donnees=[20,5,60,10,20]
noms=['A','B','C','D','E']
explode=(0, 0, 0.15, 0,0)#sépart la part de 'B'
plt.subplot(1,2,1)
plt.pie(donnees, explode=explode, labels=noms, autopct='%1.2f%%', startangle=90, shadow=True)
plt.axis('equal')# un camembert bien rond
plt.subplot(1,2,2)
plt.bar(x,donnees, width=0.5, color=(0.1,0.2,0.3, 1.0) )
plt.xticks(x,noms)
plt.grid()
plt.savefig('circulaire et barres.png')
plt.show()
graphiques()
histogramme et diagramme en boite
In [0]:
from random import *
import matplotlib.pyplot as plt
def graphiques(n=1000):
"""simule n fois la somme de 5 dés"""
X1=[randint(1,6)+randint(1,6)+randint(1,6)+randint(1,6)+randint(1,6) for I in range(n)]
X2=[randint(1,6)+randint(1,6)+randint(1,6)+randint(1,6)+randint(1,6)for I in range(n)]
plt.subplot(1,2,1)
plt.boxplot([X1,X2])
plt.subplot(1,2,2)
plt.hist(X1,bins=[0,10,15,18,20,22,25,31],color=(1,0,0,1))
plt.hist(X2,bins=[0,10,15,18,20,22,25,31],color=(0,0,1,0.5))
plt.grid()
plt.savefig('boite et histogramme.png')
plt.show()
graphiques()