Python in pillole – parte 3: disegnare frecce

Python logo

Python programming skill terza parte: disegnamo in modalità testo come ultimo pattern quattro frecce:

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

Esercizio Python 7 – 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 Python 8 – 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 Python 9 – 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 Python 10 – 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!

Altre pillole Python sul disegno di frecce

Disegnare frecce 1 – Disegnare frecce 2

Link utili

Python.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.