[Python] La matrice immortale.

Daniele Zambelli daniele.zambelli a gmail.com
Lun 30 Giu 2014 15:32:53 CEST


Il 30 giugno 2014 10:54, Gabriele Battaglia <iz4apu a libero.it> ha scritto:
> Ho questa funzione che inizializza una matrice bidimensionale: una lista che
> ne contiene altre 2 formando una griglia 8x8. La funzione restituisce la
> matrice che poi viene usata in altre parti dello script.
>
> Ecco la funzione:
> ***
> def InizializzaSCH():
>    '''Restituisce la matrice per la scacchiera'''
>    global inizializzata, SCH
>    if inizializzata:
>        del col1, col2, SCH
>        inizializzata = True
>    SCACCHIERA=[]; col1=[]; col2=[]
>    for j in range(4):
>        col1.append(CASANERA); col1 = col1 [:]
>        col1.append(CASABIANCA); col1 = col1 [:]
>    for j in range(4):
>        col2.append(CASABIANCA); col2 = col2 [:]
>        col2.append(CASANERA); col2 = col2 [:]
>    for y in range(4):
>        SCACCHIERA.append(col1); col1 = col1 [:]
>        SCACCHIERA.append(col2); col2 = col2 [:]
>    return SCACCHIERA
> ***
>

Ci sono delle cose strane nella tua funzione:

1. "global": quando usi questa istruzione poniti sempre la domanda se
non sia il caso di ripensare la logica del programma.
2. " if inizializza: [...] inizializza = True": se inizializza è già
True è inutile assegnargli True.
3. "SCACCHIERA": in Python la convenzione è che il TUTTOMAIUSCOLO
viene usato per le costanti.
4. ogni volta che aggiungi un elemento ad una colonna poi ricopi la
colonna, mossa assolutamente inutile.
5. I due primi cicli possono essere riuniti in uno unico.
6. Il terzo ciclo non costruisce una scacchiera con diverse colonne ma
sempre con le stesse due: le ultime create dai cicli precedenti.

per quanto riguarda il punto 1 direi che inizializzaSCH deve solo
inizializzare la scacchiera fregandosene se era già inizializzata. È
chi chiana "inizialzzaSCH" che si deve preoccupare de deve proprio
farlo o no. Per cui elimini le prime quattro righe della funzione.

Inizializzare una scacchiera consiste nell'aggiungere 4 volte una col1
e una col2 e queste sono costruite aggiungendo 4 volte una CASANERA e
una CASABIANCA.

una cosa del genere:

def iniSCH():
    """'Restituisce la matrice per la scacchiera'''""
    result = []
    for i in rang(4):
        col1 = []
        col2 = []
        # ... qui il ciclo che crea le colonne
        result.append(col1)
        result.append(col2)
    return result

Ciao

-- 

Daniele

www.fugamatematica.blogspot.com

    giusto!
    nel verso
    forse è perché non guardiamo le cose
    Quando non ci capiamo,


Maggiori informazioni sulla lista Python