循环和计数w / find

时间:2011-09-10 00:21:01

标签: python

所以我正在为我的家庭作业努力工作,并遇到了另一个错误。

原文:

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

确定。看起来很简单。

然后我在函数名 count 中使用了这段代码并对其进行了一般化,以便它接受字符串和字母作为参数。

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

        print count

这是我仍然不确定我做错了什么。

我必须重写这个函数,以便它不使用遍历字符串,而是使用上一节中的三参数find。这是:

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


        return -1

这是我得到了多远......但程序不能按照我想要的方式工作。

    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

有人能指出我正确的方向吗?我想知道我在做什么,而不仅仅是给出答案。感谢。

5 个答案:

答案 0 :(得分:3)

练习的目的是使用先前定义的函数find作为构建块来实现新函数count。因此,当您出错时,尝试重新定义find,当您尝试更改count的实施时。

然而,由于您提出的find有轻微错误,您需要将<=更改为<以使其正常工作。使用<=,您可以使用index == len(word)输入循环体,这将导致IndexError: string index out of range

首先修复find函数:

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

然后重新实施count,这次在正文中使用find

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')

答案 1 :(得分:1)

这个想法是使用find来找到给定字母的下一个索引。

在您的代码中,您不使用查找功能。

答案 2 :(得分:1)

如果你想尝试一些有趣和pythonic的东西:将原来的find更改为yield index并删除最终的return -1。哦,并修复<=错误:

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))

现在find会返回所有的结果。您可以像我在示例中使用它一样使用它或使用for position in find(...):您也可以根据结果的长度简单地编写count

(对不起,你的问题中没有关于最终功能的提示,因为我无法告诉你你想要做什么。看起来你可能会留下太多的原始功能并将它们的目的混杂在一起?)

答案 3 :(得分:0)

这就是我想出的:这应该有效。

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
>>> 

答案 4 :(得分:0)

尝试使用:

spring.profiles.active