如何计算单词中的字母?
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 的频率:)
希望对您有所帮助!
我正在尝试制作一个 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 的频率:)
希望对您有所帮助!