开发者

Looping and Counting w/find

So I am working diligently on some examples for my homework and came across yet another error.

The original:

    word = 'banana'
    count = 0
    for letter in word:
        if letter == 'a':
            count = count + 1
    print count

Ok. Looks simple.

I then used this code in a function name count and generalized it so that it accepts the string and the letter as argument.

    def count1(str, letter):
        count = 0             
        word = str            
        for specific_letter in word: 
            if specific_letter == letter: 
                count = count + 1 

        print count

This is where I'm still not sure what I'm doing wrong.

I have to rewrite this function so that instead of traversing the string, it uses the three-parameter version of find from the previous section. Which this is:

    def find(word, letter, startat):
        index = startat
        while index <= len(word):
            if word[index] == letter:
                return index
            index = index + 1


        return -1

This is how far I got... but the program开发者_开发百科 doesn't work the way I want it to.

    def find(str, letter, startat):
        index = startat
        word = str   
        count = 0
        while index <= len(word):
            if word[index] == letter:
                for specific_letter in word:
                    if specific_letter == letter:
                        count = count + 1

                print count
            index = index + 1

Can someone point me in the right direction. I want to understand what I'm doing instead of just given the answer. Thanks.


The point of the exercise is to use the previously defined function find as a building block to implement a new function count. So, where you're going wrong is by trying to redefine find, when you should be trying to change the implementation of count.

However, there is a wrinkle in that find as you have given has a slight error, you would need to change the <= to a < in order for it to work properly. With a <=, you could enter the body of the loop with index == len(word), which would cause IndexError: string index out of range.

So fix the find function first:

def find(word, letter, startat):
    index = startat
    while index < len(word):
        if word[index] == letter:
            return index
        index = index + 1
    return -1

And then re-implement count, this time using find in the body:

def count(word, letter):
    result = 0
    startat = 0
    while startat < len(word):
      next_letter_position = find(word, letter, startat)
      if next_letter_position != -1:
        result += 1
        startat = next_letter_position + 1
      else:
        break
    return result


if __name__ == '__main__':
  print count('banana', 'a')


The idea is to use find to find you the next index of the given letter.

In your code you don't use the find function.


If you want to try something interesting and pythonic: Change the original find to yield index and remove the final return -1. Oh, and fix the <= bug:

def find(word, letter, startat):
    index = startat
    while index < len(word):
        if word[index] == letter:
            yield index
        index = index + 1

print list(find('hello', 'l', 0))

Now find returns all of the results. You can use it like I did in the example or with a for position in find(...): You can also simply write count in terms of the length of the result.

(Sorry, no hints on the final function in your question because I can't tell what you're trying to do. Looks like maybe you left in too much of the original function and jumbled their purposes together?)


Here's what I came up with: This should work.

def find(word, letter, startat)
    index = startat
    count = 0
    while index < len(word):
        if word[index] == letter:
           count = count + 1  ##This counts when letter matches the char in word
    index = index + 1
print count



>>> find('banana', 'a', 0)
3
>>> find('banana', 'n', 0)
2
>>> find('mississippi', 's', 0)
4
>>> 


Try using :

def find_count(srch_wrd, srch_char, startlookingat):
counter = 0
index = startlookingat
while index < len(srch_wrd):     
    if srch_wrd[index] == srch_char:
        counter += 1
    index += 1 
return counter`


def count_letter2(f, l):

    count = 0
    t = 0

    while t < len(f):
        np = f.find(l, t)
        if np != -1:
            count += 1
            t = np + 1
            "I was wrong by  doing t =t +1"
        else:
            break
    return count


print(count_letter2("banana", "a"))

print(count_letter2("abbbb", "a"))
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜