2015-03-24 3 views
2

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

S = str(input("Enter a string: ")) 
S = S.lower() 
alpha = "[email protected]#$%^&*()! " 

for char in S: 
    if char in alpha: 
      count = S.count(char) 
    print(char,':',count) 

выход

Enter a string: hello 
h : 1 
e : 1 
l : 2 
l : 2 
o : 1 

я хочу, чтобы это выглядело как этот

Enter a string: hello 
    h : 1 
    e : 1 
    l : 2 
    o : 1 

я думал, если я перевернул строку и подсчет произошел символы в вложенный список, как

Enter a string: hello 
[['h', 1], ['e', 1], ['l', 2], ['l', 2], ['o', 1]] 

Могу ли я удалить t он перечисляет то же самое и оставляет только один?

ответ

0

так я понял, как сделать это без использования наборов и счетчиков.

S = (input("Enter a string: ")) 
S = S.lower() 
alpha = "[email protected]#$%^&*()! " 
L = [] 
#counts the occurrence of characters in a string. 
#then puts them in a list 
for char in S: 
    if char in alpha: 
      count = S.count(char) 
    L.append(char) 
    L.append(count) 
#turns list into a nested list 
L2 = [] 
i = 0 
while i <len(L): 
     L2.append(L[i:i+2]) 
     i += 2 
#checks that the lists dont appear more than once 
L3 = [] 
for i in L2: 
    if i not in L3: 
      L3.append(i) 

# print out the letters and count of the letter 
for i,k in L3: 
    print(i,k) 

может быть длинным, но он работает. Вам понравится ваше мнение?

6
>>> s = 'hello' 
>>> s = s.lower() 
>>> print('\n'.join('{} : {}'.format(c, s.count(c)) for i, c in enumerate(s) if c in "[email protected]#$%^&*()! " and c not in s[:i])) 
h : 1 
e : 1 
l : 2 
o : 1 
5

Это классическая ситуация для использования Counter в collections модуля:

from collections import Counter 

S ='hello' 
S = S.lower() 
d = Counter(S) 
for item, ct in d.items(): 
    print '%s occured %d times' % (item, ct) 
+0

так что счетчик похож на словарь? Счетчики - это контейнер, в котором вы можете хранить вещи. Я не знаком с ними – Mike

+0

Да 'Counter' унаследован от класса' dict'. Таким образом, это специальный словарь для ведения подсчетов. –

1

Просто итерацию больше set

S = str(input("Enter a string: ")).lower() 
alpha = "[email protected]#$%^&*()! " 

for char in set(S): 
    if char in alpha: 
     print(char,':',S.count(char)) 
0

Вы можете сделать:

S = 'hello' 
S = S.lower() 
alpha = "[email protected]#$%^&*()! " 

seen=set() 

for c in S: 
    if c not in seen and c in alpha: 
     print '{} : {}'.format(c, S.count(c)) 
     seen.add(c) 

печать:

h : 1 
e : 1 
l : 2 
o : 1 
Смежные вопросы