TD 3 - Fonctions
1. La fonction tordue from math import * def f(x) :
if x <= 0 : return(x) if x < 1 : return(exp(x)) return(log(x+1))
u = 2
n = int(input("n?"))
for k in range (n) : u = f(u*u)-f(u) print(u)
2. Suite complexe def add(z1,z2) :
return ( [ z1[0]+z2[0] , z1[1]+z2[1] ] ) def mult(z1,z2) :
Re = z1[0]*z2[0] - z1[1]*z2[1]
Im = z1[0]*z2[1] + z1[1]*z2[0]
return ( [ Re , Im ] ) z = [ 1/2 , 1/2 ]
for k in range(5) :
newZ = [0,1] # i
newZ = add( newZ , mult(z , [1,-1]) ) # + (1-i)z newZ = add( newZ , mult(z , z) ) # + z^2 z = newZ
print(newZ)
3. Méthode de Monte Carlo from random import * def X() :
nb = 0
for k in range (10) :
while randint(1,2)==1 : nb = nb + 1 # les FACE
nb = nb + 1 # le PILE
return(nb) def PlusGdNb() :
M = X() S = X() if M>S :
return(M) else :
return(S) s = 0
for k in range(1000) : s = s + PlusGdNb() print(s/1000.0)
1
4. Recherche d'un mot dans un texte def LeMotEstIci (mot, texte, pos) :
OK = True
kMot = 0 # case du mot à tester
while OK and kMot<len(mot) and pos+kMot<len(texte) : if mot[kMot] != texte[pos + kMot] :
OK = False # une mauvaise lettre et c'est perdu kMot = kMot + 1
return(OK and kMot==len(mot)) # il faut que toute les lettres aient été correctes
# et qu'on ait parcouru tout le mot mot = input ("mot ?")
texte = input ("texte ?") DansTexte = False
for k in range(len(texte)) :
if LeMotEstIci (mot, texte, k) : DansTexte = True
print(DansTexte)
5. Le mot le plus long
def OnPeutFaire(mot, lettres) :
alpha = "abcdefghijklmnopqrstuvwxyz"
OK = True
for k in range(26) : c = 0
d = 0
for x in range(len(mot)) :
if alpha[k] == mot[x] : c = c + 1 for x in range(len(lettres)) :
if alpha[k] == lettres[x] : d = d + 1 if c>d : OK = False
return(OK)
Dico = ["vivement" , "les" , "vacances" , "bon" , "sang"]
L = input ("lettres ?") MotPlusLong = ""
for k in range(len(Dico)) : if OnPeutFaire(Dico[k] , L) :
if len(Dico[k]) > len(MotPlusLong) : MotPlusLong = Dico[k]
if MotPlusLong == "" : print("Rien trouvé") else :
print(MotPlusLong)
2
6. Les allumettes from random import * def CreerTas() :
a = []
s = 0
for k in range(5) : NbAlu = randint(1,10) a.append(NbAlu) s = s + NbAlu a.append(55-s) return a def Transfo(a) :
b = []
for x in a : if x>1 :
b.append(x-1) b.append(len(a)) return b
T = CreerTas()
for k in range(100) : print(T)
T = Transfo(T) 7. Suite de Conway
def Transfo(u) :
v = "" # on va créer le nouveau terme de la suite de Conway a = u[0] # a représente le caractère dont on cherche la fréquence nombre = 1 # on va compter le nombre de a
for i in range(1,len(u)) :
if u[i]==a : # si on tombe sur des a, on continue à compter nombre = nombre + 1
else : # si on tombe sur autre chose qu'un a, on enregistre ! v = v + str(nombre) + str(a)
a = u[i]
nombre = 1
v = v + str(nombre) + str(a) # on note les données de la dernière séquence return(v)
u = "1"
for k in range(10) : print(u)
u = Transfo(u) 8. Les permutations
def NextPermut(a) :
###### Trouver la 1ère case à partir de laquelle ça descend, en partant de la fin k = len(a)-2
while k>=0 and a[k]>a[k+1] : k=k-1
###### Trouver la + petite parmi les cases à droite de a[k] plus grandes que a[k]
m = k+1
for i in range(k+2,len(a)) :
if (a[i]<a[m] and a[i]>a[k]) : m = i
###### Echanger a[k] et a[m]
a[k],a[m] = a[m],a[k]
###### Trier par ordre croissant les cases a[k+1]...a[len(a)-1]
for i in range(k+1,len(a)) : for j in range(i,len(a)) :
if a[j]<a[i] :
a[i],a[j] = a[j],a[i]
return a
3