La fonction python vol que l’on peut copier-coller.
def vol(n):
retour=str(n) # description du vol
hauteur=n # hauteur max du vol fixée à n au départ
long=1 # longueur du vol
boucle=True # variable booléenne pour déterminer quand on met fin à l'algorithme
nb=n # variable locale qui prend la valeur n de départ pour éviter des effets de bords
while boucle:
if nb>hauteur : # on vérifie si le nombre dépasse la hauteur
hauteur=nb # si oui, on modifie la hauteur
long+=1 # on ajoute 1 étape, donc 1 à la longueur du vol
if nb%2==0: # on applique l'algorihtme de syracuse
nb=nb//2
else :
nb=nb*3+1
retour+=","+str(nb) # on ajoute la valeur au vol
if nb==1 : # on s'arrête lorsque nb==1
boucle=False
return retour,long,hauteur # on retourne les 3 valeurs attendues
La fonction vol à compléter en utilisant la notion de tuples.
def vol(n):
retour=(n,) # description du vol, retour est un tuple
boucle=True # variable booléenne pour déterminer quand on met fin à l'algorihtme
nb=n # variable locale qui prend la valeur n de départ pour éviter des effets de bords
while boucle:
if nb%2==0: # on applique l'algorihtme de syracuse
nb=nb//2
else :
nb=nb*3+1
....
if nb==1 : # on s'arrête lorsque nb==1
boucle=False
return retour, ... , ... # on retourne les 3 valeurs attendues
Pour en savoir plus sur la conjecture de Collatz :
https://fr.m.wikipedia.org/wiki/Conjecture_de_Syracuse
Correction finale du tp avec tracés de différentes courbes
import numpy as np # importe la bibliothèque numpy
import matplotlib.pyplot as plt # importe la bibliothéque matplotlib pour le tracé des courbes
def vol(n):
retour=(n,) # description du vol comme un tuple
boucle=True # variable booléenne pour déterminer quand on met fin à l'algorithme
nb=n # variable locale qui prend la valeur n de départ pour éviter des effets de bords
while boucle:
if nb%2==0: # on applique l'algorihtme de syracuse
nb=nb//2
else :
nb=nb*3+1
retour+=(nb,) # on ajoute la valeur au vol
if nb==1 : # on s'arrête lorsque nb==1
boucle=False
return retour,len(retour),max(retour) # on retourne les 3 valeurs attendues
def hauteur_max(n):
''' Détermine quel est l'entier compris entre 1 et n
qui a le vol le plus haut
return : k, hauteur du vol de k ( tuple)
'''
haut_max=0
k=1
for i in range(1,n+1):
if vol(i)[2]>haut_max:
haut_max=vol(i)[2]
k=i
return k,haut_max
def longueur_max(n):
''' Détermine quel est l'entier compris entre 1 et n
qui a le vol le plus haut
return : k, hauteur du vol de k ( tuple)
'''
long_max=0
k=1
for i in range(1,n+1):
if vol(i)[1]>long_max:
long_max=vol(i)[1]
k=i
return k,long_max
def tracer_courbe_vol(n):
''' trace le vol du nombre n
return : graphique
'''
vol_n=vol(n)[0]
print(vol_n)
x=[]
y=[]
for i in range(len(vol_n)):
x.append(i)
y.append(vol_n[i])
plt.plot(x, y)
plt.show() # affiche la figure a l'ecran
def tracer_courbe_hauteur_vol(n):
'''
trace la courbe (k,hauteur du vol de k)
pour k compris entre 1 et n
return : graphique
'''
x=[]
y=[]
for i in range(1,n+1):
x.append(i)
y.append(vol(i)[2])
plt.plot(x, y)
plt.show() # affiche la figure a l'ecran
def tracer_courbe_longueur_vol(n):
'''
trace la courbe (k,longueur du vol de k)
pour k compris entre 1 et n
return : graphique
'''
x=[]
y=[]
for i in range(1,n+1):
x.append(i)
y.append(vol(i)[1])
plt.plot(x, y)
plt.show() # affiche la figure a l'ecran