Forum >> Principianti >> Aiuto:Eliminare più di una volta la sottostringa

Pagina: 1

Ciao a tutti sono nuovo in questo forum ed ho da poco iniziato a studiare python. Mi è stato assegnato un esercizio nel quale devo costruire una funzione che mi verifichi l'esistenza di una sottostringa in una stringa di partenza e, me la elimini tutte le volte che la incontra.



Esempio se inserisco come stringa: "mangio la mela e mangio il kiwi"

e come sotto stringa da cercare: "mangio"

l'output dovrà essere: "la mela e il kiwi"




Ora io ho costruito questa funzione ma facendo qualche tentativo mi sono accorto che cancella una sola volta la sottostringa nella prima posizione in cui la trova.

quindi output: "la mela e mangio il kiwi".




Come posso modificare il mio programma in modo da risolvere questo problema? Purtroppo mi è espressamente chiesto nell'esercizio di non usare funzioni già presenti tipo split, replace,ecc.




ecco la mia funzione anche in allegato. Grazie a tutti in anticipo. :ok:




def sottrai(stringa1,stringa2):

STR = ""



if (len(stringa1)) < (len(stringa2)):

return

elif stringa2 == "":

return stringa1

else:

indice = stringa1.find(stringa2)

print indice

contatore = stringa1.count (stringa2)

print contatore

if contatore>=1:

for i in range(indice):

STR = STR + stringa1

for i in range (indice+1+len(stringa2),len(stringa1)):

STR = STR + stringa1

cont-=1

return STR








Allegati
Sei in classe con Cherry?
Io lo risolverei in modo figo, con una funzione ricorsiva.


--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2018-03-19 13:12:08 ---
Ciao Ὅμηρος 蟒蛇 grazie della tua risposta.



probabile dato che molti in classe hanno problemi con l'esercizio

per quanto riguarda la funzione ricorsiva si ci avevo pensato e ho fatto delle prove ma non riesco ad impostarla correttamente.
Strano, fare funzioni ricorsive è la cosa più facile del mondo ;)
Ho mantenuto la tua impostazione solo dove era sensata.

Questo codice funziona sia in python3 che in python2 (che è quello che stai usando, e dovevi specificarlo).
def sottrai(stringa1, stringa2) :
    if stringa2 not in stringa1 : return stringa1
    STR = ""
    indice = stringa1.find(stringa2)
    for i in range(indice) : STR = STR + stringa1[ i ]
    for i in range(indice + len(stringa2), len(stringa1)) : STR = STR + stringa1[ i ]
    return sottrai(STR, stringa2)


--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2018-03-19 21:52:22 ---
Ὅμηρος 蟒蛇 said @ 2018-03-19 21:31:22:
Strano, fare funzioni ricorsive è la cosa più facile del mondo ;)
Ho mantenuto la tua impostazione solo dove era sensata.

Questo codice funziona sia in python3 che in python2 (che è quello che stai usando, e dovevi specificarlo).
def sottrai(stringa1, stringa2) :
    if stringa2 not in stringa1 : return stringa1
    STR = ""
    indice = stringa1.find(stringa2)
    for i in range(indice) : STR = STR + stringa1[ i ]
    for i in range(indice + len(stringa2), len(stringa1)) : STR = STR + stringa1[ i ]
    return sottrai(STR, stringa2)


--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2018-03-19 21:52:22 ---
grazie!comunque si, mi sono confrontato con Cherry ed è una mia compagna alla quale avevo chiesto dei consigli per scrivere la mia funzione inizialeXD
grazie ancora!
In questo periodo sto studiando e svolgendo esercizi su funzioni e funzioni ricorsive. Uno più, uno meno... ;)
Domani potreste proporre al prof. come esercizio questo:
Realizzare una funzione che ordini tutte le lettere di una stringa. Ad esempio, la stringa "ciao" deve essere così ordinata: "acio".
:ok:
Più di così, per ora, non saprei come accorciarla.
def sottrai(a, b) :
    if b not in a : return a
    return sottrai(a[:a.find(b)] + a[a.find(b) + len(b):], b)
L'ho risolto in modo figo?

--- Ultima modifica di Ὅμηρος 蟒蛇 in data 2018-03-20 12:55:48 ---
:ok:Fighissssssimoooooooo!!!!!!! :ok:

:OIl prof. è rimasto a bocca aperta :O

Dovreste almeno regalarmi un paio di confezioni di pocket Coffee e di mon Chérry. :)
Ὅμηρος 蟒蛇 said @ 2018-03-20 21:48:48:
Dovreste almeno regalarmi un paio di confezioni di pocket Coffee e di mon Chérry. :)
:D


Pagina: 1



Esegui il login per scrivere una risposta.