Количество писем на строку
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Нажмите клавишу ввода для выхода." )