Pillole di Python – parte 3: disegnare frecce

Spread the love

Disegnamo come ultimo pattern quattro frecce:

right arrow
*                    
* *                  
* * *                
* * * *              
* * * * *            
* * * *              
* * *                
* *                  
*                    
                     
left arrow
                     
                  *  
                * *  
              * * *  
            * * * *  
          * * * * *  
            * * * *  
              * * *  
                * *  
                  *  
upward arrow
                     
                     
                     
                     
                     
        *            
      * * *          
    * * * * *        
  * * * * * * *      
* * * * * * * * *    
downward arrow
* * * * * * * * *    
  * * * * * * *    
    * * * * *    
      * * *    
        *    
           

Esercizio 7 – disegnare una freccia verso destra (right arrow)

"""
print right arrow
*
* *
* * *
* *  
* 

e.g.
  0 1 2 3 4 5 6 7 8 9         i  test    N-1-i
0 *                           0, j<=0    9
1 * *                         1, j<=1    8
2 * * *                       2, j<=2    7
3 * * * *                     3, j<=3    6
4 * * * * *                   4, j <5    5
5 * * * *                     5, j <4    4
6 * * *                       6, j <3    3
7 * *                         7, j <2    2
8 *                           8, j <1    1
9                             9, j <0    0
"""
print("right arrow")
for i in range(N):
    for j in range(N):
        if j <= i and j < N - 1 - i:
            print("*"),
        else:
            print(" "),
    print(" ")  # a capo

Ho stampato un tracing e ho riportato tutti i valori delle variabili per le varie configurazioni disegnate. Come si vede, si tratta di combinare le condizioni che compaiono negli esercizi 3 e 6 (BLT e TLT), solo che sostituisco la condizione j <= N - 1 - i con j < N - 1 - i in modo da non disegnare la diagonale BLTR che risulterebbe col disegnare una freccia “spuntata”.

Esercizio 8 – disegnare una freccia verso sinistra (left arrow)

"""
print left arrow
    *
  * *
* * *
  * *  
    * 
    
e.g.
  0 1 2 3 4 5 6 7 8 9      i  test    N-1-i
0                   *      0, j>=9    9*
1                 * *      1, j>=8    8*
2               * * *      2, j>=7    7*
3             * * * *      3, j>=6    6*
4           * * * * *      4, j>=5    5*
5             * * * *     *5, j> 5    4
6               * * *     *6, j> 6    3
7                 * *     *7, j> 7    2
8                   *     *8, j> 8    1
9                         *9, j> 9    0 
"""
print("left arrow")
for i in range(N):
    for j in range(N):
        if j >= i and j > N - 1 - i:
            print("*"),
        else:
            print(" "),
    print(" ")  # a capo

Per girare la freccia a sinistra è necessario ribaltare entrambe le condizioni di test:

  • da j<=i a j>=i
  • da j <= N - 1 - i a j > N - 1 - i

L’assenza dell’= sulla seconda condizione, al solito, evita il disegno della doppia punta.

Possiamo indovinare che anche per le frecce up e down si dovrà fare lo stesso…

Esercizio 9 – disegnare una freccia verso l’alto (upward arrow)

"""
print upward arrow
    *  
  * * *
* * * * * 

e.g.
  0 1 2 3 4 5 6 7 8 9
0
1
2
3
4                       N-1-i  test  i    
5         *                 4 <= j < 5
6       * * *               3 <= j < 6
7     * * * * *             2 <= j < 7
8   * * * * * * *           1 <= j < 8
9 * * * * * * * * *         0 <= j < 9

"""
print("upward arrow")
for i in range(N):
    for j in range(N):
        if N - i - 1 <= j < i:
            print("*"),
        else:
            print(" "),
    print(" ")  # a capo

Qui è ormai evidente: è l’intersezione dei due esercizi BLT e BRT (esercizi 3 e 5). L’ultimo esercizio è la freccia verso il basso e, ormai, tutti gli arcani dovrebbero essere svelati e possiamo dire “com’era facile!”

Esercizio 10 – disegnare una freccia verso il basso (downward arrow)

"""
print downward arrow
* * * * * 
  * * *
    *  

e.g.
  0 1 2 3 4 5 6 7 8 9     i   test  N-1-i
0 * * * * * * * * *       0   <=j<  9
1   * * * * * * *         1   <=j<  8
2     * * * * *           2   <=j<  7
3       * * *             3   <=j<  6
4         *               4   <=j<  5
5
6
7
8
9 
"""
print("downward arrow")
for i in range(N):
    for j in range(N - i):
        if i <= j < N - 1 - i:
            print("*"),
        else:
            print(" "),
    print(" ")  # a capo

Spero abbiate trovato divertenti questi piccoli esercizi (sì… anche se alla fine sono un po’ silly).

Alle prossime pillole!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.