È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
 
 
 
 
 
Stampa | Notifica email    
Autore

PROGRAMMARE CON PYTHON

Ultimo Aggiornamento: 10/09/2011 15:56
OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 14:40
 
Modifica
 
Quota

Rhayom non riesco a capire perchè non mi funziona nel mio programma la conversione da testo a binario... ho usato i "print" per vedere i valori che hanno le variabili o le stringhe e funziona tutto ma il fila convertito dopo il 4 ciclo di miniblock mi sbaglia completamente di inserire i valori, ho trovato numero con esponente -42 cioè sotto il massimo di -38, come è possibile che mi scriva numeri fuori dal formato.
Prova a convertire il testo in binary e poi di nuovo in testo...
ho fatto una comparazione con "010 Editor portable" e ho visto molti byte aggiunti e molti floating cambiati completamente
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 14:49
 
Modifica
 
Quota

che intendi per binario??? suppongo il formato dei file di m2tw..
cioè i primi 4 miniblock vengono scritti correttamente?
[Modificato da rhaymo 21/01/2010 14:55]

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 15:06
 
Modifica
 
Quota

hai provato il programma?? (usa cmd.exe cosi vedi anche i print)
I file modelreferencepoint o anche tanti altri file sono tutti scritti in binario, quindi .dat o .medelrefpoint è la stessa cosa...
Nell'allegato ho il file.dat che viene convertito in file_exported.txt in maniera corretta ma l'operazione inversa cioè da file_exported.txt a file_exported_modified.dat mi fà un casino nei miniblock...
Questo lo vedi con un edito esadecimale con la capacità di fare paragoni tra due file oppure semplicemente riconverti in testo il file file_exported_modified.dat così vedi il casino che non riesco a capire.

Se riesci a trovare dove ho sbagliato bene, altrimenti amen.
OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 15:12
 
Modifica
 
Quota

cioè se vedi dopo il 4 ciclo mi scrive:
Testo nascosto - clicca qui

cioè penso mi salti un byte quando legge il 12 float e cioè il numero -3.66108610619e-023 perchè ovviamente dopo i numeri che legge non corrispondono più quindi, la lettura è sfasata... dopo una ventina di cicli infatti torna a leggere correttamente.
[Modificato da johnwhile 21/01/2010 15:13]
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 15:12
 
Modifica
 
Quota

per me binario significa anche 010101010000010.
adesso non posso provare perchè sul pc a lavoro non ho python installato.
cmq forse l'errore è dovuto al fatto che python non supporta la singola precisione, cioè 32 bit, ma supporta solo la precisione a 64 bit, e quindi ecco il motivo dei byte aggiuntivi.
Adesso bisogna capire come scrivere un numero decimale su 32 bit e non su 64.

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 15:17
 
Modifica
 
Quota

Knoight Errant aveva scritto una funzione tipo questa:
Testo nascosto - clicca qui

pensi sia una correzione del numero?? solo che non capisco cosa ha fatto, o meglio, mi sembra di aver visto nei tui link una funzione from.hex() che dava quel tipo di formatstring...
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 15:17
 
Modifica
 
Quota

ma tu riesci a leggere correttamente come float un numero del tipo 2.35098870164e-038 ?

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 15:21
 
Modifica
 
Quota

quella funzione di ke converte un numero float in una stringa con nfield cifre prima della virgola e ndecimal cifre dopo la virgola.

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 15:27
 
Modifica
 
Quota

Re:
rhaymo, 21/01/2010 15.17:

ma tu riesci a leggere correttamente come float un numero del tipo 2.35098870164e-038 ?



non lo sò ma non funziona anche se sostituisco quei numeri con 0.0
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 15:29
 
Modifica
 
Quota

e cosa legge?? fatti stampare ogni cosa che leggi dal file e vedi cosa ti legge quando arriva lì.

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 15:38
 
Modifica
 
Quota

infatti, con i print non riesco a capire, me li scrive giusti...
E' proprio un rompicapo da cui non riesco a venirne fuori.
Vabbè adesso devo fare altre cose, proverò domani
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 15:42
 
Modifica
 
Quota

quindi questo numero lo riesci a leggere 2.35098870164e-038??

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 18:42
 
Modifica
 
Quota


def miniblockdata ( filein, fileout):
    for i in range(4):
        valore = getline(filein)
        for j in range(4):
            putfloat( float(valore[j]), fileout )
            print ("_%f_" % (float(valore[j])))


getline(filein) mi legge una riga alla volta, passa oltre quando sono vuote e mi fà lo split, inoltre ho messo dei print per vedere se i valori sono giusti. Inoltre ho impostato che numeri (negativi e positivi)< 0.0000001 diventano 0.0 così da evitare numeri troppo piccoli.
Le linee sono 4 con 4 float ciascuno, quindi mi scrive 16 float di fila ma quando analizzo con un editor esadecimale esattamente dopo l'undicesimo float mi aggiunge un byte di non so che cosa e poi scrive gli altri float, per quello che è tutto sfalsato:
[Modificato da johnwhile 21/01/2010 18:50]
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 20:26
 
Modifica
 
Quota

allora, inizi ad avere problemi dal 3 blocco in poi, quindi suppongo che il problema siano i numeri scritti in questa maniera 2.35098870164e-038.
ps: anzi no....
[Modificato da rhaymo 21/01/2010 20:54]

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 21:14
 
Modifica
 
Quota

è una cosa insensata, adesso ho adirittura scritto così quei 16 byte:

def miniblockdata ( filein, fileout):
    valore = getline(filein)
    putfloat( float(valore[0]), fileout )
    putfloat( float(valore[1]), fileout )
    putfloat( float(valore[2]), fileout )
    putfloat( float(valore[3]), fileout )
    valore = getline(filein)
    putfloat( float(valore[0]), fileout )
    putfloat( float(valore[1]), fileout )
    putfloat( float(valore[2]), fileout )
    putfloat( float(valore[3]), fileout )
    valore = getline(filein)
    putfloat( float(valore[0]), fileout )
    putfloat( float(valore[1]), fileout )
    putfloat( float(valore[2]), fileout )
    putfloat( float(valore[3]), fileout )
    valore = getline(filein)
    putfloat( 0, fileout )
    putfloat( 0, fileout )
    putfloat( 0, fileout )
    putfloat( 1, fileout )


Ho provato a cancellare esempio un putfloat alla volta così mi mettava solo gli altri ma niente, al 13 magicamente mi aggiunge un 0D=13.
Cioè non è possibile che l'errore provenga da altre funzioni perchè in quel momento funziona solo quella !!!
Proverò a chiedere a Wildog che è esperto (anche se mi aveva detto che non aveva tempo)
[Modificato da johnwhile 21/01/2010 21:15]
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 21:18
 
Modifica
 
Quota

fra l'altro quel 13 è un ritorno a capo...

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 21:24
 
Modifica
 
Quota

però è strano perchè io ho tolto tutte le linee vuote per evitare questo problema quindi ogni linea me la deve leggere, deve ritornarmi una stringa e me la deve fare splittare, però vedi che ho messo l'arrey valore[x] con x da 0 a 1 ??? anche se ci fosse il carattere /n non lo dovrebbe scivere
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 21:27
 
Modifica
 
Quota

non è un problema di righe vuote, perchè quel 13 viene stampato fra due numeri successivi sulla stessa riga

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 21:42
 
Modifica
 
Quota

ma io faccio anche un print dell'arrey line.split() e mi scrive
['0.0', '0.0', '0.0', '1.0'] quindi non c'è in mezzo un '\n' o qualcosaltro.
Provo a vedere la lunghezza della stringa per vedere se è maggiore di 4...
OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 21:47
 
Modifica
 
Quota

infatti la 4 riga/stringa è pulita cioè la lunghezza è 4, questo è un pezzo dei print che ho messo:
from getline(): len=4
['1.0', '0.0', '0.0', '1.0']
from getline(): len=4
['0.0', '1.0', '0.0', '4.0']
from getline(): len=4
['0.0', '0.0', '1.0', '1.20462167263']
from getline(): len=4
['0.0', '0.0', '0.0', '1.0']
from getline(): len=2
['6', 'exit01']
[Modificato da johnwhile 21/01/2010 21:48]
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 22:02
 
Modifica
 
Quota

ho provato a sostituire quei numeri con molte cifre decimali con numeri con meno cifre decimali e il problema sembra sparito....

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 22:19
 
Modifica
 
Quota

sembra perchè me li scrive negli ultimi tre adesso... no, qua c'è qualcosa di subdolo e perverso. Io ho provato a chiedere a wildog, altrimenti amen, non mi va di perdere troppo tempo per questo errore, dirò a quello di twcenter di farlo a mano anche se poteva servire a qualcun'altro
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 22:21
 
Modifica
 
Quota

ma non era per te?

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
21/01/2010 22:25
 
Modifica
 
Quota

anche, ma poi me lo hanno chiesto altri...
docs.python.it/html/tut/node15.html
qui dice che in realtà python non scive il vero numero ma un arrotondamento, però non capisco, se scrive un float a 32 bit mica si inventa altri bit...provo a metter tutto a 0 perchè anche in binario (0101010) lo zero si rappresenta con 0
--------------------------------------------
Che bello, non serve ad un cavolo....
[Modificato da johnwhile 21/01/2010 22:28]
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
21/01/2010 22:44
 
Modifica
 
Quota

in 10 anni non ho mai visto niente del genere, magari chissà che cazzata che sarà. Mi arrendo. prova su qualche forum.

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
23/01/2010 12:51
 
Modifica
 
Quota

La cosa è alquanto imbarazzante,Willdog ha trovato l'errore, era così stupito che manco ci avevo dato un'occhiata:
Ho messo 'w' invece di 'wb' e adesso va perfettamente

def txt2bin() :
...
fileoutput = open(shortname + '_modified.dat', 'wb')

OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
23/01/2010 13:02
 
Modifica
 
Quota

la doc lo diceva pure:

Python on Windows makes a distinction between text and binary files; the end-of-line characters in text files are automatically altered slightly when data is read or written. This behind-the-scenes modification to file data is fine for ASCII text files, but it’ll corrupt binary data like that in JPEG or EXE files. Be very careful to use binary mode when reading and writing such files.

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
23/01/2010 13:10
 
Modifica
 
Quota

dove è scritto ?
comunque è un errore così banale che non mi ero accorto...
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
23/01/2010 13:15
 
Modifica
 
Quota

nella documentazione ufficiale

docs.python.org/tutorial/inputoutput.html

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 3.393
Post: 2.643
Registrato il: 05/07/2008
Città: PORDENONE
Età: 38
Sesso: Maschile
Gubernator
Consul
Team Modder
23/01/2010 14:55
 
Modifica
 
Quota

era l'ultima cosa che avrei pensato potesse causare l'errore, ero convinto di non poter aver sbagliato in quel punto dato che è uguale al linguaggio C...
Comunque io lo messo nella discussione corrisposndente, se qualcuno troverà dei bug li correggerò immediatamente.
Adesso proverò a fare anche qualche test con i file .modeltraversablenetwork utilizzati solo per le torri d'assedio mentre per gli altri sono vuoti, praticamente servono a descrivere le zone calpesabili come scale, pianerottoli ecc... chissà, forse servirà a qualcuno.

Comunque adesso si può già creare i file per le nostre armi d'assedio e dare i giusti punti degli addetti, dovrebbe risolvere quel crash che mi dicevi tu a proposito della catapulta.
Nel descr_engine.txt ci sarebbero queste cose da correggere:
engine_radius 4.5
engine_visual_radius 6.5
engine_length 9
engine_width 5
engine_height 5.3
engine_mass 15
engine_dock_dist 5
engine_mob_dist 10.5

specialmente length width e height, mi sembra che se troppo grandi creano conflitto con i punti degli addetti alle armi, dovrebbe essere quell'effetto di spostamento degli addetti che a volte vedi quando caricano, sembra che scivolino all'esterno a volte.
Nuova Discussione
 | 
Rispondi
Cerca nel forum

Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Crea forum gratis, gestisci la tua comunità! Iscriviti a FreeForumZone
FreeForumZone [v.6.1] - Leggendo la pagina si accettano regolamento e privacy
Tutti gli orari sono GMT+01:00. Adesso sono le 00:48. Versione: Stampabile | Mobile
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com