PDA

View Full Version : [Python]Pensare da informatico: esercizio della sezione 7.8


theUser
23-06-2008, 00:32
mi sono praticamente bloccato su questo...
Esercizio: riscrivi la funzione ContaLettera in modo che invece di
elaborare completamente la stringa faccia uso della versione a tre
parametri di Trova.
trova ricerca una lettera in una stringa
def Trova(Stringa, Carattere, Inizio):
if Inizio<len(Stringa):
Indice = Inizio
while Indice < len(Stringa):
if Stringa[Indice] == Carattere:
return Indice
Indice = Indice + 1
return -1
ContaLettere invece conta quante volte una lettera è presente in una stringa
def ContaLettera(stringa,lettera):
i = 0
for lettera in stringa:
if lettera == 'a':
i=i + 1
print i

Il mio problema sta nel fatto che devo modificare ContaLettere...avevo pensato di inserire una variablile globale, ma non so se sia "corretto"...
questo è quello che sono riuscito a fare fino ad ora
def Trova(Stringa, Carattere, Inizio):
if Inizio<len(Stringa):
Indice = Inizio
while Indice < len(Stringa):
if Stringa[Indice] == Carattere:
return Indice
Indice = Indice + 1
return -1

def ContaLettera(stringa,lettera):
i = 0
conta=0
while i<len(stringa):
Trova(stringa,lettera,i)
conta=?
i=i+1
print conta

Torav
23-06-2008, 01:37
Ti basta fare solamente un controllo su quello che ritorna Trova e riaggiornare la i in modo che al prossimo ciclo l'analisi della stringa riparta dopo la lettera trovata (e così non conti più di una volta una stessa lettera). E' tardi e non so se sono stato abbastanza chiaro, questo è il codice che userei io :)


def ContaLettera(stringa,lettera):
i = 0
conta=0
while i<len(stringa):
posLettera = Trova(stringa, lettera, i)
if(posLettera != -1):
conta += 1
i = posLettera + 1
else:
i=i+1
print conta

cdimauro
23-06-2008, 08:52
avevo pensato di inserire una variablile globale, ma non so se sia "corretto"...
Non provarci nemmeno: stai ancora imparando, ed è meglio cominciare col piede giusto.

Niente variabili globali per un bel po'.

Quando sarai maturato come programmatore e avrai acquisito i pregi, ma soprattutto i DIFETTI, dell'uso delle variabili globali, allora potrai EVENTUALMENTE farne uso. ;)

theUser
23-06-2008, 11:41
def ContaLettera(stringa,lettera):
i = 0
conta=0
while i<len(stringa):
posLettera = Trova(stringa, lettera, i)
if(posLettera != -1):
conta += 1
i = posLettera + 1
else:
i=i+1
print conta
grazie, non ci avevo completamente pensato :)
Non provarci nemmeno: stai ancora imparando, ed è meglio cominciare col piede giusto.

Niente variabili globali per un bel po'.

Quando sarai maturato come programmatore e avrai acquisito i pregi, ma soprattutto i DIFETTI, dell'uso delle variabili globali, allora potrai EVENTUALMENTE farne uso.
seguirò il tuo consiglio:)

P.S. SPE è buonissimo...grazie!:D

cdimauro
23-06-2008, 11:51
Di niente, figurati.

Comunque un altro consiglio: quando devi postare del codice nel forum, usa il tag CODE. :)

theUser
23-06-2008, 11:55
ecco perchè non è venuta l'indentazione...!:doh: