alphabets ="abcdefghijklmnopqrstuvwxyz"
def calculation(text,alphabets):
sample_list = []
total_counter = 0
for element in text:
if element != " ":
total_counter += 1
total = total_counter
for alphabet in alphabets:
alphabet_counter = 0
for element in text:
if element == alphabet:
alphabet_counter += 1
tna = alphabet_counter
percentage_counter = float((tna/total)*100)
sample_list.append(percentage_counter)
return sample_list
text = "sahib will be a very successful programmer one day."
x = calculation(text,alphabets)
print x
我试图创建一个python程序员来计算文本中每个字符的百分比。但是当我打印列表时,它会显示一个空列表
答案 0 :(得分:4)
我认为这一行:
percentage_counter = float((tna/total)*100)
正在进行整数数学运算,从而导致所谓的“地板划分”与结果混淆。 尝试替换为:
percentage_counter = 100*tna/float(total)
答案 1 :(得分:1)
这不是您的问题的答案(因为user2464424已经回答了它),但只是一些未来的提示。你的功能可以更加简洁地表达出来:
def calculation(text, alphabet):
total = float(sum(ch in alphabet for ch in text))
return [100 * sum(ch == letter for ch in text) / total for letter in alphabet]
这演示了Python的list comprehension,generator expressions以及布尔值are integers的事实。
它还修复了程序中的一个错误,即总字符数只排除空格而不是句点,而此版本排除了给定字母表中未明确显示的所有字符。 (当前函数返回的列表不总和为100.)
答案 2 :(得分:0)
您可以使用Counter()
,OrderedDict()
和正则表达式极大地简化您的问题。正则表达式删除所有不是A-Z的字符,Counter获取每个字母的出现次数,OrderedDict允许您按顺序打印字母。
from collections import Counter, OrderedDict
import re
string= 'sahib will be a very successful programmer one day.'.lower()
string = re.sub('[^a-z]', '', string)
count = Counter(string)
count = OrderedDict(sorted(count.items()))
for k,v in count.items():
print "{} {:.2f}".format(k, (v/float(len(string))*100))
a 9.52
b 4.76
c 4.76
d 2.38
e 11.90
f 2.38
g 2.38
h 2.38
i 4.76
l 7.14
m 4.76
n 2.38
o 4.76
p 2.38
r 9.52
s 9.52
u 4.76
v 2.38
w 2.38
y 4.76
答案 3 :(得分:0)
我将结束部分更改为:
x = calculation(text,alphabets)
for val in x:
print("%5.2f"%val)
并得到一个开始的列表:
9.30
4.65
4.65
2.33
11.63
2.33
2.33
我可以建议,如果你用这个百分比存储这封信会更有意思吗?试试我的版本:
alphabets ="abcdefghijklmnopqrstuvwxyz"
def calculation(text,alphabets):
sample_dict = {}
total_counter = 0
for element in text:
if element != " ":
total_counter += 1
total = total_counter
for alphabet in alphabets:
alphabet_counter = 0
for element in text:
if element == alphabet:
alphabet_counter += 1
tna = alphabet_counter
percentage_counter = float((tna/total)*100)
sample_dict[alphabet]=(percentage_counter)
return sample_dict
text = "the quack frown sox lumps oven the hazy fog"
x = calculation(text,alphabets)
for key,val in sorted(x.items()):
print("%s"%key,"%5.2f"%val)
这会产生一个开始的列表:
a 5.71
b 0.00
c 2.86
d 0.00
e 8.57
f 5.71
g 2.86
h 8.57
i 0.00
看看你的想法。
答案 4 :(得分:0)
哦,简单来说就试试打印浮点数(tna / total)。你将得到0,因为输出0(仅整数)内的值和浮点数0只是0.0。
所以这是你可以做的 - 在执行tna / total之前将tna或total中的一个转换为浮点数。 像tna * 1.0000 /总计。 这种方式有效。 干杯