Forum >> Principianti >> print valori sbagliati

Pagina: 1

Ciao a tutti!
Premesso che ho iniziato con python 2.7 da 1 settimana ho questo problema:


digit = raw_input("testo: ")
alfanum = {a:'000000', b:'000001', c:'000010', d:'000100',\
e:'001000',\
f:'010000', g:'100000', h:'000011', i:'000110',\
j:'001100', k:'011000', l:'110000', m:'110100',\
n:'110010', o:'110001', p:'111000', q:'110100',\
r:'110010',\
s:'110001',t:'111100',u:'111010', v:'111001',\
w:'111110',\
x:'111101',y:'111111', z:'000002', 1:n1, 2:n2,\
3:n3, 4:n4, 5:n5, 6:n6, 7:n7, 8:n8, 9:n9, 0:n0}
n1 = '111111f'
n2 = '111110f'
n3 = '111101f'
n4 = '111011f'
n5 = '110111f'
n6 = '101111f'
n7 = '111100f'
n8 = '111001f'
n9 = '110011f'
n0 = '100111f'


if digit != None:
digit = list(digit)
print digit <---- ( con valori dell' insieme "alfanum")


Inoltre quando provo a "stampare" ( print ) un numero qualsiasi in modalità interprete mi riposta sempre lo stesso valore scritto e non il valore che vorrei...
HELP ME! ;(






--- Ultima modifica di jilles in data 2015-07-30 16:50:23 ---
jilles... calma e gesso che ci sono un bel po'di cose da sistemare...

Intanto un programma fa sempre e solo quello che gli dici, non da niente per scontato e non fa supposizioni su cosa l'utente potrebbe voler fare (e in effetti neppure noi lettori dovremmo sforzarci troppo, e magari inutilmente, a ipotizzare il risultato che si vuole ottenere, questo dovrebbe essere esposto molto chiaramente dall'inizio per poter avere un aiuto sensato).

Detto ciò, nel tuo codice chiedi in input una stringa e la assegni alla variabile digit, poi trasformi digit in una lista contenente i caratteri della precedente stringa, ed infine stampi la lista, è ovvio che trovi stampato esattamente quello che hai inserito, non hai detto al programma di fare nient'altro che questo.

Probabilmente volevi trasformare ogni carattere della stringa inserita nell'equivalente stringa 1001001 ecc sostitutiva come specificato nel dizionario alfanum, è così?

Ma in ogni caso il programma scritto così non parte neppure, si ferma subito con dei NameError. Il dizionario infatti non è scritto correttamente perché quella sintassi prevederebbe la preesistenza di tante variabili a b c ecc già valorizzate da usare come chiavi.

PS: il codice va evidenziato come tale con il simbolo <> a fianco ai colori per non perdere l'indentazione.
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Ciao!


Grazie per la risposta e per lo sforzo di comprensione :D
Ad ogni modo si, mi serviva capire che funzione usare per convertire la lista già formattata e spaziata a singole lettere o sillabe utilizzando l' apposito "dizionario" alfanum.
Questo programma è una parte di codice per convertire caratteri e numeri e decriptarli per un altro programma scritto in RPG free per as400...
quindi stavo provando a scriverlo in python ma mi è ancora ostica la sintassi anche se per molti versi simile.


Un dizionario si legge con:
valore = dizionario[ chiave ]
...e l'argomento chiave deve essere una cosa contenuta tra le chiavi del dizionario.

Se le chiavi nel caso in questione sono i singoli caratteri del testo immesso (cioè stringhe di lunghezza 1), allora nel dizionario come chiavi devono esserci gli equivalenti caratteri (stringhe lunghe 1) da ricercare.
my_dict = { 'f':'jellyfish' }
my_val = my_dict['f']
print(my_val)   # ---> jellyfish

Per ottenere tutti i caratteri di una stringa uno alla volta basta iterare con for sulla stringa (che è una sequenza e tutte le sequenze sono iterabili):
for elemento in sequenza:
    ...fa qualcosa con elemento...

POI... c'è di mezzo l'EBCDIC (anche se quelle rappresentazioni binarie non sembrano EBCDIC... ma se si parla di criptaggio magari poi lo diventano), e bisogna vedere se quella conversione in "stringhe binarie" è realmente ciò che vorresti ottenere alla fine.

Ma il risultato da ottenere, partendo da un esempio di input, continua ad rimanere segretissimo :P

*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
POI... c'è di mezzo l'EBCDIC (anche se quelle rappresentazioni binarie non sembrano EBCDIC... ma se si parla di criptaggio magari poi lo diventano), e bisogna vedere se quella conversione in "stringhe binarie" è realmente ciò che vorresti ottenere alla fine.

Ma il risultato da ottenere, partendo da un esempio di input, continua ad rimanere segretissimo :P
Professor: "So the American government went to IBM to come up with an encryption standard, and they came up with—"

Student: "EBCDIC!"

https://en.wikipedia.org/wiki/EBCDIC#Criticism_and_humor
THE 🍺-WARE LICENSE (Revision ㊷):
<㎝🐌🐍.🇮🇹> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Corretto l' EBCDIC, e corretto anche il "poi lo diventeranno"...
Giusto per farsi 2 risate, la software house che ha prodotto l' sw che sto provando a sistemare ha inserito l' encryption ebcdic ( dal latino ) ad-canis-cazzum e quindi serve un wrap che assegni i valori giusti per poi riconvertirli, e come penso sia palese sto diventando scemo a provarci...
La giustificazione dell' encryption "CUSTOM" è stata semplicemente:
-Perché dovremmo usare delle encryption standard poco sicure?
Fine premessa, ora provo a sistemare qua e la e ti faccio sapere, grazie ancora per la pazienza :D


Ora la formattazione della stringa è corretta però mi da questo errore:
TypeError: 'dict' object is not callable




if digit != None:
digit = list(digit)
digit2 = str(digit).strip(' []' )
print "test string: " + digit2
print alfanum(digit2)


con l' istruzione for invece:


for digit2 in alfanum:
print digit2


Viene fuori una lista senza senso.... :confused:






La giustificazione dell' encryption "CUSTOM" è stata semplicemente:
-Perché dovremmo usare delle encryption standard poco sicure?
La risposta è: perché a meno di non essere veramente esperti in crittoanalisi ogni sistema "standard" sarà certamente testato da più fronti e più robusto e sicuro (a meno di errori nell'implementazione) di quanto si possa ideare senza avere serie competenze sull'argomento, in pratica con un cesare o un vigenere si può sicuramente offuscare qualcosa allo sguardo distratto e non competente, ma la vera sicurezza è un'altra cosa. Se ritenevano sufficiente offuscare nulla da dire. Poi... spero che con "encryption" si stia parlando realmente di criptaggio e non erroneamente di encoding dei caratteri, nel qual caso la sicurezza non c'entra un tubo.

Ora la formattazione della stringa è corretta
Sicuro che la stringa
"'a', 'b', 'c', '1', '2', '3'"
ottenuta a partire dalla stringa
"abc123"
sia realmente quello che ti serve? Un dizionario non si usa così, a parte l'errore dovuto alle parentesi tonde (chiamata) invece che quadre (accesso ad elemento). O meglio, potrebbe anche funzionare così se una chiave del dizionario fosse quell'intera stringa, mentre a te interessa interrogare il dizionario per avere la conversione di un carattere alla volta. Inoltre non ho parlato di iterare sul dizionario (si ottengono solo le chiavi presenti in esso senza un particolare ordine) ma sui caratteri della stringa di ingresso:
digit = "abc123"
for ch in digit:
    print ch
Ora si che con ogni carattere ch (stringa lunga 1) si può "interrogare" il dizionario... sempre che in esso vi siano le corrispondenti chiavi (stringhe lunghe 1).



PS: il codice va evidenziato con il simbolo <> a fianco ai colori per non perdere l'indentazione.








--- Ultima modifica di Claudio_F in data 2015-08-04 19:52:31 ---
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***


Pagina: 1



Esegui il login per scrivere una risposta.