Подсчитайте, сколько раз буква встречается в слове, и запишите их в следующем формате:

Мне нужно создать программу, которая по заданной фразе подсчитывает, сколько раз буква появляется в каждом слове, и печатает ее следующим образом:

Вход:

i see it

Выход:

[('i', 1), ('s', 1), ('e', 2), ('i', 1), ('t', 1)]

Мой код работает только для первого слова. Вы можете мне помочь?

inicialString=str(input())

words=inicialString.split(" ")
def countTheLetters(t):
 for word in words: 
  thingsList=[]
  for x in word:
   n=word.count(x)
   j=x,n
   thingsList.append(j)
  return thingsList

print(countTheLetters(words))

Мой вывод:

[('i', 1)]

Я попытался заменить возвращаемый список вещей, но тогда это сработало только для последнего слова.


person Ana Helena Vieira    schedule 25.11.2018    source источник
comment
@timgeb тебе не хватает list(...)...   -  person Jon Clements♦    schedule 25.11.2018
comment
Разве ожидаемый результат не должен содержать (i, 2) вместо (i, 1) три раза?   -  person Barmar    schedule 25.11.2018
comment
str(input()) может быть просто input(), поскольку в Python 3 он всегда возвращает строку.   -  person Barmar    schedule 25.11.2018
comment
Нет. Предполагается, что оно должно быть конкретным для каждого слова.   -  person Ana Helena Vieira    schedule 25.11.2018
comment
Почему есть два смежных ('i', 1), ('i', 1)?   -  person Dani Mesejo    schedule 25.11.2018
comment
Мне не разрешено использовать это, потому что этому не учили в классах. @тимгеб   -  person Ana Helena Vieira    schedule 25.11.2018
comment
@AnaHelenaVieira да, я ожидал этого. :)   -  person timgeb    schedule 25.11.2018


Ответы (4)


Вы очищаете thingsList каждый раз в цикле for word in words:, поэтому получаете только последнее слово.

Поместите thingsList = [] перед первым оператором for.

person Barmar    schedule 25.11.2018
comment
Это сработало! Это было действительно полезно. Не могу поверить, что не видел этого. - person Ana Helena Vieira; 25.11.2018
comment
Используйте больше пробелов в качестве отступа, вам также нужно поставить return thingsList после оператора for, но все же у вас будут некоторые буквы, встречающиеся несколько раз для отдельных слов. - person Filip Młynarski; 25.11.2018

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

inicialString='i see it'
words=inicialString.split(" ")

def countTheLetters(t):
    ret = []
    for word in words: 
        thingsList=[]
        for x in word:
            n=word.count(x)
            j=x,n
            if not j in thingsList:
                thingsList.append(j)
        ret.extend(thingsList)
    return ret

print(countTheLetters(words))

Выход:

[('i', 1), ('s', 1), ('e', 2), ('i', 1), ('t', 1)]
person Filip Młynarski    schedule 25.11.2018

Проблема в том, что вы сбрасываете «thingsList» каждую итерацию цикла «for word in words», а также возвращаете список ThingsList только после 1 итерации.

inicialString=str(input())

words=inicialString.split(" ")
def countTheLetters(t):
  thingsList=[]
 for word in words: 
  for x in word:
   n=word.count(x)
   j=x,n
   thingsList.append(j)
return thingsList

print(countTheLetters(words))
person Sam    schedule 25.11.2018

обновил код, проверь сейчас

inicialString=str(input())

words=inicialString.split(" ")
def countTheLetters(t):
 thingsList=[]
 for word in words:
  for x in word:
   n=word.count(x)
   j=x,n
   thingsList.append(j)
 return thingsList

print(countTheLetters(words))
person Mudassir Awan    schedule 25.11.2018