TP : dessins géométriques : utilisation de doubles boucles ♣

Contenu

TP : dessins géométriques : utilisation de doubles boucles ♣#

Exercice#

  • Écrivez une fonction carre_plein qui, pour un entier positif non nul \(L\) donné, affiche sur la sortie standard un carré plein dont les côtés sont de longueur \(L\) caractères. Par exemple, pour \(L=5\), la fonction affichera :

    *****
    *****
    *****
    *****
    *****
    

Indication : Les sauts de ligne en python

Par défaut, la fonction print() en python ajoute automatiquement un retour à la ligne. Pour l’éviter, on rajoute l’argument end="" à la fonction : print("Hello world!", end=""). Pour sauter une ligne, il suffit d’appeler la fonction sans argument : print().

def carre_plein( L) :
    ### BEGIN SOLUTION
    caractere = "*"
    for i in range(L):
        for j in range(L):
            print(caractere,end="")
        print()
    ### END SOLUTION
carre_plein(5)
*****
*****
*****
*****
*****
carre_plein(3)
***
***
***
  • Même question mais cette fois la fonction affiche un carré vide. Pour l’exemple précédent, cela donne :

    *****
    *   *
    *   *
    *   *
    *****
    
def carre_vide(L):
    ### BEGIN SOLUTION
    if ( L >= 1 ):
        for j in range(L):
            print("*", end="")
    print()
    for i in range(1, L-1):
        print("*", end="")
        for j in range(L-2):
            print(" ", end="")
        print("*")
    if ( L >= 2 ):
        for j in range(L):
            print("*", end="")
    print()
    ### END SOLUTION
### BEGIN SOLUTION

## Solution alternative
def carre_vide(L) :
    for i in range(L):
        for j in range(L):
            if ( i == 0 or i == L-1 or j == 0 or j == L-1):
                print("*", end="")
            else:
                print(" ", end="")
        
        print()

### END SOLUTION
carre_vide(5)
*****
*   *
*   *
*   *
*****
carre_vide(2)
**
**
carre_vide(1)
*
carre_vide(0)
  • Transformez votre fonction pour qu’il soit simple de remplacer le caractère * par un autre caractère caractere :

def carre_vide(L, caractere):
    ### BEGIN SOLUTION
    if ( L >= 1 ):
        for j in range(L):
            print(caractere, end="")
    print()
    for i in range(1, L-1):
        print(caractere, end="")
        for j in range(L-2):
            print(" ", end="")
        print(caractere)
    if ( L >= 2 ):
        for j in range(L):
            print(caractere, end="")
    print()
    ### END SOLUTION
carre_vide(4, "#")
####
#  #
#  #
####
  • Écrivez une fonction qui, pour un entier positif \(h\) donné, affiche le triangle isocèle  pointe en haut  dont le contour est décrit par des étoiles, de hauteur \(h\) et de base \(2h-1\). Par exemple, pour \(h=5\), la fonction affichera :

            *
           * *
          *   *
         *     *
        *********
    
def triangle(h, caractere="*"): #dans cette fonction, caractere a la valeur "*" par défaut :
                                #si la fonction est appelée sans l’argument, il prend cette valeur.
    ### BEGIN SOLUTION
    for i in range(h-1):
        for j in range(h-1-i):
            print(" ",  end="")
        print(caractere,  end="")
        if (i > 0):
            for j in range(2*i-1):
                print(" ",  end="")
            print(caractere,  end="")
        print()
    for j in range(2*h-1): 
        print(caractere,  end="")
    print()
    ### END SOLUTION
### BEGIN SOLUTION

#Solution alternative
def triangle(h, caractere="*"):
    for i in range(h):
        for j in range(2*h-1):
            if ( i == -j + h - 1  or  i == h-1  or  i == j - h + 1 ):
                print(caractere,  end="")
            else:
                print(" ",  end="")
        print()
### END SOLUTION

Vous noterez ci-dessous que l’on a donné une valeur par défaut pour caractere : *. Du coup, on peut utiliser les deux formes suivantes :

triangle(4)
   *   
  * *  
 *   * 
*******
triangle(5, "#")
    #    
   # #   
  #   #  
 #     # 
#########
triangle(2)
 * 
***
triangle(1)
*
triangle(0)
  • Écrivez une fonction qui affiche un losange. Par exemple, pour \(h=5\), la fonction affichera :

        *
       * *
      *   *
     *     *
    *       *
     *     *
      *   *
       * *
        *
    
def losange(h, caractere="*"):
    ### BEGIN SOLUTION
    for i in range(0, h):
        for j in range(0, h-i-1):
            print(" ",  end="")
        print(caractere,  end="")
        if (i > 0):
            for j in range(2*i-1):
                print(" ",  end="")
            print(caractere,  end="")
        print()
    for i in range(h-2, -1, -1):
        for j in range(h-i-1):
            print(" ", end="")
        print(caractere,  end="")
        if (i > 0):
            for j in range(2*i-1):
                print(" ",  end="")
            print(caractere,  end="")
        print()
    ### END SOLUTION
### BEGIN SOLUTION
## Solution alternative
def losange( h, caractere="*"):
    for i in range(2*h-1):
        for j in range(2*h-1):
            if ( ( i <= h-1 and (i == -j +   h - 1 or i == j - h + 1) ) or
                 ( i >  h-1 and (i == -j + 3*h - 3 or i == j + h - 1) ) ):
                print(caractere, end="")
            else :
                print(" ",  end="")
        print()
### END SOLUTION
losange(5)
    *    
   * *   
  *   *  
 *     * 
*       *
 *     * 
  *   *  
   * *   
    *    
losange(1)
*
losange(0)

Retourner à l’index