[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