Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Dessins géométriques : utilisation de doubles boucles ♣

Exercice

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)
***
***
***
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)
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, "#")
####
#  #
#  #
####
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)
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)