如何计算字典中给出的单词,以及如何计算单词是否在高级磁贴上?

时间:2019-02-03 12:01:54

标签: python arrays

我目前正在研究一个项目,该项目在拼字游戏中计算分数。我被困在可以计算单词的点并计算单词是否在高级图块上的部分。这是我到目前为止完成的代码

words_dict = {'CART': [(6, 2), (6, 3), (6, 4), (6, 5)], 'THIEF': [(6, 5), (7, 5), (8, 5), (9, 5), (10, 5)], 'HORN': [(7, 5), (7, 6), (7, 7), (7, 8)]}

单词旁边是在numpy数组中找到的每个单词的坐标。

premium_tiles = [[ 3, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 3 ],
                     [ 1, 2, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 2, 1 ],
                     [ 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1 ],
                     [ 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2 ],
                     [ 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1 ],
                     [ 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1 ],
                     [ 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1 ],
                     [ 3, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 3 ],
                     [ 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1 ],
                     [ 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1 ],
                     [ 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1 ],
                     [ 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2 ],
                     [ 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1 ],
                     [ 1, 2, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 2, 1 ],
                     [ 3, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 2, 1, 1, 3 ]]

在这个数组上是我需要计算一个单词中的点的点。我想要的期望是例如在CART中,因为我做了一个看起来像这样的数组。

points = {
                'A': 1, 'B': 3, 'C': 3,
                'D': 2, 'E': 1, 'F': 4, 'G': 2,
                'H': 4, 'I': 1, 'J': 8, 'K': 5,
                'L': 1, 'M': 3, 'N': 1, 'O': 1,
                'P': 3, 'Q': 10, 'R': 1, 'S': 1,
                'T': 1, 'U': 1, 'V': 4, 'W': 4, 'X': 8,
                'Y': 4, 'Z': 10, '#': 0
            }

我尝试编写代码,但似乎无法使其正常工作。这是我到目前为止完成的代码。

for key,value in words_dict.items():
    for keys in key:
        if len(keys) == 1: 
           for i,j in value:
               if keys == key[m+1]:
                  sum1 += premium_tiles[i][j]*points[keys]
                  print(sum1)


    sumsOfwords.append(sum1)
    print(sumsOfwords)

在C = 3,A = 1,R = 1和T = 1的情况下,它将转到高级图块以将每个字母与指定坐标相乘。例如,购物车中的坐标为[(6,2),(6,3),(6,4),(6,5)],它将转到数组高级图块并乘以C = 3x2,A的字母= 1x1,R = 1x1和T = 1x1。 CART =(3x2 + 1x1 + 1x1 + 1x1)等于9。有人可以帮助吗?我非常需要。

Not displaying

1 个答案:

答案 0 :(得分:0)

我无法对此进行测试,但在我看来,您还有一些多余的障碍。

sumsOfwords = []
for key, value in words_dict.items():
    sum1 = 0
    for idx, (i, j) in enumerate(value):
        sum1 += premium_tiles[i][j] * points[key[idx]]

    # the multiplier loop goes here
    # don't combine it with the prior loop

    print(sum1)

    sumsOfwords.append(sum1)

print(sumsOfwords)

在双方格和三方格上:使用另一个像premium_tiles的表,每个正方格上都有1个,在双方格和三元组上分别有2和3。

代码如下:

for i, j in value:
    if not used[i][j]:
       sum1 *= mult[i][j]
       used[i][j] = True

其中usedmult是类似于premium_tiles的表,不同之处在于used的开头是False的全部,而mult的任何地方都有1不是2或3。

  

如果单词相同,如何计算分数?

这里的问题是words_dict需要从字典更改为元组列表[(word, [position])],因为字典每个键只允许一个条目。