Количество писем на строку

Python newb здесь. Я пытаюсь подсчитать количество букв "а" в заданной строке. Код ниже. Он продолжает возвращать 1 вместо 3 в строке "банан". Любой вход оценивается.

def count_letters(word, char):
    count = 0
    while count <= len(word):
        for char in word:
            if char == word[count]:
                count += 1
            return count



print count_letters('banana','a')

Ответ 1

Другие ответы показывают, что не так с вашим кодом. Но есть также встроенный способ сделать это, если вы не просто делаете это для упражнения:

>>> 'banana'.count('a')
3

Данбэн дал эту исправленную версию:

def count_letters(word, char):
  count = 0
  for c in word:
    if char == c:
      count += 1
  return count

Вот некоторые другие способы сделать это, надеюсь, они научат вас больше о Python!

Аналогичный, но более короткий цикл for. Исследует тот факт, что логическое значение может быть равно 1, если true, и 0, если false:

def count_letters(word, char):
  count = 0
  for c in word:
    count += (char == c)
  return count

Сокращение для циклов обычно может быть превращено в понимание списка/генератора. Это создает список целых чисел, соответствующих каждой букве, с 0, если буква не соответствует char и 1, если это так, а затем суммирует их:

def count_letters(word, char):
  return sum(char == c for c in word)

Следующий фильтр отфильтровывает все символы, которые не соответствуют char, и подсчитывает, сколько осталось:

def count_letters(word, char):
  return len([c for c in word if c == char])

Ответ 2

Одна из проблем заключается в том, что вы используете count для ссылки как на позицию в проверяемом слове, так и на число char, которое вы видели, и используете char для ссылки как на входной символ, который вы проверяете, и текущий символ в строке. Вместо этого используйте отдельные переменные.

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

Наконец, вам понадобится только один цикл для итерации по строке. Избавьтесь от внешнего цикла while, и вам не нужно будет отслеживать позицию в строке.

Взяв эти предложения, ваш код будет выглядеть так:

def count_letters(word, char):
  count = 0
  for c in word:
    if char == c:
      count += 1
  return count

Ответ 3

Простой способ заключается в следующем:

def count_letters(word, char):
    return word.count(char)

Или, другой способ подсчитывает каждый элемент напрямую:

from collections import Counter
Counter('banana')

Конечно, вы можете указать один элемент, например.

Counter('banana')['a']

Ответ 4

Ваш return находится в вашем цикле for! Будьте осторожны с отступом, вы хотите, чтобы линия return count находилась вне цикла. Поскольку цикл for проходит через все символы в word, внешний цикл while полностью не нужен.

Очищенная версия:

def count_letters(word, to_find):
    count = 0
    for char in word:
        if char == to_find:
            count += 1
    return count

Ответ 5

У вас есть ряд проблем:

  • Проблема с вашим отступом, как уже указывали другие.
  • Нет необходимости иметь вложенные циклы. Достаточно одного цикла.
  • Вы используете char для обозначения двух разных вещей, но переменная char в цикле for будет перезаписывать данные из параметра.

Этот код исправляет все эти ошибки:

def count_letters(word, char):
    count = 0
    for c in word:
        if char == c:
            count += 1
    return count

Более сжатый способ написать это - использовать выражение генератора:

def count_letters(word, char):
    return sum(char == c for c in word)

Или просто используйте встроенный метод count, который делает это для вас:

print 'abcbac'.count('c')

Ответ 6

Я вижу кое-что не так.

  • Вы повторно используете идентификатор char, поэтому это вызовет проблемы.
  • Вы говорите if char == word[count] вместо word[some index]
  • Вы возвращаетесь после первой итерации цикла for!

Вам даже не нужен while. Если вы переименуете параметр char в search,

for char in word:
    if char == search:
        count += 1
return count

Ответ 7

Альтернативно Вы можете использовать:

mystring = 'banana'
number = mystring.count('a')

Ответ 8

count_letters=""

number=count_letters.count("")

print number

Ответ 9

"banana".count("ana") возвращает 1 вместо 2!

Я думаю, что метод выполняет итерацию по строке (или списку) с шагом, равным длине подстроки, поэтому он не видит такого рода вещи.

Итак, если вы хотите "полный счет", вы должны реализовать свой собственный счетчик с правильным циклом шага 1

Исправьте меня, если я ошибаюсь...

Ответ 10

def count_letter(word, char):
    count = 0
    for char in word:
        if char == word:
            count += 1
    return count        #Your return is inside your for loop
r = count_word("banana", "a")
print r
  

3

  

Ответ 11

x=str(input("insert string"))
c=0
for i in x:
   if 'a' in i:
      c=c+1
print(c)        

Ответ 12

word = input ( "Введите слово:" )

print ( "\nВсе каждой буквы в слове:" ) для буквы в слове:   печать (буква)

input ( "\n\nНажмите клавишу ввода для выхода." )