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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

HW4 - Vocali accentate

alessiodellasanta (11830 points)
8 14 34
in HW4 obbligatorio by (11.8k points)
recategorized by
Cosa conviene fare per gestire le lettere accentate secondo voi?

Un dizionario che associa ad ogni vocale accentata la sua vocale senza accento, una sostituzione o qualche altro modo?
679 views
closed

4 Answers

Best answer
s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)
selected by
Anche se andiamo OT cerco di darti una mano, questo forum nasce per questo no?

immagina una funzione che faccia questo: input --> sequenza numeri prosodia con lunghezza modulo, output --> prosodia normalizzata

diciamo che per salvare gli elementi potresti usare un dizionario con le associazioni numeri in input  --> interi non negativi in range(0, lunghezza_modulo). Quindi primo passo il tuo dizionario conterrà l'associazione primo_numero:0 e la prosedia di output il valore 0.

Cicli sugli altri numeri della sotto prosodia (passami il termine) in input e se quel numero è presente come chiave nel dizionario vai ad appendere alla prosedia il valore corrispondente, altrimenti aggiungi al dizionario l'elemento con chiave il tuo numero e valore il massimo dei valori del dizionario + 1 (se è un valore nuovo devi assegnargli l'intero successivo all'ultimo utilizzato) e appendi alla prosedia di output questo valore appena calcolato. Dunque la funzione ti restituisce la prosedia normalizzata.

A questo punto da qualche parte ciclerai sulle sotto prosedie della tua prosedia originaria di lunghezza il modulo che stai analizzando passandole in input alla funzione descritta. Se il risultato per anche solo una di queste sotto prosedie è diversa da quella base, allora quello che stai analizzando non è il modulo, altrimenti potrebbe esserlo.

Per efficientare potresti pensare di cercare il modulo solo sui divisori della lunghezza della prosodia ovviamente, e se li ordini ed escludi i valori 1 e 2, allora il primo modulo che trovi è automaticamente quello corretto (N.B. se x è modulo anche i multipli di x lo sono, ma il minimo è proprio x).

A questo punto non ti rimane che fare le cose in maniera intelligente, non ho scritto pseudocodice, che sarebbe ammesso, ma ho cercato di descriverti il funzionamento e penso che potresti estrarre pseudocodice molto facilmente.

Spero di essere stato chiaro e di aiuto.
AdSum (16290 points)
9 20 134
by (16.3k points)
La maniera più comoda è creare tramite un dizionario una corrisponzenda tra l'accentata e la forma normale. Non ti assicuro che sia l'unico modo ed il più veloce ma di cerco è efficace
D
DanielLopez (370 points)
0 1 4
by (370 points)

Concordo con @AdSum, sicuramente usando un dizionario inserendo ogni carattere accentato con il rispettivo carattere (non) è la soluzione.
 La maniera più facile invece penso sia quella di utilizzare i metodi :   unicode.normalise('NFD', nomedellavariabile).encode('ascii', 'ignore')   ovviamente da scartare visto che non si può utilizzare l'import unicodedata.

  

Tommaso.Lopedote (1470 points)
5 11 28
by (1.5k points)

Potresti usare anche, tramite generatore "map", una funzione che assegna i codici UTF-8 delle vocali non accentate con le loro rispettive versioni accentate, probabilmente risulterà molto efficiente in termini di velocità.

map
Definition : map(func: Callable[[_T1], _S], iter1: Iterable[_T1], /) -> Iterator[_S]

map(func, *iterables) --> map object

Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhauste.

Oppure utilizza il metodo delle stringhe str.maketrans che il prof. ci ha mostrato venerdi.

Python maketrans () method

description

Python maketrans () method is used to create character mappings conversion table, for taking two parameters, the easiest way is called, the first argument is a string that represents the character to be converted, the second parameter is the string representation of the conversion aims.

Note: The two strings must be the same length as a one to one relationship.

N
NAT (1260 points)
0 0 6
by (1.3k points)
Ciao Alessio, io ti consiglio di completare prima il codice e poi vedere cosa dovresti modificare per ottimizzare il tempo..
alessiodellasanta (11830 points)
8 14 34
by (11.8k points)
hai ragione, infatti sono fermo sul calcolo del periodo, farei un post chiedendo una mano ma so che mi verrebbe chiuso dal professore perché sarebbe il duplicato di altri post (che non mi hanno risolto il problema)
s
stefano.fantauzzi (2260 points)
4 6 17
by (2.3k points)

Ciao, non se se hai già letto la mia risposta al riguardo, nel dubbio te la linko

Calcolo periodo

alessiodellasanta (11830 points)
8 14 34
by (11.8k points)
l'ho letto, l'ho anche capito, ma non saprei come fare la "normalizzazione" (aka assegnazione di ogni numero ad un valore/lettera) in python, ma in realtà nemmeno in pseudocodice...