2015-11-02 8 views
5

count chiama la funzione find per vedere quante volte è possibile trovare una lettera in Word a partire da un determinato indice (vedere "il codice" di seguito).Doppia uscita quando si chiama una funzione attraverso un'altra

La parte confusa: Utilizzando la funzione "conteggio", ottengo il seguente output programma: program output

Come si può notare, alcuni risultati sono duplicati (segnate in rosso). Come si può evitare senza rimuovere la stampa da find? È possibile o sono obbligato a rimuoverlo (la stampa)? Capisco che queste due funzioni possono essere trasformate in una più semplice, ma voglio capire come chiamare una funzione usando un'altra.

Devo anche menzionare che il valore del conteggio delle variabili è corretto. Gli unici problemi sono le uscite duplicate.

Il codice:

def find(word, letter, index): 
    start_ind = index 
    while index < (len(word)): 
     if word[index] == letter: 
      print "%s found at index %s" % (letter, index) 
      return index 

     index += 1 

    else: 
     print "%s is not found in string '%s' when starting from index %s" % (letter, word, start_ind) 
     return -1 


def count(word, letter, index): 
    count = 0 
    while index < len(word): 
     if find(word, letter, index) != -1: 
      count += 1 
      index = find(word, letter, index) + 1 

    print "%s is shown %s times in '%s'" % (letter, count, word) 

    count("banana", "a", 0) 
+0

È questo indentazione ESATTAMENTE come l'hai? –

+0

dubito che _chuckle_ –

+1

Chiamate per "trovare" la funzione 2 volte nel vostro ciclo while. Ogni volta che viene chiamato stampa un messaggio. Limitare l'uso della funzione con 1 volta e il problema sarà risolto. – Vadim

risposta

5

ci sono due find() chiamate per ogni iterazione del ciclo while:

if find(word, letter, index)!= -1: 
     count += 1 
     index = find(word, letter, index) + 1 

ogni stampa:

print "%s found at index %s" % (letter,index) 

Si dovrebbe "Memoize " tramite computin g e memorizzare il valore di find()volta:

found = find(word, letter, index) 
if found != -1: 
     count += 1 
     index = found + 1 

Si tratta di una soluzione più elegante del problema:

word = 'banana' 
letter = 'a' 
occurences = [(index, value) for index, value in enumerate(word) if value == letter] 
for occurence in occurences: 
    print "Letter ",letter," has been found at index ",index 
print "Letter ", letter, " has been found a total of ", len(occurences), " times." 
+0

per la risposta. aiutato molto –

+0

puoi accettare la risposta se ha risolto la tua domanda? –

0

aggiornamento la funzione di conteggio in questo modo:

def count(word,letter,index): 
    count = 0 
    while index < len(word): 
     index = find(word,letter,index) + 1 
     if index != 0: 
      count+=1 
+0

per la risposta. ho capito ora :) –

Problemi correlati