Python功能:给定拼字游戏平铺,有什么价值?

时间:2014-10-29 17:22:46

标签: python function

我正在尝试编写一个给出字母的简单函数,您将返回拼字游戏磁贴的值。这就是我所拥有的:

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'

4 个答案:

答案 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()中,letterWorthOnelettersWorthOne是单独的变量。每个lettersWorth*变量都包含一个列表,您似乎希望letterWorthOne包含一个布尔值(TrueFalse),指明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(字典)建议的其他答案在实践中是更好的方法。