2015-11-02 127 views
5

count調用函數find以查看在給定索引處開始的單詞中可以找到多少個字母(請參閱下面的「代碼」)。通過另一個函數調用函數時的雙輸出

混亂的部分: 通過使用函數「計數」,我得到下面的程序輸出: program output

如可以看到的那樣,一些輸出是重複的(標記爲紅色)。 如何避免沒有從查找中刪除打印?是否有可能或我是否被迫將其刪除(打印)? 我明白這兩個函數可以做成更簡單的函數,但我想了解如何使用另一個函數調用函數。

我還必須提到變量計數的值是正確的。唯一的問題是重複的輸出。

代碼:

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

這是縮進精確地說你擁有它的方式? –

+0

我對此表示懷疑_chuckle_ –

+1

您在while循環內調用了2次「find」函數。每次調用它時都會打印出一條消息。限制1次使用該功能,問題將得到解決。 – Vadim

回答

5

有每次迭代2個find()電話在while循環:

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

每次打印時:

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

你應該「memoize的「通過computin G和存儲find()一旦值:

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

這是問題的一個更好的解決方案:

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

ty的答覆。幫了很多忙。 –

+0

如果解決了你的問題,你能接受答案嗎? –

0

更新您的計數功能是這樣的:

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

ty的答覆。我現在明白了:) –

相關問題