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.

Problema con occorrenze

D
Dave (1010 points)
14 26 33
in Es3 by (1.0k points)
Buonasera a tutti.Nell'esercizio 3 sto avendo un po di problemi con le occorrenze. Ho provato a far scorrere i caratteri della stringa con un ciclo for e contare le occorrenze con .count() . Il fatto e' che una volta che viene eliminato un carattere presente due volte , viene eliminato anche l'altro"stesso" carattere. In pratica vengono eliminati tutti i caratteri presenti piu volte. Che altra strada posso prendere?
393 views
closed

1 Answer

Best answer
francesco.dev (33560 points)
23 51 129
by (33.6k points)
selected by

Ciao Dave!

Il tuo ragionamento è giusto, ma funziona solo se quando un valore che è presente più volte lo elimini realmente!
Controlla se la lista (o quello che è) che utilizzi sia effettivamente priva ad ogni ciclo di un carattere che è presente più volte!

Mi spiego meglio:
Avendo la parola: 'alberocll'
Quando il ciclo giungerà alla posizione 1 leggerà 'l' e la count di questa 'l' dà come risultato 3, a questo punto la elimini;
Ora la parola è diventata 'aberocll'
Quando il ciclo giungerà alla posizione 6 leggerà 'l' e la count di questa 'l' dà come risultato 2, allora elimini anche questa;
Ora la parole è diventata 'aberocl' e quindi hai finito

Il trucco sta nel ripetere la count per ogni carattere presente in posizione i e che la count stessa sia maggiore di 1!

Infine se stai adoperando il metodo .replace('lettera', '') ricorda che questo non funziona poiché ti sostituisce TUTTI i caratteri uguali a quello passato come primo parametro.
La miglior cosa sarebbe quella di convertire la chiave in lista, usare del lista[i] per rimuovere i caratteri che hanno count > 1 ed infine returnare una stringa usando il metodo ''.join(lista).

Sperando di esserti stato d'aiuto,
- Francesco Pio Scognamiglio

D
Dave (1010 points)
14 26 33
by (1.0k points)
E' proprio questo che ho fatto.Ho inserito nel ciclo for due if : uno si occupa dei caratteri maiscoli , l'altro invece dei caratteri che hanno stringa.count(lettera) >1.
l'output della stringa "sim sala Bim" con il print ad ogni step del ciclo e' questo e' questo:
im ala Bim
m ala Bm
 ala B
alaB
alaB
lB
lB
lB
lB
l
l
l
Ad ogni step il ciclo for cancella quindi contemporaneamente due caratteri
Auron (15880 points)
51 126 194
by (15.9k points)
Non capisco proprio questi voti negativi su risposte ragionate ed utili. Voto positivo io Fra, ti bilancio!
francesco.dev (33560 points)
23 51 129
by (33.6k points)
Grazie mille Auron! Purtroppo già ti ho spiegato il perché e non posso farci niente..
francesco.dev (33560 points)
23 51 129
by (33.6k points)
Per caso hai usato il replace?? Se sì allora succede questo proprio per aver usato tale metodo che cambia TUTTI i caratteri, ti basterà usare una semplice rimozione (come il comando del lista[i] oppure lista.remove(valore)) invece del replace ed hai risolto.
ATTENZIONE se usi delle stringhe devi convertirle in liste per poter fare del lista[i]
francesco.dev (33560 points)
23 51 129
by (33.6k points)
Parlami un po' meglio del tipo di ciclo che stai usando e cosa vi è al suo interno, al fine di poter comprendere appieno la problematica e risolverla al più presto
D
Dave (1010 points)
14 26 33
by (1.0k points)
Si ho usato replace. Ma nel caso converto in lista non viene elusa la consegna? cioe' la chiave non deve essere necessariamente una stringa?
francesco.dev (33560 points)
23 51 129
by (33.6k points)
edited by
Allora è per colpa del replace! Usando tale metodo sostituisci TUTTI i caratteri con un carattere nullo (nel caso in cui tu voglia eliminare un carattere).
Comunque fatti furbo, fai diventare la chiave una lista, elimini con del i caratteri e poi ritorni una stringa (convertendo la lista in stringa usando il metodo ''.join(lista)).
Se ti sono stato utile ricorda di contrassegnare la mia risposta come migliore!