如何计算单词中的字母?

How to count the letters in a word?

我正在尝试制作一个 Python 脚本来计算我的 Hangman 游戏中随机选择的单词中的字母数量。

我已经在网上四处寻找,但我能找到的大部分内容都是计算单词中的特定字母。环顾四周后,我最终得到了这个,但由于某种原因它不起作用。如果有人能指出错误,将不胜感激。

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)

您在寻找 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'

问题:
计数方法只接受一个参数,而您正试图传递整个列表。

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

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)

结果:
如果随机选择的单词是"Tree":

e : 2
r : 1
t : 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 的频率:)

希望对您有所帮助!