Do you need any help?

[HW4] Dubbio utilizzo maketrans

giordano_sannino (13650 points)
7 16 81
asked Nov 17, 2020 in HW4 obbligatorio by giordano_sannino (13,650 points)
ma come trovo l'insieme dei caratteri non alpha con chr da 0 a 255 per passarla al maketrans?

Ho fatto una minifunzione dove metto in una lista tutti i caratteri non alpha (sempre da 0 a 255), ma poi la lista non posso passarla al maketrans!

Se invece provo a formare una stringa con quei caratteri la stringa non si forma, forse per via di qualche carattere strano.

Poi altri problemi vengono con caratteri del tipo \x00 che non saprei come il maketrans potrebbe leggerlo e con le " " che devo fargli capire che non sono quelle di fine stringa....

Forse il maketrans non è il metodo giusto per l'eliminazione dei carattere speciali?

ps. i test me li passa, ma non so se nei test segreti ci possa essere qualche carattere che non ho messo (per adesso ho messo i generici .,;.-_*/'?\|! ecc)

5 Answers

AdSum (16290 points)
9 20 134
answered Nov 17, 2020 by AdSum (16,290 points)

Maketrans non vuole una lista, vuole un dizionario di associazioni.

traduttore=str.maketrans(dizionario)
          

A maketrans passi un dizionario che contiene tutte le associazioni. Ad esempio è(chiave)-> e(valore). La chiave è ciò che deve tradurre, il valore ciò che diventa. Quindi {"è":"e"}

Fatto ciò devi tradurre la stringa usando il traduttore, quindi:

str=str.translate(traduttore)

e cosi ottieni la stringa. (Str è una parola riservata che utilizzo come esempio, va sostituita con la tua stringa)


Io personalmente lo trovo molto comodo e sintetico, ma onestamente non sono sicuro che sia il metodo più rapido.

giordano_sannino (13650 points)
7 16 81
commented Nov 17, 2020 by giordano_sannino (13,650 points)
ok ma come ho scritto quando gli passo la stringa come terzo parametro non va

"Se invece provo a formare una stringa con quei caratteri la stringa non si forma, forse per via di qualche carattere strano"
g
giacomo_venturini (6680 points)
2 5 39
commented Nov 17, 2020 by giacomo_venturini (6,680 points)

non devi passare nessuna stringa come terzo parametro i passi sono i due illustrati da @AdSum 

tabella = str.maketrans(dizionario) 

ti darà la tabella di traduzione, e poi se hai una variabile "testo" da tradurre devi usarla in questo modo

testo_tradotto = testo.translate(tabella)

il dizionario dovrà contenere le coppie di tipo carattere_da_tradurre - carattere_tradotto

twgever (15190 points)
7 27 105
answered Nov 17, 2020 by twgever (15,190 points)
invece di mettere tutti i caratteri non alfabetici dentro ad un maketrans, puoi rimuoverteli !

Puoi scorrere tra i caratteri presenti nel testo, e se uno di questi non è alfabetico, puoi fare stringa.replace("carattere_vecchio","carattere_nuovo"), dove "carattere_nuovo" sarà una stringa vuota.

decisamente preferibile rispetto a scrivere minimo 150 caratteri che magari non si sa nemmeno come fare con la tastiera.
michelescara (1330 points)
0 2 6
commented Nov 17, 2020 by michelescara (1,330 points)
Io sto provando a fare in questo modo, ma quando utilizzo replace mi dà un errore di string index out of range e non riesco a risolvere, nonostante aggiorni la lunghezza della stringa ogni volta
C
ColellaV (1040 points)
2 3 9
answered Nov 17, 2020 by ColellaV (1,040 points)

Se in qualche punto ti scorri tutti i caratteri uno alla volta ti basta ignorare quelli per cui carattere.isalpha() non è True

s
stefano.fantauzzi (2260 points)
3 6 17
answered Nov 17, 2020 by stefano.fantauzzi (2,260 points)
edited Nov 17, 2020 by stefano.fantauzzi
Potresti creare una stringa joinando il chr dei numeri nel range da 0 a 256 non nell'insieme dei caratteri puramente alfabetici (accentati e non), ti torna?
Rametto (4910 points)
3 4 25
answered Nov 18, 2020 by Rametto (4,910 points)
Utilizza un dizionario