** LP2: Exercices - Corrigé**

A. Boucle

🐍 Script Python
    def boucle(i, k):
        if i == k:
            return str(i)
        else:
            return(str(i)+ ' ' + boucle(i+1,k))

B. Le nombre de chiffres

Version avec chaine de caractères :

🐍 Script Python
    def nombre_de_chiffres(n):
        if len(str(n)) == 0:
            return 0
        else:
            return(1 + nombre_de_chiffres(str(n)[1:]))

Version avec entiers :

🐍 Script Python
    def nombre_de_chiffres(n):
        if n < 10:
            return 1
        else:
            return (1 + nombre_de_chiffres(n/10))

C. Fonction Factorielle

🐍 Script Python
def factoriel(x):
    """
    Fonction renvoyant la factorielle de x
    """

    if x == 1:                  # Cas de base
        return 1
    else:
        return x * factoriel(x-1)

B. Sommes

Somme de 2 nombres

🐍 Script Python
def somme(a, b):
    if b==0:
        return 1
    else:
        return somme(1, a-1) + somme(1, b-1)

Somme de 2 relatifs

🐍 Script Python
def somme_relatif(a, b):
    if b==0:
        return a
    else:
        if a>0 and b>0:
            return somme_relatif(1, a-1) + somme_relatif(1, b-1)
        if a>0 and b<0:
            return somme_relatif(1, a-1) + somme_relatif(-1, b+1)  
        if a<0 and b>0:
            return somme_relatif(-1, a+1) + somme_relatif(1, b-1)
        if a<0 and b<0:
            return somme_relatif(-1, a+1) + somme_relatif(-1, b+1)

C. Palindromes

🐍 Script Python
def palind(x):
    """
    Fonction testant si un mot x est un palindrome
    Renvoie False si pas palindrome
    Renvoie True si palindrome
    """
    if len(x)>1:
        if x[0]==x[-1]:
            erreur = True
        else:
            erreur = False
        return erreur and palind(x[1:-1])
    else: 
        return False

print(palind("moto"))
print(palind("abba"))
print(palind("kayak"))
print(palind("salut"))

Sortie du programme:

False
True
True
False

D. Suite de Fibonacci

🐍 Script Python
def fibonacci(n, suite=[]):
    """
    Fonction récursive affichant les n premiers nombres de la suite de Fibonacci
    suite=[] : paramètre optionnel, si omis prend la valeur par défaut : []
    """
    if n == 0:                  # Cas de base
         return [0, 1]          # Début de la suite
    else:
        suite = fibonacci(n-1)                         # Appel récursif de la fonction
        suite.append(suite[-1] + suite[-2])           # calcul du nouveau nombre, ajout à la liste
        return suite                                  # Renvoi de la liste contenant la suite


print(fibonacci(5))

Sortie du programme :
[0, 1, 1, 2, 3, 5, 8]

# On obtient une suite de n+2 nombres.
# Pour avoir une suite de n nombres, Que faut-il modifier ?

F. EXERCICES EN PLUS

1. Fractales

Arbre de Pythagore

Angle de 30°
Angle de 50°
Angle de 110°
🐍 Script Python
from turtle import *

angle = 30
color('#3f1905')

def arbre(n,longueur):
    if n==0:
        color('green')
        forward(longueur) # avance
        backward(longueur) # recule
        color('#3f1905')
    else:
        width(n)
        forward(longueur/3) #avance
        left(angle) # tourne vers la gauche de angle degrés
        arbre(n-1,longueur*2/3)
        right(2*angle) # tourne vers la droite de angle degrés
        arbre(n-1,longueur*2/3)
        left(angle) # tourne vers la gauche de angle degrés
        backward(longueur/3) # recule

hideturtle() # cache la tortue
up() # lève le stylo
right(90) # tourne de 90 degrés vers la droite 
forward(300) # avance de 300 pixels
left(180) # fait un demi-tour
down() # pose le stylo
arbre(11,700) # exécute la macro
showturtle() # affiche la tortue
mainloop()

Spirale

🐍 Script Python
from turtle import *

def spirale(n):
    if n <= 0: 
        return   
    for j in range(4):
        forward(3*n)
        left(90)
    right(10)
    spirale(n-1)

speed(20)
pensize(2)
pencolor("black")

spirale(73)
mainloop()

2. Conjecture de Syracuse

🐍 Script Python
    def syracuse(u):
        print(u)
        if u != 1:
            if u%2==0:
                return syracuse(u/2)
            else:
                return syracuse(3*u+1)
        else:
            print("fin")