2015-08-24 31 views
1

我正在尝试制作一个Python脚本,用于计算我的Hang子手游戏中随机选择的单词中的字母数量。如何统计单词中的字母?

我已经在网上看了一圈,但是我能找到的大部分东西都是一个单词中计数特定的字母。经过更多的四处看看,我结束了这一点,这是因为某些原因不起作用。如果有人能指出错误,那将不胜感激。

wordList = ["Tree", "Fish", "Monkey"] 
wordChosen = random.choice(wordList) 
wordCounter = wordChosen.lower().count['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
print(wordCounter) 
+0

请,如果你正在运行的代码引发错误,你应该在问题中发布错误。特别是如果你发布的代码不完整。 – Bakuriu

+0

代码是完整的... – SikuliXUser

+0

不,它不是。它引发了一个'NameError'。在任何情况下,即使代码完整,发布错误消息也只是简单一些。例如,如果我使用手机查看问题,我可以提供答案,但是如果我需要运行代码,则在手机上会变得更加困难......只是说:如果你想尽快得到答案,你想让尽可能多的人回答。不提供错误消息文本减少了可以轻松回答的人数(并注意到移动设备即使在SO上也越来越多地使用...) – Bakuriu

回答

1

首先,你的代码包含一个错误,是相当重要的是要明白:

wordChosen.lower().count['a', 'b'] #... 

count功能,所以它需要你的周围用括号参数,而不是方括号!

接下来,您应该尝试在第一次使用某个功能时参考Python Documentation。这应该有助于你理解你的方法不起作用。

现在解决您的问题。如果要计算字符串中字母的数量,请使用len(wordChosen),它计算字符串中字符的总数。

如果你想计算每个字母的频率,有几种方法已被建议。下面是一个使用字典更多:

import string 
LetterFreq={} 
for letter in string.ascii_lowercase: 
    LetterFreq[letter] = 0 
for letter in wordChosen.lower(): 
    LetterFreq[letter] += 1 

这有违约的话不存在的所有字母为0 :)

希望这有助于频率的很好的振作!

7

您是否在寻找collections.Counter

>>> import collections 
>>> print(collections.Counter("Monkey")) 
Counter({'M': 1, 'y': 1, 'k': 1, 'o': 1, 'n': 1, 'e': 1}) 
>>> print(collections.Counter("Tree")) 
Counter({'e': 2, 'T': 1, 'r': 1}) 

>>> c = collections.Counter("Tree") 
>>> print("The word 'Tree' has {} distinct letters".format(len(c))) 
The word 'Tree' has 3 distinct letters 
>>> print("The word 'Tree' has {} instances of the letter 'e'".format(c['e'])) 
The word 'Tree' has 2 instances of the letter 'e' 
+0

非常感谢! – SikuliXUser

0

问题:
计数方法只需要一个参数,你试图传递一个整个列表。

解决方案:
只需遍历所有字母,然后在打印它们之前测试它们是否在字符串中以及它们的数量。

import random 
wordList = ["Tree", "Fish", "Monkey"] 
wordChosen = random.choice(wordList) 

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 

for letter in letters: 
    if letter in wordChosen.lower(): 
     amount = str(wordChosen.lower().count(letter)) 
     print(letter + " : " + amount) 

结果:
如果选择的随机字是“树”:

e : 2 
r : 1 
t : 1 

结论:
使用集合,绝对是一个更有效的方法,但我相信我有办法如上所示创建更多您正在寻找的输出。