[Python] Liste collezioni, propietà

Enrico Franchi enrico.franchi a gmail.com
Dom 24 Feb 2008 11:09:32 CET


On Feb 23, 2008, at 9:56 PM, Alberto Aliberti wrote:

> Vorrei creare un tool per la generazione di statistiche sui database  
> scacchistici. Da quello che ho capito , mi potrebbe essere utile  
> lavorare con
> le "liste" di Python .

Potrebbe. Chissà.

> 1- Qual'è la massima estensione (lunghezza) di una lista di stringhe  
> in Python ?

Dipende dalle stringhe! Cioè tipo se ogni stringa pesa un GB, beh, non  
è inverosimile che inchiodi tutto con una lista di una ventina di  
elementi. :)

Scherzi a parte, il problema è IMHO malposto. Puoi considerare una  
lista come un tipo illimitato. Il problema è che molto probabilmente,  
ancora prima di arrivare vicino ad eventuali limiti fisici  
dell'interprete e/o della macchina, hai performance inaccettabili.

Ma questo vale anche in C o in C++, per inteso. Se gestisci male la  
memoria e/o carichi troppa roba in RAM, inchiodi un po' tutto.

> 2- Ho letto che le dichiarazioni di variabili all'interno di una  
> lista , si separano con una virgola -  (1,2,3,). Le mosse di scacchi  
> sono scritte separate da uno
> spazio e da un numero (1. d4 Cf6  2. c4 e6). Si può sostituire lo  
> spazio alla virgola? (per dichiarare le variabili ovviamente).

Ti vedo estremamente confuso. In primo luogo quelle che chiami  
'liste', sono 'tuple'. In secondo luogo il concetto di 'dichiarazione'  
di variabile è un po' problematico in Python. Tipicamente le variabili  
sono in effetti 'nomi'. E i nomi possono essere bound o un-bound. Sono  
unbound prima che li bindi (wow!). E ovviamente usarli provoca errore.  
Dopo averli bindati (per dirla semplice, ci hai fatto sopra un  
assegnamento) sono bindati ad un dato oggetto Python e puoi chiamarlo  
con quel nome.

A questo punto, non so rispondere alla tua domanda, poiché la tua  
domanda non ha molto senso. Non ha senso poichè non stai 'dichiarando'  
variabili (e non stai nemmeno bindandole, in effetti). In ultimo, stai  
chiedendo di *cambiare* la sintassi di python. Che non ha senso. Se  
voglio fare capire a python un file html, non è che cambio la sintassi  
del linguaggio: scrivo un parser che mi tira dentro html in modo a me  
congeniale (btw, prima di scriverlo, ne cerco uno -- e ne trovo a  
pacchi).

> Ora avendo la risposta a queste due domande , credo di avere gli  
> strumenti
> per "importare" in Python una partita "singola" . Il problema è :  
> per importare più partite da un database , come posso "dividere" le  
> partite ? Cioè come posso fare sapere a Python quando finisce una  
> partita e inizia una nuova ? Se importassi le partite manualmente ,  
> una a una , non ci sarebbe problema ,
> potrei scrivere qualsiasi codice di programma e crearmi un database  
> specifico, ma l'utilità dell'applicazione verebbe a meno. Io devo  
> potere importare "automaticamente" le partite da un database  
> esistente , o da una copia testuale di esso (un database di partite  
> discacchi posso convertirlo in formato TXT,HTML,RTF o PGN -pgn è lo  
> standar per i database di scacchi).

Dimentica quello che hai chiesto sopra: tu in pratica per prima cosa  
vuoi avere un modulo che parsi i files pgn.
Avendo questo, è lui che si prende carico di gestire il formato e  
farti maneggiare le partite.

Posso suggerire:
http://mail.python.org/pipermail/python-list/2005-September/342833.html
http://www.koders.com/python/fidC6D1208DF38275760E08D02FEFBDC5A583C28620.aspx?s=game#L47

che viene da

http://berlios.chessviper.org.uk/

e poi

http://www.gnomefiles.org/app.php/PyChess
http://pychess.googlepages.com/


L'ultimo è un programma completo che ovviamente contiene anche codice  
per maneggiare i pgn. Puoi prendere tale codice e usarlo.



A questo punto, cercherei di convincerti a *riflettere* sul problema  
che hai, chiarificarti in testa cosa devi fare da un punto di vista  
*logico*, esporre quello, poi vediamo tutti insieme come fare ad  
implementarlo in Python.




More information about the Python mailing list