Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

[HW4] Dubbio utilizzo maketrans

giordano_sannino (13650 points)
7 16 81
in HW4 obbligatorio by (13.7k 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
by (16.3k 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
by (13.7k 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)
3 6 40
by (6.7k 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 (17470 points)
8 29 105
by (17.5k 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)
1 2 6
by (1.3k 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 10
by (1.0k 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)
4 6 17
by (2.3k points)
edited by
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
by (4.9k points)
Utilizza un dizionario