[Python] Errore di semantica -

Alessandro Re ale a ale-re.net
Mer 24 Giu 2015 22:08:20 CEST


2015-06-24 20:41 GMT+01:00 Carpediem <i.carpediem a tiscali.it>:
> Ciao Alessandro, innanzitutto grazie infinite. La tua risposta non solo mi
> ha risolto il problema ma mi ha aperto molti altri orizzonti:
> quello sopra, è uno di questi ma, come avrai capito, sono alle prime armi
> con python e lavorando per 9 ore al giorno per 6 giornia settimana,
> i miei progressi sono molto lenti. Ho molte idee per la testa e provo a
> metterle in pratica con quel poco che ho finora acquisito. Quanto sopra, mi
> piace molto.

Ciao,
sì, avevo intuito e per questo ti ho dato qualche consiglio di altro tipo :)
Bene se ti è utile.

> Qui non ti seguo: in realtà il mio codice prevede una ulteriore lista di
> altre 65 variabili (che mi sono risparmiato dal
> riportare) e sinceramente, ritengo l'insieme troppo lungo per scriverlo riga
> per riga)

Ok, è questione di gusti :)
Comunque, dato che hai diverse stringhe composte tipo "carre 1a3",
"carre 2a6", oppure "prima sestina", "seconda sestina", "prima
colonna", "seconda colonna", potresti anche valutare, per risparmiare
righe, di costruire quelle frasi in modo algoritmico (dove puoi).

Quindi, per esempio, per le prime 3 colonne e 3 sestine puoi fare:

def genera_combinazioni(parole_prima, parole_seconda):
    return tuple(' '.join(x) for x in product(parole_prima.split(),
parole_seconda.split()))

genera_combinazioni('prima seconda terza', 'prima seconda')
per ottenere

('prima sestina',
 'prima colonna',
 'seconda sestina',
 'seconda colonna',
 'terza sestina',
 'terza colonna')

Ora, questo metodo ti può salvare qualche riga e qualche errore di
battitura (o moltiplicarli :D), ma non credo sia davvero conveniente
nel tuo caso.

Per evitare la "bruttezza" nel codice, e anche per facilitare la
traduzione in altre lingue, di solito si usa mettere tutte le stringhe
in un file (uno per ogni lingua da tradurre) e, nel tuo codice,
leggere quel file. Nel tuo caso, mettere le stringhe in un file
semplifica molto la lettura del codice, però hai lo svantaggio di
dover aver sempre dietro il file in questione.

Per leggere il file ed ottenere una tupla, dove ogni riga è una
stringa, basta fare:

with open('file_stringhe.txt') as fp:
    puntate_possibili = tuple(line.strip() for line in fp)

attento che usare .strip() rimuove tutti gli spazi (incluse le new
line) a destra e a sinistra della stringa, ti dico questa cosa, ma
probabilmente ti va benissimo così :)

> E qui casca l'asino!!!! L'errore era proprio questo e a questo punto non si
> trattava quindi di un errore
> di semantica. Non riesco ancora bene a spiegarmi il perchè al primo
> passaggio in effetti il valore della
> variabile aumenti di una unità (così come da me voluto) e poi tale valore
> resti invariato al passsaggio successivo

Il punto è che la variabile viene messa *sempre* a 1 da quel codice,
quindi se devi passare da 0 a 1 il codice funziona, ma se devi passare
da 1 a 2 o da N a N+1, non funzionerà :)

> nè capisco perchè python preveda, a questo punto, l'utilizzo di una forma di
> scrittura così come involontariamente
> io l'abbia scritta. Ad ogni modo, per non sbagliare, +1 = forever

Aspetta, forse ho capito male, ma "+1 =" è sbagliato in python:
attento a non confondere il "+" di "+1" col "segno positivo"
(contrapposto al "segno negativo" dei numeri -1, -2, -3...), al fatto
che l'operatore "+=" è composto da due caratteri.

Scrivere (metto gli spazi per farti capire quali sono le entità in gioco)

A    +=    B

è come scrivere

A    =    A   +   B

Se scrivi

A    +    =    B

hai errore: "+=" è un operatore vero e proprio e deve essere scritto
attaccato. Invece, il "+" che precede un numero per indicare il segno
positivo, può essere separato.

Scrivere

A     +=     +     B

ha perfettamente senso, e il secondo "+" davanti a B è solo
ridondante... Fondamentalmente, python permette di scrivere
A =+1

perché "+1" è un numero, e lo spazio tra l'uguale e il numero "+1" non
ha importanza :) "A=1", "A = 1", "A=+ 1", "A = + 1" son tutte cose
uguali.

Insomma, tu devi scrivere qualcosa come

[variabile] [operatore] [valore]

variabile è uscita_manque
operatore è += (senza spazi)
valore è 1 (o +1, è indifferente)

se scrivi "uscita_manque +1 =" ottieni

[variabile] [valore] [operatore]

che in Python non funziona.

Comunque, ti ho scritto 'sta spataffiata perché hai scritto "+1 =", ma
magari avevi già capito.

Se vuoi toglierti ogni dubbio usa "variabile = variabile + valore" e
vivi felice :D

Ciauz
~Ale


Maggiori informazioni sulla lista Python