所以我的代码到目前为止,想法是计算每个字符的数量并且它有效,但调整是我需要以某种方式用" stars" (' *&#39)。让我举个例子让它更容易理解。
entert text please.
HEY hei
现在是:
histogram:
e: 2
h: 2
i: 1
y: 1
想:
histogram:
e: **
h: **
i: *
y: *
对于有人想知道,是的,这是学校作业的一部分,我不想使用收藏/计数器
def count_dict(mystring):
d = {}
# count occurances of character
for w in mystring:
d[w] = mystring.count(w)
# print the result
print("histogram:")
for k in sorted(d):
(str(d[k])).replace(isdigit(), '*')
print (k +': ' + str(d[k]))
mystring = input("entert text please.\n").lower().replace(' ', '')
count_dict(mystring)
解决
修改
这个小技巧完成了工作:
m = int(str(d[k]))
print (k +': ' + m*'*')
答案 0 :(得分:1)
这里有一个提示:
>>> '*'*2
'**'
>>>> '*'*3
'***'
答案 1 :(得分:0)
您可以制作字母计数字典
s = 'Hello world this is my sentence'
unique_letters = filter(lambda i : i.isalpha(), set(s.lower()))
这是unique_letters的集合
['c', 'e', 'd', 'i', 'h', 'm', 'l', 'o', 'n', 's', 'r', 't', 'w', 'y']
我们可以利用*
操作来制作星号字符串。这可以在dict comp。
star_dict = {i : '*' * s.count(i) for i in unique_letters}
star_dict
现在
{'c': '*', 'e': '****', 'd': '*', 'i': '**', 'h': '*', 'm': '*', 'l': '***', 'o': '**', 'n': '**', 's': '***', 'r': '*', 't': '**', 'w': '*', 'y': '*'}
打印出来:
for key in star_dict:
print key, ':', star_dict[key]
c : *
e : ****
d : *
i : **
h : *
m : *
l : ***
o : **
n : **
s : ***
r : *
t : **
w : *
y : *
答案 2 :(得分:0)
您可以使用计数器:
s='HEY hei'
from collections import Counter
hist=Counter(c for c in s.lower() if c.strip())
for l, c in hist.most_common():
print('{}:{}'.format(l, '*'*c))
打印:
e:**
h:**
i:*
y:*
如果您不能使用Counter,您可以采用'老式方式':
count={}
for e in (c for c in s.lower() if c.strip()):
count[e]=count.setdefault(e, 0)+1
for k, v in sorted(count.items(), key=lambda t:-t[1]):
print('{}:{}'.format(k, '*'*v))