Циклы и подсчет ж / найти

1

Поэтому я усердно работаю над некоторыми примерами своей домашней работы и наткнулся на еще одну ошибку.

Оригинал:

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

ОК. Выглядит просто.

Затем я использовал этот код в имени имени функции и обобщил его так, чтобы он принимал строку и букву в качестве аргумента.

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

        print count

Здесь я все еще не уверен, что я делаю неправильно.

Я должен переписать эту функцию, чтобы вместо перемещения строки она использовала трехпараметрическую версию поиска из предыдущего раздела. Что это:

    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 ответов

3

Цель упражнения - использовать ранее определенную функцию find в качестве строительного блока для реализации нового count функций. Итак, когда вы ошибаетесь, вы пытаетесь переопределить find, когда вы должны пытаться изменить реализацию count.

Однако есть морщина в том, что find вами find имеет небольшую ошибку, вам нужно будет изменить <= на a < чтобы она работала правильно. С помощью <= вы можете ввести тело цикла с 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')
  • 0
    @ Wim Упражнение было ... Переписать эту функцию так, чтобы вместо обхода строки она использовала трехпараметрическую версию find из предыдущего раздела. Мы только начали этот класс и не прошли через эту последнюю часть с: if name == ' main ': print count ('banana', 'a') Я занимаюсь этим уже 5 часов, и я ценю ваше ответ, но я не думаю, что они просят об этом.
  • 0
    Я больше не знаю ... Я даже не уверен, какой вопрос мне задают. Вот как я интерпретирую это: я хочу выбрать слово и букву (внутри этого слова) вместе с выбором начальной точки для этого слова и подсчитать, сколько букв в этом слове от выбранной начальной точки.
Показать ещё 1 комментарий
1

Идея состоит в том, чтобы использовать find, чтобы найти вам следующий указатель данного письма.

В коде вы не используете функцию find.

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 в терминах длины результата.

(Извините, никаких намеков на окончательную функцию в вашем вопросе, потому что я не могу сказать, что вы пытаетесь сделать. Похоже, возможно, вы оставили слишком много оригинальной функции и объединили свои цели вместе?)

  • 0
    @ Бен Джексон То, что я пытаюсь сделать, это выбрать точку (индекс) на строке и посчитать, сколько из выбранных «букв» от этого момента. По крайней мере, так я читаю то, что спрашивает меня об этом упражнении.
  • 0
    Я не собираюсь этого получать. Спасибо за помощь, ребята!
0

Попробуйте использовать:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню