Поэтому я усердно работаю над некоторыми примерами своей домашней работы и наткнулся на еще одну ошибку.
Оригинал:
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
Может кто-то указать мне в правильном направлении. Я хочу понять, что я делаю, вместо того, чтобы просто дать ответ. Благодарю.
Цель упражнения - использовать ранее определенную функцию 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')
Идея состоит в том, чтобы использовать find, чтобы найти вам следующий указатель данного письма.
В коде вы не используете функцию find.
Если вы хотите попробовать что-то интересное и 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
в терминах длины результата.
(Извините, никаких намеков на окончательную функцию в вашем вопросе, потому что я не могу сказать, что вы пытаетесь сделать. Похоже, возможно, вы оставили слишком много оригинальной функции и объединили свои цели вместе?)
Попробуйте использовать:
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 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
>>>