[英]Python - scrabble word count
我需要为拼字游戏编写一个简短的程序,其中给定一个单词可以计算分数。
我是 python 的新手,仍在弄清楚如何组合列表。 对解决方案的任何帮助或解释将不胜感激。
我想我必须声明每个列表都等于一个数字,然后使用它来计算如何查看一个单词并计算该分数。
有没有人能给我一个解决方案,并通过各个方面和我交谈?
one_letter_point = ['e', 'a', 'o', 't', 'i', 'n', 'r', 's', 'l', 'u']
two_letter_point = ['d', 'g']
three_letter_point = ['c', 'm', 'b', 'p']
four_letter_point = ['h', 'f', 'w', 'y', 'v']
five_letter_point = ['k']
eight_letter_point = ['j', 'x']
ten_letter_point = ['q', 'z']
def scrabble_word_count(word):
one_letter_word = 1 #do the same for the rest and then not sure what to do
return scrabble_word_count(word) # not sure if this is supposed to be done
print answer_word('zoo')
我有这个替代方法,但它只查看第一个字母并给出了这一点。 例如,苹果的点数 = 1。因为它只看 a。
def scrabble_word_count(word):
score = 0
for letter in word:
if letter in one_letter_point:
score += 1
elif letter in two_letter_point:
score += 2
elif letter in three_letter_point:
score += 3
elif letter in four_letter_point:
score += 4
elif letter in five_letter_point:
score += 5
elif letter in eight_letter_point:
score += 8
elif letter in ten_letter_point:
score += 10
return score
print(scrabble_word_count('apple'))
您需要指定字母和值之间的对应关系,为了快速访问,每个字母都有一个简单的对应关系。
score = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2,
"f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3,
"l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1,
"r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4,
"x": 8, "z": 10}
然后对于单词的每个字母,在score dict
找到它并求和所有
# simple for loop style
def scrabble_word_count(word):
res = 0
for letter in word:
res += score[letter]
return res
# functionnal style
def scrabble_word_count(word):
return sum(map(score.get, word))
使用单独的列表:
one_letter_point = ['e', 'a', 'o', 't', 'i', 'n', 'r', 's', 'l', 'u']
two_letter_point = ['d', 'g']
three_letter_point = ['c', 'm', 'b', 'p']
four_letter_point = ['h', 'f', 'w', 'y', 'p']
five_letter_point = ['k']
eight_letter_point = ['j']
ten_letter_point = ['q', 'z']
def scrabble_word_count(word):
res = 0
for letter in word:
if letter in one_letter_point:
res += 1
elif letter in two_letter_point:
res += 2
elif letter in three_letter_point:
res += 3
elif letter in four_letter_point:
res += 4
elif letter in five_letter_point:
res += 5
elif letter in eight_letter_point:
res += 8
elif letter in ten_letter_point:
res += 10
return res
好的开始,但是您的数据结构产生了问题。 好的,所以有了five_letter_point = ['k']
,我们知道一个 'k' 值五分。 我们如何从数据存储在包含单词“five”的变量名下这一事实中提取该数据? 我们真的不能。
让我们改用dict
,它在 Python 的上下文之外也称为哈希图。 例如,使用secret_identities = {"Batman": "Bruce Wayne", "Kal-El": "Superman"}
您可以查找secret_identities['Batman']
并了解蝙蝠侠是布鲁斯·韦恩。 或者在你的情况下:
letter_scores = {
'e': 1,
'a': 1,
...
'd': 2,
...
}
现在分数被存储为一个字典,它将每个字母映射到它得到的点数。 例如,您可以使用letter_scores['e']
查找'e'
的分数,它应该返回数字1
。
根据字母所在的列表,使用多个if
语句将适当的值添加到分数中。
def scabble_word_count(word):
score = 0
for letter in word:
if letter in one_letter_point:
score += 1
elif letter in two_letter_point:
score += 2
elif letter in three_letter_point:
score += 3
...
return score
您可以通过将所有字母列表放入另一个列表来避免所有重复的代码。 对没有任何字母的点使用空列表。
all_letters = [
one_letter_point, two_letter_point, three_letter_point, four_letter_point, five_letter_point,
[], [], [], eight_letter_point, [], ten_letter_point
]
def scrabble_word_count(word):
score = 0
for letter in word:
for index, letters in enumerate(all_letters):
if letter in letters:
score += index + 1 # indexes start at 0, points start at 1
break
return score
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.