我正在尝试编写一个给出字母的简单函数,您将返回拼字游戏磁贴的值。这就是我所拥有的:
def letterPoint(letter):
letter = letter.upper()
lettersWorthOne =(['A','E','I','N','O','R','S','T'])
lettersWorthTwo = (['D','G'])
lettersWorthThree = (['B','C','M','P'])
lettersWorthFour = (['F','H','U','V','W','Y'])
lettersWorthFive = (['K'])
lettersWorthEight = (['J','X'])
lettersWorthTen = (['Q','Z'])
if letterWorthOne:
print '1'
if letterWorthTwo:
print '2'
if letterWorthThree:
print '3'
if letterWorthFour:
print '4'
if letterWorthFive:
print '5'
if letterWorthEight:
print '8'
if letterWorthTen:
print '10'
答案 0 :(得分:2)
使用字典。而不是
lettersWorthTwo = (['D','G'])
等等。
您将拥有以下行的数据结构:
letterValues = {'D':2, 'G':2, ... }
然后查找值只是:
letterValues['D'] # returns 2 for the value of the tile
答案 1 :(得分:0)
指出为什么您的代码不起作用,因为您没有将您的信件与列表进行比较。
#Change from this:
if letterWorthOne:
print '1'
#to this, should work
if letter in letterWorthOne:
print '1'
.....
使用python 字典是可行的方法。
除了某人已经发布的解决方案。您还可以构建更像这样的内容字典:
Letters = {
'a': { 'quantity' : 9, 'value': 1},
'b': { 'quantity' : 2, 'value': 3},
'c': { 'quantity' : 2, 'value': 3},
'd': { 'quantity' : 4, 'value': 2},
'e': { 'quantity' : 12, 'value': 1},
'f': { 'quantity' : 2, 'value': 4},
'g': { 'quantity' : 3, 'value': 2},
'h': { 'quantity' : 2, 'value': 4},
'i': { 'quantity' : 9, 'value': 1},
'j': { 'quantity' : 1, 'value': 8},
'k': { 'quantity' : 1, 'value': 5},
'l': { 'quantity' : 4, 'value': 1},
'm': { 'quantity' : 2, 'value': 3},
'n': { 'quantity' : 6, 'value': 1},
'o': { 'quantity' : 8, 'value': 1},
'p': { 'quantity' : 2, 'value': 3},
'q': { 'quantity' : 1, 'value': 10},
'r': { 'quantity' : 6, 'value': 1},
's': { 'quantity' : 4, 'value': 1},
't': { 'quantity' : 6, 'value': 1},
'u': { 'quantity' : 4, 'value': 1},
'v': { 'quantity' : 2, 'value': 4},
'w': { 'quantity' : 2, 'value': 4},
'x': { 'quantity' : 1, 'value': 8},
'y': { 'quantity' : 2, 'value': 4},
'z': { 'quantity' : 1, 'value': 10},
'*': { 'quantity' : 2, 'value': 0}
}
# to get to it's "content", like this:
Letters['a']
{'quantity': 9, 'value': 1}
# you can then get its 'value' or 'quantity' in a tile bag
Letters['a']['value']
1
# if you MUST use a function, do this with above dictionary, although it's quite pointless
def letter_point(letter):
return Letters[letter.upper()]['value']
答案 2 :(得分:0)
在letterPoint()
中,letterWorthOne
和lettersWorthOne
是单独的变量。每个lettersWorth*
变量都包含一个列表,您似乎希望letterWorthOne
包含一个布尔值(True
或False
),指明letter
是否在lettersWorthOne
列表。要确定值是否在集合中,请使用运算符in
。
def letterPoint(letter):
letter = letter.upper()
lettersWorthOne =(['A','E','I','N','O','R','S','T'])
lettersWorthTwo = (['D','G'])
letterWorthOne = letter in lettersWorthOne
if letterWorthOne:
print '1'
letterWorthTwo = letter in lettersWorthTwo
if letterWorthTwo:
print '2'
# rest of values omitted for brevity
print 'E worth'
letterPoint('E')
print 'D worth'
letterPoint('D')
该程序产生以下输出:
E worth
1
D worth
2
这解释了为什么您现有的功能不起作用。但从长远来看,我建议使用字典来保存每个字母的值和数量,并将值存储为数字而不是字符串,以便您可以在单词中添加所有字母的值。
答案 3 :(得分:0)
要使用您开始使用的代码,您可以考虑将行更改为:
if letter in lettersWorthOne print 1
...
这是因为您使用的数据结构是list
(它被[]
括号包围)。在您的函数中使用这些列表的方法是使用代码查看if
它们包含列表中的in
字母:
if <variable> in <list> print <value>
()
括号不做任何事情,如另一个答案所述,这样你就可以摆脱它们。
这只是为了向您解释为什么您没有看到您所写功能的任何结果。使用dict
(字典)建议的其他答案在实践中是更好的方法。