直方图和不区分大小写的python?

时间:2014-04-03 15:58:55

标签: python dictionary histogram

我目前正在编写使用python的编程课程。我们被允许有外界帮助,所以我发布这个很好。

所以这是我想写的程序:

  

使用Python字典编写执行以下操作的程序:

     
      
  1. 要求用户输入一段文字。
  2.   
  3. 显示文本中每个字母出现的频率。
  4.   
  5. 您的程序应该不区分大小写,即'a''A'应该算作同一个字母。
  6.   
  7. 显示字母表中的所有字母,包括频率为0的字母。
  8.   

这是我到目前为止所得到的:

def histogram(L): 
 d = {} 
 for x in L: 
   if x in d:
     d[x] += 1 
   else: d[x] = 1 
 return d 
print histogram("banana")

现在我的问题是它只显示单词中的字母并且区分大小写。我真的需要帮助不区分大小写的部分。我用谷歌搜索了几个小时,无法找到适合我问题的解决方案。

所以,如果您有任何建议,或者您可以向我展示一个例子,我非常感激。

4 个答案:

答案 0 :(得分:2)

您需要使用零来初始化所有小写字母的字典。只有这样你才能开始使用你在段落中找到的字符(小写)来更新它。

import string

def histogram(paragraph):
    histogram = {}
    for char in string.lowercase:
        histogram[char] = 0
    for char in paragraph:
        if char.lower() in string.lowercase:
            histogram[char.lower()] += 1
    return histogram

这是一个测试。检查一下&#39; t&#39;被计算4次,包括第一次&#39; <&#39;

In [6]: paragraph = """
   ...: This is a paragraph. It goes over some lines. And
   ...: there are newlines in between!
   ...: """

In [15]: histogram(paragraph)
Out[15]:
{'a': 6,
 'b': 1,
 'c': 0,
 'd': 1,
 'e': 12,
 # ...
 't': 4,
 # ...
 'y': 0,
 'z': 0}

答案 1 :(得分:1)

一些提示:

(1)@jonrsharpe强调了"StrInG".lower() == "string"

(2)string.ascii_letters包含字符串中的所有小写和大写字母

(3)set(iterable)返回存储在集合中的iterable的唯一元素;此外,字符串是可迭代的

(4)dict().fromkeys(iterable, 0)创建一个字典,其中iterable中的每个项目都存储为值为0的键。

这应该会让你走得很远。

答案 2 :(得分:0)

import string

def histogram(L): 
    d = {} 
    for x in string.ascii_lowercase:
        d[x] = 0
    for x in L:
        if x in string.ascii_letters:
            x = x.lower()
            if x in d:
                d[x] += 1 
            else: d[x] = 1 
        else:
            continue
    return d 
print histogram("HeLlo WOrld!!")

答案 3 :(得分:0)

def histogram(L): 
 #do all the letters
 d = {z:0 for z in map(lambda x: chr(ord("a") + x), xrange(26))}
 for x in L:
   x = x.lower()
   try:
     d[x] += 1 
   except KeyError:
     print("bad char")
 return d 
print histogram("banana")