return
- это ключевое слово, которое работает более или менее, так как сразу же выходит из этой функции (и, необязательно, переносит некоторый вывод с вами). Таким образом, вы должны удалить return
заявление:
def find_duplicate():
x =input("Enter a word = ")
for char in x :
counts=x.count(char)
print(char,counts)
Кроме того, вы также должны удалить петлю while
(или обновлять счетчик, если вы хотите print
несколько раз), в противном случае вы застрять в бесконечном цикле, так как count
не обновляется, и тест, таким образом, всегда будет успешным.
Обратите внимание, что в этом случае a
будет напечатан несколько раз (в данном случае два), если он найден несколько раз в строке. Вы можете решить эту проблему путем первого построения set
из символов в строке и перебирать этот набор:
def find_duplicate():
x =input("Enter a word = ")
for char in set(x):
counts=x.count(char)
print(char,counts)
Наконец, лучше сделать разделение между функций, которые вычисляют и функции, которые делают I/O (например, print
). Поэтому вам лучше сделать функцию, которая возвращает словарь со счетчиками, и тот, который печатает этот словарь. Вы можете создать словарь, как:
def find_duplicate(x):
result = {}
for char in set(x):
result[char]=x.count(char)
return result
и функцию вызова:
def do_find_duplicates(x):
x =input("Enter a word = ")
for key,val in find_duplicate(x).items():
print(key,val)
И теперь лучшая часть: вы на самом деле не нужно, чтобы написать функцию find_duplicate
: есть утилита класса для что: Counter
:
from collections import Counter
def do_find_duplicates(x):
x =input("Enter a word = ")
for key,val in Counter(x).items():
print(key,val)
Вы сразу 'return' ... –
Вы ищете' collections.Counter' – Akavall
Потому что, когда вы * возвращаете *, функция прекращает выполнение ... Кроме того, почему вы возвращаете результат вызова 'print'?Это всегда будет возвращать 'None'. –